整理PHP防注入和XSS攻击一般滤波
因此如何防止XSS注入呢它仍然需要在用户的数据过滤中考虑周到,这不是下一个提示的完整总结。
1。假设所有用户输入数据都是邪恶的。
2。弱类型脚本语言必须保证类型和期望的一致性。
三.正则正则表达式
功能如4。strip_tags和htmlspecialchars是很好用的
5。外部Javascript不一定可靠。
6。领导过滤器必须注意
7。删除不必要的HTML注释
8。请你让我在探索…
方法1,使用PHP htmlentities函数
例子
防止非法的HTML代码的XSS攻击PHP XSS方法:包括单、双引号,使用htmlspecialchars()函数。
当你用htmlspecialchars()函数,通知二参数。如果你用htmlspecialchars($字符串),第二个参数是ent_compat默认。默认函数是转换双引号(),而不是为了逃避单引号()。
因此,需要更多的二参数的htmlspecialchars函数。它应该是这样使用的:htmlspecialchars($字符串,ent_quotes)。当然,如果你不需要变换引号,使用htmlspecialchars($字符串,ent_noquotes)。
此外,减少在所有英语当htmlentities htmlentities和htmlspecialchars无差异的使用,可以达到目的。然而,中国的情况下,htmlentities将所有的HTML代码,连同里面不能识别的汉字转换。
这两个功能如htmlentities和htmlspecialchars不足以支持字符串一样,所以他们不能转化。因此,字符串通过htmlentities和htmlspecialchars转化只能防止XSS攻击和防止SQL注入攻击。
所有打印的报表,如回声、打印等,需要通过htmlentities()打印之前,防止XSS。值得注意的是,中国应该写htmlentities($name,ent_noquotes,GB2312)。
方法二,没有表示我们给出函数
例子
功能xss_clean($数据){
固定实体;
$data = str_replace(array(','),数组('amp;,这里;','gt;'),为数据);
(($数据= preg_replace / / W # * + / /设备X20 } +){;/你的1美元,美元;数据);
($data = preg_replace /(#××{ 0-9a-f } +);* /单位、1美元,美元;数据);
数据html_entity_decode美元(美元的数据,ent_compat,'utf-8);
删除任何属性开始与/或xmlns
$data = preg_replace(' #(} + { 设备- X20 })({ } * ^ > > # IU:在| xmlns),1美元的美元>>,数据);
Javascript和VBscript的协议: / /删除:
数据preg_replace(' #美元=({ A-Z } *){ 设备- X20 } = { 设备- X20 }×(`一} *){ 设备- X20 } * j { 设备- X20 } *一个{ 设备- X20 }×V { 设备- X20 } * { 设备- X20 }的{ 设备- X20 }×C { 设备- X20 }×R { 设备- X20 }我{ 设备- X20 }×p { 设备- X20 } * T设备,# IU,X20 } *,1美元= 2nojavascript美元,美元数据)..;
数据preg_replace(' #美元=({ } } { X20 A-Z *)* =({ X00 - } *){ 设备- X20 }×V { 设备- X20 }×B { 设备- X20 } * S { 设备- X20 }×C { 设备- X20 }×R { 设备- X20 }我{ 设备- X20 }×p { 设备- X20 } * T { 设备- X20 }:# IU,1美元= 2novbscript美元美元,数据…);
数据preg_replace(' #美元=({ } } { X20 A-Z *)* =({ X00 - } *){ 设备- X20 }×-moz-binding { 设备- X20 }:# U ',' 1美元= 2nomozbinding美元,美元数据…);
在伊江的工作:
数据preg_replace(' #美元=(} +)风格{ 设备- X20 } = { 设备- X20 } * { ` 设备- X20 } * } *。*表达式{({ ^ > } * + > #我',' 1美元>,$data);
数据preg_replace(' #美元=(} +)风格{ 设备- X20 } = { 设备- X20 } * { ` 设备- X20 } * } *。*行为{({ ^ > } * + > #我',' 1美元>,$data);
数据preg_replace(' #美元=(} +)风格{ 设备- X20 } = { 设备- X20 } * { ` } *。* { X00 - X20 }×C { 设备 X20 }×R { 设备- X20 }我{ 设备- X20 }×p { 设备- X20 } * T { 设备- X20 } *:* { ^ > } * > # IU ',' 1美元>的数据,美元);
名称空间的元素 / /删除(我们不需要它)
$data = preg_replace(' # } * > #我',' ',为数据);
尽可能删除不需要的标签
old_data美元= $数据;
$data = preg_replace(' # } * > #我',' ',为数据);
},($ old_data!= $数据);
完成了/我们…
返回$数据;
}
方法三:
< PHP
/ / PHP防注入和XSS攻击一般滤波。
用QQ:831937
_get safefilter美元(美元_get);
_post safefilter美元(美元_post);
_cookie safefilter美元(美元_cookie);
功能safefilter($ ARR)
{
($ra=Array / ({x00-x08, x0b-x0c, x0e-x19})'/script/','/javascript/','/vbscript/'','/expression/','/applet/','/meta/','/xml/','/blink/','/link/','/style/','/embed/','/object/','/frame/','/layer/','/title/','/base/','/onload/' / bgsound/','/onunload/','/onchange/','/onsubmit/','/onreset/','/onselect/','/onblur/','/onfocus/','/onabort/'.'/onkeydown/','/onkeypress/','/onkeyup/','/onclick/','/ondblclick/','/onmousedown/','/onmouseout/','/onmouseover/'/ onmousemove/','/onmouseup/','/onunload/');
如果(is_array($ ARR))
{
foreach(ARR美元美元美元的价值关键=)
{
如果(!is_array(美元值))
{
如果(get_magic_quotes_gpc)(!) / /不magic_quotes_gpc addslashes()的特点,以避免双逃逸。
{
价值= addslashes(美元值); / /单引号(')、双引号(),反斜杠()、空(null字符)和反斜杠
}
价值= preg_replace(元岭,美元的价值); / /删除非打印字符,粗过滤XSS可疑的字符串
ARR { } =美元美元关键htmlentities(strip_tags(美元值)); / /的HTML和PHP标记去除并转换为HTML实体
}
其他的
{
safefilter($ ARR { $关键});
}
}
}
}
>