1.XSS漏洞修复

从上面XSS实例以及之前文章的介绍我们知道XSS漏洞的起因就是没有对用户提交的数据进行严格的过滤处理。因此在思考解决XSS漏洞的时候,我们应该重点把握如何才能更好的将用户提交的数据进行安全过滤。

  html实体

             什么是html实体?
        在html中有些字符,像(<)这类的,对HTML(标准通用标记语言下的一个应用)来说是有特殊意义的,所以这些字符是不允许在文本中使用的。要在HTML中显示(<)这个字符,我们就必须使用实体字符。
        html实体的存在是导致XSS漏洞的主要原因之一。
       因此我们需要将这些实体全部转换为相应的实体编号。
显示结果
描述
实体名称
 
空格
&nbsp;
小于号
&lt;
大于号
&gt;
&
和号
&amp;
"
引号
&quot;
'
撇号 
&apos; (IE不支持)
 

     HTML Encode

             用户将数据提交上来的时候进行HTML编码,将相应的符号转换为实体名称再进行下一步的处理。
             在PHP中已经存在这样子功能的函数,即是htmlentities($str)函数。
            与之相反的就是html_entity_decode($str)函数,它将实体名称转换为相应的符号。
 

  修复漏洞方针

        【不相应用户提交的数据,过滤过滤过滤!】
          1、将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到 cookie了.
          2、表单数据规定值的类型,例如:年龄应为只能为int、name只能为字母数字组合。。。。
          4、对数据进行Html Encode 处理
          5、过滤或移除特殊的Html标签, 例如: <script>, <iframe> , &lt; for <, &gt; for >, &quot for
          6、过滤JavaScript 事件的标签。例如 "onclick=", "onfocus" 等等。
【特别注意:】
在有些应用中是允许html标签出现的,甚至是javascript代码出现。因此我们在过滤数据的时候需要仔细分析哪些数据是有特殊要求(例如输出需要html代码、javascript代码拼接、或者此表单直接允许使用等等),然后区别处理!

  PHP中的相应函数

【详细看PHP手册】
这里可能不全,想了解更多的看手册
 
strip_tags($str, [允许标签])  
从字符串中去除 HTML 和 PHP 标记
htmlentities($str)
转义html实体
html_entity_decode($str)
反转义html实体
addcslashes($str, ‘字符’)
给某些字符加上反斜杠
stripcslashes($str)
去掉反斜杠
addslashes ($str )
单引号、双引号、反斜线与 NULL加反斜杠
stripslashes($str)
去掉反斜杠
htmlspecialchars()
特殊字符转换为HTML实体
htmlspecialchars_decode()  
将特殊的 HTML 实体转换回普通字符
 

  数据过滤类

<?php
class XSS
{
/**
* @desc 过滤数据
*
* @param $data string|array 输入数据
* @param $low bool 是否采用更为严格的过滤
*
* @return 返回过滤的数据
*/
public function clean_xss($data, $low = False)
{
#字符串过滤
if (! is_array ( $data ))
{
$data = trim ( $data ); #字符两边的处理
$data = strip_tags ( $data ); #从字符串中去除 HTML 和 PHP 标记
$data = htmlspecialchars ( $data ); #特殊字符转换为HTML实体
if ($low)
{
return $data;
}
#匹配换空格
$data = str_replace ( array ('"', "\\", "'", "/", "..", "../", "./", "//" ), '', $data );
$no = '/%0[0-8bcef]/';
$data = preg_replace ( $no, '', $data );
$no = '/%1[0-9a-f]/';
$data = preg_replace ( $no, '', $data );
$no = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S';
$data = preg_replace ( $no, '', $data );
return $data;
}
#数组过滤
$arr=array();
foreach ($data as $k => $v)
{
$temp=$this->clean_xss($v);
$arr[$k]=$temp;
}
return $arr;
} }
#测试测试
session_start();
$_SESSION['xss']='xssss';
$xss=new XSS();
#测试字符串
$str = "<script>alert(document.cookie)</script>";
echo $str;
$str2=$xss->clean_xss($str);
echo $str2;
echo "<hr/>";
#测试数组
$arr=array("<script>alert(document.cookie)</script>","<script>alert(document.cookie)</script>","<script>alert(document.cookie)</script>");
echo "<pre>";
print_r($arr);
echo "</pre>";
$arr2=$xss->clean_xss($arr);
echo "<pre>";
print_r($arr2);
echo "</pre>";die;
?>

