如何phpphp如何防止xss攻击击

2147人阅读
ECSHOP(18)
XSS 全称为 Cross Site Scripting,用户在表单中有意或无意输入一些恶意字符,从而破坏页面的表现!
看看常见的恶意字符XSS 输入:
1.XSS 输入通常包含 JavaScript 脚本,如弹出恶意警告框:&script&alert(&XSS&);&/script&
2.XSS 输入也可能是 HTML 代码段,譬如:
(1).网页不停地刷新 &meta http-equiv=&refresh& content=&0;&&
(2).嵌入其它网站的链接 &iframe src=http://xxxx width=250 height=250&&/iframe&
防止XSS攻击测试路径:
其实有很多测试XSS攻击的工具:
&(http://www.parosproxy.org)
&(/fiddler)
&(http://www.portswigger.net/proxy/)
&(/dl/TamperIESetup.exe)
对于PHP开发者来说,如何去防范XSS攻击呢?()
可以用如下函数:
&* @param $string
&* @param $low 安全别级低
function clean_xss(&$string, $low = False)
if (! is_array ( $string ))
$string = trim ( $string );
$string = strip_tags ( $string );
$string = htmlspecialchars ( $string );
$string = str_replace ( array ('&', &\\&, &'&, &/&, &..&, &../&, &./&, &//& ), '', $string );
$no = '/%0[0-8bcef]/';
$string = preg_replace ( $no, '', $string );
$no = '/%1[0-9a-f]/';
$string = preg_replace ( $no, '', $string );
$no = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S';
$string = preg_replace ( $no, '', $string );
$keys = array_keys ( $string );
foreach ( $keys as $key )
clean_xss ( $string [$key] );
//just a test
$str = '&meta http-equiv=&refresh& content=&0;&&';
clean_xss($str); //如果你把这个注释掉,你就知道xss攻击的厉害了
通过clean_xss()就过滤了恶意内容!
另外本文借鉴了IBM官网的这篇文章:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:132364次
积分:1363
积分:1363
排名:千里之外
原创:21篇
转载:32篇
评论:15条
(2)(2)(2)(2)(3)(12)(1)(1)(1)(3)(2)(1)(3)(1)(2)(1)(2)(1)(6)(5)如何php防止XSS攻击 - 博客频道 - CSDN.NET
TeachYouToBe的博客
分类:thinkphp
什么是XSS:这里通俗的讲,就像是SQL注入一样,XSS攻击也可以算是对HTML和JS的一种注入。你本来希望得到是从用户那得到一段有用的文本文字,但用户提交给你的却是别有用心的可执行javascript或者其他脚本,当你再把这些提交的内容显示到页面上时,xss攻击就发生了。
关于xss的攻击方式和场景层出不穷,以下是一些解决的方法,各位可以借鉴,如果有不准确的在下方评论,忘各位大神Coder不吝赐教
PHP htmlentities()函数& htmlentities() 函数把字符转换为 HTML 实体。语法为htmlentities(string,flags,character-set,double_encode)
实例把一些字符转换成HTML实体
$str = &Jane & 'Tarzan'&;
echo htmlentities($str, ENT_COMPAT); // Will only convert double quotes
echo &&br&&;
echo htmlentities($str, ENT_QUOTES); // Converts double and single quotes
echo &&br&&;
echo htmlentities($str, ENT_NOQUOTES); // Does not convert any quotes
?&上面代码的 HTML 输出如下(查看源代码):
&!DOCTYPE html&
Jane & 'Tarzan'&br&
Jane & 'Tarzan'&br&
Jane & 'Tarzan'
&/html& 上面代码的浏览器输出如下
Jane & 'Tarzan'
Jane & 'Tarzan'
Jane & 'Tarzan'
方法二 对COOKIE进行IP绑定
cookie里面一般有自动登录信息和session_id,就算对cookie里面的内容全部加了密,cookie的信息一但被别人通过XSS攻击获取后也一样等同于把自己的帐号密码给了别人。
对cookie进行IP绑定,(当然也可以获取用户客户端更多的其它信息进行同时绑定)可以根据用户的IP来判断这个cookie是不是来原始授权用户。代码案例如下
用户设置了自动登录时保存自动登录信息:
$auto=I('post.auto');//用户设置了自动登录
if(!empty($auto)){
cookie('auto',encrypt(serialize($data)));//将登录信息保存到cookie,其中$data里含有加密后的帐号,密码,和用户的IP,这里的cookie已在全局中设置过期日期为一周
用户关闭浏览器再次访问网站时,进行自动登录
if (!is_login()) {//是否未登录状态?
$auth=cookie('auto');
if(!empty($auth)){//是否未有自动登录cookie?
$data=unserialize(decrypt($auth));
if(!empty($data) && !empty($data['username']) && !empty($data['password']) && !empty($data['last_login_ip'])){
$user=M('Member')-&where(array('username'=&$data['username'],'password'=&$data['password']))-&find();
if(!empty($user['id'])&&($user['last_login_ip']==get_client_ip())){//cookie帐号密码是否有效?//IP来源是否相同?
login_session($user['id'], $user['username'], $data['last_login_ip']);//用户自动登录成功
}优点:大多数场景下可使被XSS攻击盗取的cookie失效。缺点:由于IP存在多台电脑共用的可能,对绑定做不到十分精细。
方法三 HTML5值得观注的新特性:
&src=&&&sandbox为iframe的增加的sandbox属性,可以防止不信任的Web页面执行某些操作.相信这个方法以后会被广泛使用
方法四 这有一个remove—xss方法,可以调用
function remove_xss($val) {
$val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', '', $val);
$search = 'abcdefghijklmnopqrstuvwxyz';
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$search .= '!@#$%^&*()';
$search .= '~`&;:?+/={}[]-_|\'\\';
for ($i = 0; $i & strlen($search); $i++) {
$val = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val);
$val = preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/', $search[$i], $val);
$ra1 = array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
$ra2 = array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
$ra = array_merge($ra1, $ra2);
$found = true;
while ($found == true) {
$val_before = $
for ($i = 0; $i & sizeof($ra); $i++) {
$pattern = '/';
for ($j = 0; $j & strlen($ra[$i]); $j++) {
if ($j & 0) {
$pattern .= '(';
$pattern .= '(&#[xX]0{0,8}([9ab]);)';
$pattern .= '|';
$pattern .= '|(&#0{0,8}([9|10|13]);)';
$pattern .= ')*';
$pattern .= $ra[$i][$j];
$pattern .= '/i';
$replacement = substr($ra[$i], 0, 2).'&x&'.substr($ra[$i], 2);
$val = preg_replace($pattern, $replacement, $val);
if ($val_before == $val) {
$found = false;
以上是本人个人经验积累,具体解决办法还要根据每个人编程的情况具体分析。请多指教~
TeachYouToBe
排名:千里之外
(2)(1)(1)(1)后使用快捷导航没有帐号?
PHP一分钟系列·如何防范SQL注入、CSRF、XSS攻击?
时间: 09:01
阅读数:341
作者:子路
摘要:PHP一分钟系列·如何防范SQL注入、CSRF、XSS攻击?
1如何防范SQL注入1、使用PDO预处理的方式,也就是一个萝卜一个坑。预处理。将输入的数值,绑定到参数,也就是放进坑里(一个萝卜一个坑,一个参数一个坑),这样输入的内容(外部的内容)就都落到坑里了,在每个坑里处理每个参数,这样就安全了,不会出现SQL注入。2、使用htmlspecialchars()等函数进行转义。还可以对输入类型进行检测,类型转换。2如何防范CSRF攻击1、使用token进行验证。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。(使用GET或POST方法加TOKEN)2、验证HTTP Referer字段。HTTP Referer字段,记录该HTTP请求的来源。如果来源是外部,那么就拒绝这个请求。(这个方法不安全,可以篡改HTTP Referer字段)3、一般框架,像ThinkPHP、laravel有表单令牌可以做防范。4、相关文章:/developerw&3如何防范XSS攻击1、案例:听以前在阿里的同事分享:之前淘宝有一个意见反馈功能,有一天后台人员查看用户提交的意见,打开的某一条意见的瞬间,自动跳转到了另一个网站。但当时幸亏是阿里内网,对外网做了限制,没有造成危害。可见,XSS不可小觑。2、防范:最简单的办法,过滤输入。对用户的输入,可以使用htmlspecialchars()等函数进行过滤转义,当然,一些文件上传等,也可能会造成此攻击,要限制上传文件的类型,比如只能传图片等。END
本文章共有0条评论后使用快捷导航没有帐号?
暂时关闭广告
查看: 944|回复: 0
php教程_php防止xss攻击的方法
该用户从未签到主题帖子豆豆
阅读推荐:php教程:
其实就是过滤从表单提交来的数据,使用php过滤函数就可以达到很好的目的。php点点通给出实例:&?php
if (isset($_POST['name'])){
$str = trim($_POST['name']);
//清理空格
$str = strip_tags($str);
//过滤html标签
$str = htmlspecialchars($str);
//将字符内容转化为html实体
$str = addslashes($str);
&form method="post" action=""&
&input name="name" type="text"&
&input type="submit" value="提交" &
上一篇:下一篇:
豆豆充值:
小白基地1、本站资源全部是百度网盘里的,不是360云盘、华为网盘,对百度云盘下载不了解请看帮助中心教程。
2、本站资源均来自网络,如侵犯您的合法权益,请发邮件至,本站将及时予以删除。
3、您在访问本站的过程中,如有任何意见、建议和疑问可直接联系本站客服反映,请勿轻信他人,谨防上当受骗!
本站资源全部来自网络和网友分享,如有侵犯您的权益,请联系网站QQ,或发邮件至。本网站尊重知识产权,无意侵犯知识产品,如有,联系网站人员,会第一时间删除!
小白基地,是小白资源网的官方网站,思必达学院官网,提供最新的创业技术支持与创业资讯,提供最新的思必达教程。是IT小白网友学习资源分享基地,中国互助创业资源网。提供诸如JAVA、PHP、MySQL、ASP、C语言等各类程序开发的教程资源。

我要回帖

更多关于 php防止xss攻击 的文章

 

随机推荐