htmlspecialchars() 函数过滤XSS的问题

htmlspecialchars()函数的功能如下:

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

预定义的字符是:

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

它的语法如下:

htmlspecialchars(string,flags,character-set,double_encode)

其中第二个参数flags需要重要注意,很多开发者就是因为没有注意到这个参数导致使用htmlspecialchars()函数过滤XSS时被绕过。因为flags参数对于引号的编码如下:

可用的引号类型:

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

默认是只编码双引号的!默认只编码双引号!默认只编码双引号……重要的事情说三遍!!!

于是看下面的代码:

  

<?php
    $name = $_GET["name"];
    $name = htmlspecialchars($name);
?>  

<input type=‘text‘ value=‘<?php echo $name?>‘>

  

轻松绕过:

加上ENT_QUOTES参数:

  

<?php
    $name = $_GET["name"];
    $name = htmlspecialchars($name, ENT_QUOTES);
?>  

<input type=‘text‘ value=‘<?php echo $name?>‘>

  

发现无法绕过了:

查看源代码:

单引号已经被转换了。

原文地址:https://www.cnblogs.com/JeromeZ/p/8452819.html

时间: 2024-10-20 08:34:38

htmlspecialchars() 函数过滤XSS的问题的相关文章

php 使用htmlspecialchars() 和strip_tags函数过滤HTML标签的区别

原文地址:http://www.manongjc.com/article/1103.html 先来看一下htmlspecialchars函数和strip_tags函数的使用实例: <?php $str="<a href='http://www.manongjc.com'>码农教程'\"</a>"; echo htmlspecialchars($str); echo "<br/><br/>"; echo

PHP.25-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图

添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace Admin\Controller; use Think\Controller; //后台添加商品功能控制器 class GoodsController extends Controller { //显示和处理表单 public function add() { //判断用户是否提交了表单(如果提交了,就

php中htmlspecialchars()函数和addslashes()函数的使用和区别

在防止被注入攻击时,常会用到两个函数:htmlspecialchars()和addslashes()函数.这两个函数都是对特殊字符进行转义. 1)addslashes()作用及使用 addslashes()通常用于防止sql注入,它可对通过get,post和cookie传递过来的参数的单引号和双引号已经null前加“\”进行转义 如:如变量$str=$_POST["str"];的值为:bb' or 1='1.通过addslashes()函数过滤后会变为:bb\' or 1=\'1: 2

前端过滤XSS攻击

日常开发过程中,对于存在用户交互的一些门户网站等,过滤xss攻击是必不可少的. 此处主要记录下我在工作过程中的简单处理方法. 前端过滤XSS攻击, 我这里用的是开源工程 js-xss,官网地址:http://jsxss.com/zh/index.html 查看官网可发现,与其他的js库一样,使用js-xss,只需(下载)引入xss.js文件到页面即可. 注意 : xss.js中主要使用到的方法为 filterXSS() 由于我在开发过程中,提交数据多是以表单序列化直接提交的,所以我重写了一下表单

htmlpurifier-富文本编辑器过滤XSS

本帖语言环境:php:开发框架:TP3.2; 1.htmlpurifier-4.6.0下载地址:https://files.cnblogs.com/files/samgo/htmlpurifier-4.6.0.zip 将下载好的压缩包解压,修改名称为htmlpurifier,放在如下目录: 2.定义公共函数clearXSS(),路径:Application/Common/Common/function.php(注意function.php不能写成functions.php) /* 过滤xss函数

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

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体. 语法为:htmlspecialchars(string,quotestyle,character-set). PHP 从 5.4.0 版本开始把htmlspecialchars() 函数的第三个参数字符串编码的默认值改成了 UTF-8, 为了使 PHP 5.4 之前环境中编写的代码能够向前兼容,建议调用 htmlspecialchars 函数的的时候都提供字符串编码参数. 比如说PHP代码中的中文编码正好是 G

DataTable利用内置函数过滤数据,用于查询

DataTable利用内置函数过滤数据,RowFilter用法,写法如下: ? string strName = string.Empty;//查询条件  string strSQL = string.Empty;//SQL  DataView datav = dt.DefaultView; //利用Defaultview  if (!string.IsNullOrEmpty(textBox1.Text.Trim()))  {      strName = textBox1.Text.Trim(

JAVA覆写Request过滤XSS跨站脚本攻击

注:本文非本人原著. demo的地址:链接:http://pan.baidu.com/s/1miEmHMo 密码:k5ca 如何过滤Xss跨站脚本攻击,我想,Xss跨站脚本攻击令人为之头疼.为什么呢. 尤其是有富文本编辑器的产品.xss可能出现在http的head,不说别的,新浪多次出现. xss可以出现在post数据的正文.图片的url. 于是各种Xss横行,如今Xss跨站脚本漏洞的流行程度甚至超过了当年的sql. 那么对于JAVA语言,如何防御呢. 笔者分享一个思路:所有的web项目,所有的

Java Filter过滤xss注入非法参数的方法

http://blog.csdn.NET/feng_an_qi/article/details/45666813 Java Filter过滤xss注入非法参数的方法 web.xml: [html] view plain copy <filter> <filter-name>XSSFiler</filter-name> <filter-class> com.paic.mall.web.filter.XssSecurityFilter </filter-c