All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
ASP.NET,3.5,扩展(预览版)介绍、下载和在线教程_[Asp.Net教程]
在Visual,C#程序中使用系统热键_.net资料_编程技术
菜鸟学习:动态网页PHP基础学习笔记_php资料_编程技术
验证控件的气泡提示效果_[Asp.Net教程]
利用XMLHTTP无刷新获取数据_[XML教程]
Html网页页面head区规范知识_[Html教程]
基于PHP和AJAX创建RSS聚合器_php资料_编程技术
delphi设置代码模板
用VS2005生成数据库连接字符串_[Asp.Net教程]
理解动态网页技术PHP与数组的应用_php资料_编程技术
Reading number is top 10 pictures
In the world the most mysterious 21 place landscape1
俄罗斯台球天后惊艳魅惑1
大人物的礼物
传几朵花
这玉米,买还是不卖?
壮丽的云彩1
如果没有好报,为什么要做好人?
恶搞漫画1
So beauty, will let you spray blood8
Sora aoi mirror memorial classics2
Download software ranking
虚拟机汉化软件
传奇私服架设教程-chm
Tram sex maniac 2 (H) rar bag8
Call Of Duty5
Unix video tutorial5
SP4 for SQL2000
Jinling thirteen stock
WebService在.NET中的实战应用教学视频 → 第4集
I'm come from Beijing1
Tram sex maniac 2 (H) rar bag4
归海一刀 published in(发表于) 2014/2/10 6:47:19 Edit(编辑)
PHP和XSS跨站攻击_[PHP教程]

PHP和XSS跨站攻击_[PHP教程]

PHP和XSS跨站攻击_[PHP教程]

其实这个话题很早就想说说了,发现国内不少PHP站点都有XSS漏洞。今天偶然看到PHP5的一个XSS漏洞,在此小结一下。顺便提醒,使用PHP5的朋友最好打下补丁,或者升级一下。


如果你不懂什么是XSS,可以看这里,或者这里(中文的也许会好懂一些)。


国内不少论坛都存在跨站脚本漏洞,例如这里 有一个Google Hack+XSS的攻击例子,针对的是Discuz 4.0.0RC3。国外也很多这样的例子,甚至Google也出现过,不过在12月初时修正了。跨站攻击很容易就可以构造,而且非常隐蔽,不易被查觉(通常****信息后马上跳转回原页面)。
如何攻击,在此不作说明(也不要问我),主要谈谈如何防范。首先,跨站脚本攻击都是由于对用户的输入没有进行严格的过滤造成的,所以我们必须在所有数据进入我们的网站和数据库之前把可能的危险拦截。针对非法的HTML代码包括单双引号等,可以使用htmlentities() 。


str = "A 'quote' is bold";


// Outputs: A 'quote' is <b>bold</b>
echo htmlentities(str);


// Outputs: A 'quote' is <b>bold</b>
echo htmlentities(str, ENT_QUOTES);
?>



这样可以使非法的脚本失效。

但是要注意一点,htmlentities()默认编码为 ISO-8859-1,如果你的非法脚本编码为其它,那么可能无法过滤掉,同时浏览器却可以识别和执行。这个问题我先找几个站点测试后再说。


这里提供一个过滤非法脚本的函数:


function RemoveXSS(val) {
// remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
// this prevents some character re-spacing such as
// note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', val);

// straight replacements, the user should never need these since they're normal characters
// this prevents like
search = 'abcdefghijklmnopqrstuvwxyz';
search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
search .= '1234567890!@#%^&*()';
search .= '~`";:?+/={}[]-_|\'\\';
for (i = 0; i < strlen(search); i++) {
// ;? matches the ;, which is optional
// 0{0,7} matches any padded zeros, which are optional and go up to 8 chars

// &#x0040 @ search for the hex values
val = preg_replace('/(&#[x|X]0{0,8}'.dechex(ord(search[i])).';?)/i', search[i], val); // with a ;
// &#00064 @ 0{0,7} matches '0' zero to seven times
val = preg_replace('/(&#0{0,8}'.ord(search[i]).';?)/', search[i], val); // with a ;
}

// now the only remaining whitespace attacks are \t, \n, and \r
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; // keep replacing as long as the previous round replaced something
while (found == true) {
val_before = val;
for (i = 0; i < sizeof(ra); i++) {
pattern = '/';
for (j = 0; j < strlen(ra[i]); j++) {
if (j > 0) {
pattern .= '(';
pattern .= '(&#[x|X]0{0,8}([9][a][b]);?)?';
pattern .= '|(&#0{0,8}([9][10][13]);?)?';
pattern .= ')?';
}
pattern .= ra[i][j];
}
pattern .= '/i';
replacement = substr(ra[i], 0, 2).''.substr(ra[i], 2); // add in <> to nerf the tag
val = preg_replace(pattern, replacement, val); // filter out the hex tags
if (val_before == val) {
// no replacements were made, so exit the loop
found = false;
}
}
}
}







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.