用户输入过滤

我会带着你远行 2023-08-17 15:38 183阅读 0赞
普通数据过滤

PHP 内置过滤函数:

addsclashes 函数和 stripcslashes 函数

addcslashes($input, $charlist): 使用反斜线转义字符串 input 中的指定字符串. charlist 由指定字符组成的字符串.

stripcslashes($input): 反转义由 addcslashes 转义的字符串.

示例:

  1. // 需要执行SQL语句
  2. $id = $_GET['id'];
  3. $sql = "select * from user where id =\"{
  4. $id}\"";
  5. // 如果用户输入: 123"; delete from user where 1="1
  6. // 未经过滤直接执行的SQL语句为:
  7. echo $sql; // 输出: select * from user where id ="123";delete from user where 1="1", 实际执行了查询和删除两条语句.
  8. // 过滤用户输入
  9. $id = addcslashes($id, "'\".*?;%"); // 将'、"、.、*、?、;、%都转义
  10. echo $sql; // 输出: select * from user where id ="123\"\;delete from user where 1=\"1", 最终只能执行一条查询语句

htmlspecialchars 函数和 htmlspecialchars_decode

htmlspecialchars($input): 将指定字符串中的指定字符串转换为 HTML 实体. 具体的转换范围可以通过函数的第二个参数指定.

htmlspecialchars_decode($input): 将字符串中的 HTML 实体转换为普通字符串. 具体的转换范围可以通过函数的第二个参数指定.

与此类似的函数还有htmlentities和html_entity_decode函数, 这两个函数的转换范围更大.

strip_tags 函数

strip_tags($input): 去除字符串中的空字符、HTML 和 PHP 标记. 可以通过第二个参数指定需要保留的 HTML 和 PHP 标记.

  1. $text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
  2. echo strip_tags($text);
  3. echo "\n";
  4. // 允许 <p> 和 <a>
  5. echo strip_tags($text, '<p><a>');
富文本过滤

在使用普通方式过滤富文本数据无法达到目的时, 可以通过第三方插件过滤富文本数据. 如 HTMLPurifier 富文本过滤器, 官网: http://htmlpurifier.org/

  1. header('Content-type: text/plain; charset=utf-8');
  2. require_once './htmlpurifier/library/HTMLPurifier.auto.php';
  3. $html = "<div>
  4. <h1>标题</h1>
  5. <p>段落</p>
  6. <hr/>
  7. <span>行内文本</span>
  8. <a href='path/img.jpg'>a标签</a>
  9. <br/>
  10. <script>alert('js代码')</script>
  11. </div>";
  12. // 白名单模式, 只保留HTML中的指定标签: p标签和带href属性的a标签
  13. $config = HTMLPurifier_Config::createDefault();
  14. $config->set('HTML.Allowed', 'p, a[href]'); // 第二个参数设置为null即允许所有HTML标签, 设置为空字符串即禁止所有HTML标签
  15. $config->set('AutoFormat.RemoveEmpty', true); // 移除空标签
  16. $purifier = new HTMLPurifier($config);
  17. $cleanHtml = $purifier->purify($html);
  18. echo $cleanHtml;

HTMLPurifier 支持多种过滤规则, 这些规则都是通过设置 config 对象实现. config 支持的设置具体参考: http://htmlpurifier.org/live/configdoc/plain.html

转载于:https://www.cnblogs.com/fxyy/p/11384381.html

发表评论

表情:
评论列表 (有 0 条评论,183人围观)

还没有评论,来说两句吧...

相关阅读

    相关 PHP安全编程之过滤用户输入

    过滤是Web应用安全的基础。它是你验证数据合法性的过程。通过在输入时确认对所有的数据进行过滤,你可以避免被污染(未过滤)数据在你的程序中被误信及误用。大多数流行的PHP应用的漏