• 常见漏洞防护(一)---xss漏洞


    笔者能力有限,本篇只介绍了简单的PHP方面的XSS防护

    一、基于白名单、黑名单的过滤

    基于白名单

    基于白名单时,设置允许存在的标签,不存在白名单的直接返回,例如wordpress -> wp-include -> kses.php文件中,对每个标签的属性进行过滤

    基于黑名单

    基于黑名单时,不太安全,毕竟自己不知道的知识点太多,过滤起来可能不全面,,例如利用str_place()、preg_replace()过滤时,会有漏掉的标签,比如下面这样,只过滤了<script>标签,用其他姿势轻松绕过

    <?
    $name = str_replace('<script>','',$_GET['a']);
    echo $name;
    ?>
    

    二、转义

    转义主要用到htmlspecialchars函数和htmlentities函数

    htmlspecialchars()

    htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。

    预定义的字符是:

    & (和号)成为 &
    " (双引号)成为 "
    ' (单引号)成为 '
    < (小于)成为 <
    > (大于)成为 >
    

    w3cschool讲解

    htmlentities()

    htmlentities(string,flags,character-set,double_encode)
    当flag字段为不同的值时,
    可选。规定如何处理引号、无效的编码以及使用哪种文档类型。

    可用的引号类型:

    ENT_COMPAT - 默认。仅编码双引号。
    ENT_QUOTES - 编码双引号和单引号。
    ENT_NOQUOTES - 不编码任何引号。
    

    无效的编码:

    ENT_IGNORE - 忽略无效的编码,而不是让函数返回一个空的字符串。应尽量避免,因为这可能对安全性有影响。
    ENT_SUBSTITUTE - 把无效的编码替代成一个指定的带有 Unicode 替代字符 U+FFFD(UTF-8)或者 &#FFFD; 的字符,而不是返回一个空的字符串。
    ENT_DISALLOWED - 把指定文档类型中的无效代码点替代成 Unicode 替代字符 U+FFFD(UTF-8)或者 &#FFFD;。
    

    规定使用的文档类型的附加 flags:

    ENT_HTML401 - 默认。作为 HTML 4.01 处理代码。
    ENT_HTML5 - 作为 HTML 5 处理代码。
    ENT_XML1 - 作为 XML 1 处理代码。
    ENT_XHTML - 作为 XHTML 处理代码。
    

    w3cschool讲解

    两个函数的区别

    htmlentities转换所有的html标记,htmlspecialchars只转义& 、’、 “、 <、> 这几个特殊符号。使用htmlentities不指定编码的话遇到中文会乱码。

  • 相关阅读:
    Python正课101 —— 前端 入门
    Python正课100 —— 数据库 进阶5
    Python正课99 —— 数据库 进阶4
    Navicat15安装教程
    Python正课98 —— 数据库 进阶3
    Python正课97 —— 数据库 进阶2
    Python正课96 —— 数据库 进阶1
    解决:MySQL报错
    Python正课95 —— 数据库 入门
    作业3
  • 原文地址:https://www.cnblogs.com/BuFFERer/p/12601564.html
Copyright © 2020-2023  润新知