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不指定编码的话遇到中文会乱码。

  • 相关阅读:
    编程实现SQL Server数据库导入导出操作
    C#正则表达式入门
    Winform实现窗体抖动的效果代码
    js获取当前日期,格式为YYYYMMDD
    XML基本知识及其技术指南
    WPF学习心得
    脚本调试
    标题:VS2008简体中文专业版
    使用 XML Schema 定义元素的基本知识2
    C#操作xml文件入门
  • 原文地址:https://www.cnblogs.com/BuFFERer/p/12601564.html
Copyright © 2011-2022 走看看