zoukankan      html  css  js  c++  java
  • 常见漏洞防护(一)---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不指定编码的话遇到中文会乱码。

  • 相关阅读:
    servlet技术学习随笔
    python使用openpyxl读取excel文件
    课后作业-阅读任务-阅读提问-3
    课后作业-阅读任务-阅读提问-2
    课后作业-阅读任务-阅读笔记3
    构建之法:现代软件工程-阅读笔记2
    《构建之法:现代软件工程-阅读笔记》
    结对编程需求分析
    团队-团队编程项目作业名称-需求分析
    团队-团队编程项目作业名称-成员简介及分工
  • 原文地址:https://www.cnblogs.com/BuFFERer/p/12601564.html
Copyright © 2011-2022 走看看