1.5 xss漏洞修复的更多相关文章

  1. php xss漏洞修复用手段和用到的一些函数

    php xss漏洞修复用到的一些函数 $text = '<p>"Test paragraph".</p><!-- Comment --> < ...

  2. Struts网站基于Filter的XSS漏洞修复

    下面的代码只支持struts2框架中的xss漏洞 第一步,创建过滤器XssFilter : package com.ulic.ulcif.filter; import java.io.IOExcept ...

  3. xss漏洞修复,待完善

    1.防止sql注入 /// <summary> /// 分析用户请求是否正常 /// </summary> /// <param name="Str" ...

  4. dedecms5.7最新漏洞修复

    最近发现织梦cms被挂马现象频繁,解决好好几个网站的问题,但是过不了多久,就又被攻击了,即使更改系统及ftp密码,也没有起到防御的作用,最后怀疑cms本身漏洞,于是采用工具扫描了一下,才发现问题的严重 ...

  5. 利用窗口引用漏洞和XSS漏洞实现浏览器劫持

    ==Ph4nt0m Security Team==                        Issue 0x03, Phile #0x05 of 0x07 |=----------------- ...

  6. (汉化改进作品)BruteXSS:Xss漏洞扫描脚本

    今天给大家进行汉化改进的事一款脚本工具:BruteXSS,这款脚本能自动进行插入XSS,而且可以自定义攻击载荷. 该脚本也同时提供包含了一些绕过各种WAF(Web应用防护系统)的语句.   0×01简 ...

  7. Web常见漏洞修复建议

    一.SQL注入修复建议 1.过滤危险字符,例如:采用正则表达式匹配union.sleep.and.select.load_file等关键字,如果匹配到则终止运行. 2.使用预编译语句,使用PDO需要注 ...

  8. 教你玩转XSS漏洞

    什么是存储性XSS那? 通俗理解就是”xss“语句存在服务器上,可以一直被客户端浏览使用,所有登陆某一个存在”存储性xss“的页面的人,都会中招,可以是管理员,可以是普通的用户,所以他的危害是持续性的 ...

  9. wordpress网站程序漏洞修复办法

    近日wordpress被爆出高危的网站漏洞,该漏洞可以伪造代码进行远程代码执行,获取管理员的session以及获取cookies值,漏洞的产生是在于wordpress默认开启的文章评论功能,该功能在对 ...

随机推荐

  1. 第五篇、javascript正则表达式二

    一.内容概要 1)创建着呢规则表达式对象的两种方法 2)正则表达式的常用属性和方法 3)string对象常用方法中可以使用正则表达式 4)ES中其他预定义的对象:Math.Date.Number.Bo ...

  2. 汇编语言入门(在debug中编辑和调试程序)

    2013-06-02 17:09 4252人阅读 评论(2) 收藏 举报  分类: 汇编语言(1)  版权声明:本文为博主原创文章,未经博主允许不得转载. 我们在Windows中进入的Dos方式,实际 ...

  3. logstash的output插件

    logstash 的output插件 nginx,logstash和redis在同一台机子上 yum -y install redis,vim /etc/redis.conf 设置bind 0.0.0 ...

  4. C++ Const 使用总结,代码实例亲测

    1. 修饰普通变量 修饰变量语法 const TYPE value  <==> TYPE const value 两者等价, 变量不可修改,无需说明. 2. 修饰指针 首先看下面一段 代码 ...

  5. java的远程访问接口的实例

    被别人远程调用和自己远程调用别人接口的理解: 被别人调用接口:其实没有什么神秘的,就是我们写一个正常的方法提供一个访问路径. 调用别人的接口:本质时一个Request请求,实际要使用到javax.ne ...

  6. GeoServer基础教程(二):GeoServer的Web管理界面快速入门

    转载:http://blog.163.com/daimiao_study/blog/static/248923117201542522742373/ GeoServer的控制和管理是基于网页形式,所有 ...

  7. SpringBoot_04_热部署

    二.参考资料 1.Spring Boot 系列(六)web开发-Spring Boot 热部署

  8. PHP如何得到数组最后元素的key

    1.array_keys(end($arr)) $array = array( 'one'=>1, 'two'=>2, 'three'=>3, 'four'=>4, ); $a ...

  9. BEC listen and translation exercise 35

    高中听力: At five o'clock, we have afternoon tea, but we don't have it in the kitchen. Father's Day is t ...

  10. BZOJ5362: [Lydsy1805月赛]quailty 算法

    BZOJ5362: [Lydsy1805月赛]quailty 算法 https://lydsy.com/JudgeOnline/problem.php?id=5362 分析: 题意即求一个最小基环树森 ...