瀵圭�绔�����XSS�诲�荤���瑰���寰�澶�绉�锛�浠�浠�浣跨��php��涓�浜���缃�杩�婊ゅ�芥�版��瀵逛�涓�浜���锛��充娇浣�灏�filter_var,mysql_real_escape_string,htmlentities,htmlspecialchars,strip_tags杩�浜��芥�伴�戒娇�ㄤ�浜�涔�涓�涓�瀹��戒�璇�缁�瀵圭��瀹��ㄣ��
�d�濡�浣�棰��� XSS 娉ㄥ�ワ�涓昏�杩�����瑕��ㄧ�ㄦ�锋�版��杩�婊ゆ�归�㈠������ㄥ��锛��ㄨ���涓�瀹��ㄦ�荤�涓���涓� Tips
1. ��瀹��������ㄦ�疯��ユ�版���芥�������垛����
2. 寮辩被��������璇�瑷�蹇�椤讳�璇�绫诲����������涓���
3. �����ㄥ�ㄧ��姝e��琛ㄨ揪寮�
4. strip_tags��htmlspecialchars 杩�绫诲�芥�板�濂界��
5. 澶��ㄧ�� Javascript 涓�涓�瀹�灏辨��������
6. 寮��疯�婊ゅ�椤昏����规敞��
7. �ゅ�讳�蹇�瑕��� HTML 娉ㄩ��
8. Exploer 姹�浣��捐����р����
�规�涓�锛��╃��php htmlentities�芥��
渚�瀛�
php�叉��XSS璺ㄧ�������诲�荤���规�:����瀵归��娉���HTML浠g����������寮��风��锛�浣跨��htmlspecialchars()�芥�� ��
�ㄤ娇��htmlspecialchars()�芥�扮���跺��娉ㄦ��绗�浜�涓�����, �存�ョ��htmlspecialchars($string) ��璇�,绗�浜�涓����伴�璁ゆ��ENT_COMPAT,�芥�伴�璁ゅ����杞�����寮���(��), 涓�瀵瑰��寮���(��)��杞�涔�.
��浠�,htmlspecialchars�芥�版�村����跺��瑕���涓�绗�浜�涓�����, 搴�璇ヨ��风��: htmlspecialchars($string,ENT_QUOTES).褰���,濡�����瑕�涓�杞���濡�浣���寮���,��htmlspecialchars($string,ENT_NOQUOTES).
��澶�, 灏介��灏���htmlentities, �ㄥ�ㄩ�ㄨ�辨�����跺��htmlentities��htmlspecialchars娌℃���哄��,�藉��浠ヨ揪�扮����.浣���,涓������典�, htmlentities�翠�杞���������html浠g��锛�杩������㈢��瀹���娉�璇�����涓���瀛�绗�涔�缁�杞���浜���
htmlentities��htmlspecialchars杩�涓や釜�芥�板�� '涔�绫荤��瀛�绗�涓叉����涓�濂�,�戒��借浆��, ��浠ョ��htmlentities��htmlspecialchars杞�����瀛�绗�涓插���介�叉��XSS�诲��,涓��介�叉��SQL娉ㄥ�ユ�诲��.
���������扮��璇��ュ�echo锛�print绛� �ㄦ���板���借�浣跨��htmlentities() 杩�琛�杩�婊わ�杩��峰��浠ラ�叉��Xss锛�娉ㄦ��涓���瑕�����htmlentities($name,ENT_NOQUOTES,GB2312) ��
�规�浜�锛�浠�涔�涔�涓�澶�璇存��浠�缁�涓�涓��芥��
渚�瀛�
functionxss_clean($data){
//Fix &entity锛�n;
$data=str_replace(array('&','<','>'),array('&','<','>'),$data);
$data=preg_replace('/(*锛�w+)[锛�x00-锛�x20]+;/u','$1;',$data);
$data=preg_replace('/(*[0-9A-F]+);*/iu','$1;',$data);
$data=html_entity_decode($data,ENT_COMPAT,'UTF-8');
//Remove any attribute starting with "on" or xmlns
$data=preg_replace('#(<[^>]+?[锛�x00-锛�x20"锛�'])(?:on|xmlns)[^>]*+>#iu','$1>',$data);
//Remove javascript: and vbscript: protocols
$data=preg_replace('#([a-z]*)[锛�x00-锛�x20]*=[锛�x00-锛�x20]*([`锛�'"]*)[锛�x00-锛�x20]*j[锛�x00-锛�x20]*a[锛�x00-锛�x20]*v[锛�x00-锛�x20]*a[锛�x00-锛�x20]*s[锛�x00-锛�x20]*c[锛�x00-锛�x20]*r[锛�x00-锛�x20]*i[锛�x00-锛�x20]*p[锛�x00-锛�x20]*t[锛�x00-锛�x20]*:#iu','$1=$2nojavascript...',$data);
$data=preg_replace('#([a-z]*)[锛�x00-锛�x20]*=([锛�'"]*)[锛�x00-锛�x20]*v[锛�x00-锛�x20]*b[锛�x00-锛�x20]*s[锛�x00-锛�x20]*c[锛�x00-锛�x20]*r[锛�x00-锛�x20]*i[锛�x00-锛�x20]*p[锛�x00-锛�x20]*t[锛�x00-锛�x20]*:#iu','$1=$2novbscript...',$data);
$data=preg_replace('#([a-z]*)[锛�x00-锛�x20]*=([锛�'"]*)[锛�x00-锛�x20]*-moz-binding[锛�x00-锛�x20]*:#u','$1=$2nomozbinding...',$data);
//Only works in IE:
$data=preg_replace('#(<[^>]+?)style[锛�x00-锛�x20]*=[锛�x00-锛�x20]*[`锛�'"]*.*?expression[锛�x00-锛�x20]*锛�([^>]*+>#i','$1>',$data);
$data=preg_replace('#(<[^>]+?)style[锛�x00-锛�x20]*=[锛�x00-锛�x20]*[`锛�'"]*.*?behaviour[锛�x00-锛�x20]*锛�([^>]*+>#i','$1>',$data);
$data=preg_replace('#(<[^>]+?)style[锛�x00-锛�x20]*=[锛�x00-锛�x20]*[`锛�'"]*.*?s[锛�x00-锛�x20]*c[锛�x00-锛�x20]*r[锛�x00-锛�x20]*i[锛�x00-锛�x20]*p[锛�x00-锛�x20]*t[锛�x00-锛�x20]*:*[^>]*+>#iu','$1>',$data);
//Remove namespaced elements (we do not need them)
$data=preg_replace('#]*+>#i','',$data);
do{//Remove really unwanted tags
$old_data=$data;
$data=preg_replace('#]*+>#i','',$data);
}while($old_data!==$data);
//we are done...
return$data;
}
�规�涓�锛�
//php�叉敞�ュ��XSS�诲�婚���ㄨ�婊�.
$_GET&&
SafeFilter($_GET);
$_POST&&
SafeFilter($_POST);
$_COOKIE&&
SafeFilter($_COOKIE);
functionSafeFilter
(&$arr)
{
$ra=Array('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/','/script/','/javascript/','/vbscript/','/expression/','/applet/','/meta/','/xml/','/blink/','/link/','/style/','/embed/','/object/','/frame/','/layer/','/title/','/bgsound/','/base/','/onload/','/onunload/','/onchange/','/onsubmit/','/onreset/','/onselect/','/onblur/','/onfocus/','/onabort/','/onkeydown/','/onkeypress/','/onkeyup/','/onclick/','/ondblclick/','/onmousedown/','/onmousemove/','/onmouseout/','/onmouseover/','/onmouseup/','/onunload/');
if(is_array($arr))
{
foreach($arras$key=>$value)
{
if(!is_array($value))
{
if(!get_magic_quotes_gpc())//涓�瀵�magic_quotes_gpc杞�涔�杩���瀛�绗�浣跨��addslashes(),�垮������杞�涔���
{
$value=addslashes($value);//缁���寮��凤�'锛�����寮��凤�"锛�������绾匡�\锛�涓�
NUL锛�NULL 瀛�绗�锛���涓�����绾胯浆涔�
}
$value=preg_replace($ra,'',$value);//���ら�����板��绗�锛�绮��村�杩�婊�xss����瀛�绗�涓�$arr[$key]
= htmlentities(strip_tags($value));//�婚��
HTML �� PHP ��璁板苟杞���涓� HTML 瀹�浣�
}
else
{
SafeFilter($arr[$key]);
}
}
}
}
?>
1.1 浠�涔���XSS�诲��
XSS��涓�绉�缁�甯稿�虹�板��web搴��ㄤ腑��璁$���哄���ㄦ�娲�锛�瀹���璁告�舵��web�ㄦ�峰�浠g��妞��ュ�版��渚�缁��跺���ㄦ�蜂娇�ㄧ��椤甸��涓���姣�濡�杩�浜�浠g������HTML浠g����瀹㈡�风���������诲�昏���╃��XSS婕�娲���璺���璁块���у�垛����渚�濡���婧�绛���(same origin policy)��杩�绉�绫诲����婕�娲��变�琚�榛�瀹㈢�ㄦ�ョ����卞�虫�ф�村ぇ��缃�缁���楸�(Phishing)�诲�昏����寰�骞夸负浜虹�ャ��瀵逛�璺ㄧ�������诲��锛�榛�瀹㈢���辫����锛�璺ㄧ�������诲�绘���板������缂��插�烘孩�烘�诲����锛���JavaScript���板������ShellCode����
�版���ユ�锛�2007 OWASP Top 10��MITRE�版��
娉�锛�OWASP��涓���涓����ュ����Web瀹��ㄤ��版��搴�瀹�����绌剁�缁�
��2007骞�OWASP��缁�璁$������瀹��ㄥ���涓�锛�璺ㄧ�������诲�诲���颁�22%锛�楂�灞�����Web濞���涔�棣���
XSS�诲�荤���卞�冲����
1��������绫荤�ㄦ��甯���锛�濡��哄�ㄧ�诲�甯��枫���ㄦ�风��跺��枫����绫荤�$����甯���
2���у�朵�涓��版��锛�����璇诲����绡℃�广��娣诲�������や�涓������版�����藉��
3����绐�浼�涓���瑕����锋����涓�浠峰�肩��璧���
4����娉�杞�璐�
5��寮哄�跺�����靛����浠�
6��缃�绔���椹�
7���у�跺��瀹宠���哄�ㄥ���跺��缃�绔���璧锋�诲��
1.2 XSS婕�娲�����绫�
XSS婕�娲����ф�诲�诲�╃�ㄦ��娉���涓���锛���浠ヤ�涓�绉�绫诲��锛�
绫诲��A锛����板�╃�ㄦ�娲�锛�杩�绉�婕�娲�瀛��ㄤ�椤甸��涓�瀹㈡�风��������韬����舵�诲�昏�绋�濡�涓���绀猴�
Alice缁�Bob����涓�涓��舵������浜�Web��URL��
Bob�瑰�诲苟�ョ��浜�杩�涓�URL��
�舵��椤甸��涓���JavaScript��寮�涓�涓��锋��婕�娲���HTML椤甸�㈠苟灏��跺��瑁���Bob�佃��涓���
�锋��婕�娲���HTML椤甸�㈠����浜���Bob�佃�����板���ц���JavaScript��
Alice���舵��������浠ュ��Bob���佃��涓��ц�Bob������������涓����戒护��
绫诲��B锛���灏�寮�婕�娲�锛�杩�绉�婕�娲���绫诲��A��浜�绫讳技锛�涓�������Web瀹㈡�风��浣跨��Server绔���������椤甸��涓虹�ㄦ�锋��渚��版���讹�濡�����缁�楠�璇����ㄦ�锋�版��琚������ㄩ〉��涓�����缁�HTML瀹�浣�缂���锛�瀹㈡�风��浠g��渚胯�藉�娉ㄥ�ュ���ㄦ��椤甸��涓����舵�诲�昏�绋�濡�涓�锛�
Alice缁�甯告�瑙���涓�缃�绔�锛�姝ょ�绔�涓�Bob���ユ����Bob��绔��硅�琛�Alice浣跨�ㄧ�ㄦ�峰��/瀵���杩�琛��诲�锛�骞跺���ㄦ����淇℃��(姣�濡��惰�甯��蜂俊��)��
Charly����Bob��绔��瑰������灏��х��XSS婕�娲���
Charly缂���涓�涓��╃�ㄦ�娲���URL锛�骞跺��跺����涓烘�ヨ��Bob����浠跺����缁�Alice��
Alice�ㄧ�诲���Bob��绔��瑰��锛�娴�瑙�Charly��渚���URL��
宓��ュ��URL涓����舵��������Alice��娴�瑙��ㄤ腑�ц�锛�灏卞��瀹��存�ユ�ヨ��Bob�����″�ㄤ��枫��姝よ������绐�����淇℃��(������淇$�ㄥ�°��甯��蜂俊��绛�)�跺����Alice瀹��ㄤ��ユ�������典�灏�杩�浜�淇℃��������Charly��Web绔��广��
绫诲��C锛�瀛��ㄥ�婕�娲�锛�璇ョ被����搴��ㄦ��涓哄箍娉���涓������藉奖����Web���″�ㄨ��韬�瀹��ㄧ��婕�娲�锛�楠�瀹�灏��诲�昏����涓�浼���Web���″�ㄤ�锛�浣垮�����璁块��璇ラ〉�㈢���ㄦ�烽�介��涓翠俊��娉�婕������斤��朵腑涔�����浜�Web���″�ㄧ��绠$�������舵�诲�昏�绋�濡�涓�锛�
Bob�ユ��涓�涓�Web绔��癸�璇ョ���瑰��璁哥�ㄦ�峰��甯�淇℃��/娴�瑙�宸插��甯���淇℃����
Charly娉ㄦ����Bob��绔��瑰�锋��绫诲��C��XSS婕�娲���
Charly��甯�涓�涓����逛俊��锛��稿��跺���ㄦ�风悍绾烽��璇汇��
Bob������浠讳����朵�浜哄�Alice娴�瑙�璇ヤ俊��锛��朵�璇�cookies�����跺��淇℃��灏�琚�Charly��璧般��
绫诲��A�存�ュ����ㄦ�蜂釜浣�锛���绫诲��B��绫诲��C��濞�����瀵硅薄�芥��浼�涓�绾�Web搴��ㄣ��
浼�缁��插尽����
缂�杈�
2.1.1�轰��瑰����插尽
XSS婕�娲���������SQL娉ㄥ�ユ�娲�涓��凤��芥���╃�ㄤ�Web椤甸�㈢��缂���涓�瀹���锛���浠ユ��涓�涓�婕�娲����╃�ㄥ����瀵圭��寮辩�归�戒�灏界�稿����杩�灏辩�XSS婕�娲��插尽甯��ヤ��伴�撅�涓����戒互��涓��瑰��ユ�������XSS�诲�汇��
浼�缁�XSS�插尽澶������瑰��归���瑰�锛��ㄦ������浜ょ��淇℃��涓��借�琛��归��妫��ャ��瀵逛�杩�绉�绫诲����XSS�诲�伙����ㄧ��妯″��归���规�涓���浼���瑕�瀵光��javascript��杩�涓��抽��瀛�杩�琛�妫�绱�锛�涓������版��浜や俊��涓�������javascript��锛�灏辫�ゅ��涓�XSS�诲�汇��杩�绉�妫�娴��规���缂洪�锋�捐����瑙�锛�楠�瀹㈠��浠ラ��杩����ュ��绗���瀹��ㄧ������瑰�韬查�挎�娴�锛�
韬查�挎�规�1)��javascript涓����ュ�涓�tab��锛�寰���
< IMG SRC="jav ascript:alert('XSS');" >;
韬查�挎�规�2) ��javascript涓�����(绌烘��)瀛�绗�锛�寰���
< IMG SRC="javascri pt:alert('XSS');" >;
韬查�挎�规�3) ��javascript涓�����(��杞�)瀛�绗�锛�寰���
< IMG SRC="jav
ascript:alert('XSS');" >;
韬查�挎�规�4)��javascript涓���姣�涓�瀛�绗��村���ュ��杞��㈣�绗�锛�寰���
< IMG SRC="javascrip\r
\nt:alert('XSS');" >
韬查�挎�规�5)瀵�"javascript:alert('XSS')"���ㄥ���ㄧ���锛�寰���
< IMGSRC=javascrip?74:alert('XSS') >
涓�杩版�规��藉��浠ュ�瀹规����韬查�垮�轰��瑰���妫�娴������や�浼���澶ч����婕��ュ�锛��轰��瑰���
杩�瀛��ㄥぇ����璇��ュ���斤��ㄤ��㈢��渚�瀛�涓�锛�瀵逛�杩版��缃�绔�杩��蜂�涓��板��锛��变�����浜��抽��瀛���javascript��锛�涔�灏�浼�瑙����ヨ����
2.1.2 �轰�浠g��淇��圭���插尽
��SQL娉ㄥ�ラ�插尽涓��凤�XSS�诲�讳����╃�ㄤ�Web椤甸�㈢��缂�����蹇斤���浠ヨ���涓�绉��规�灏辨��浠�Web搴��ㄥ�����瑙�搴��ラ�垮��锛�
姝ラ��1��瀵规�����ㄦ�锋��浜ゅ��瀹硅�琛�������杈��ラ��璇�锛�����瀵�URL���ヨ�㈠�抽��瀛���HTTP澶淬��POST�版��绛�锛�浠��ュ����瀹��垮害���村�������ㄩ��褰��煎������ㄦ��棰�����瀛�绗�����瀹规��浜わ�瀵瑰�朵���涓�寰�杩�婊ゃ��
姝ラ��2��瀹���Session��璁�(session tokens)��CAPTCHA绯荤�����HTTP寮��ㄥご妫��ワ�浠ラ�插���借�绗�涓��圭�绔����ц���
姝ラ��3��纭�璁ゆ�ユ�剁������瀹硅�濡ュ����瑙�����锛�浠�������灏�����瀹��ㄧ��Tag(娌℃��javascript)锛��绘��浠讳�瀵硅�绋���瀹圭��寮���(灏ゅ�舵���峰�琛ㄥ��javascript)锛�浣跨��HTTP only��cookie��
褰��讹�濡�涓���浣�灏�浼���浣�Web涓��$郴缁������ㄦ�э��ㄦ�蜂��借��ュ������跺��瀛�绗�锛�浜轰�绯荤��寸��浜や�琚����版���达�浠����ㄤ�淇℃����甯���绔��广��骞朵������板�灏���Web缂���浜哄����杩�姝h���瀹��ㄥ�硅��锛�寰��惧���板���ㄩ�垮��椤甸��涓���XSS婕�娲���
3 缁艰��
XSS�诲�讳�涓�Web涓��$����澶у���涔�涓�锛�涓�浠��卞��Web涓��℃��韬�锛�瀵硅�块��Web涓��$���ㄦ�蜂�浼�甯��ョ�存�ョ��褰卞��锛�濡�浣��茶�����绘��XSS�诲�伙�淇���Web绔��圭��涓��″����锛���瀹�浣�浜�涓��″����插尽���ヤ镜�插尽浜у��������宸ヤ���
���诲�讳�浠�
缂�杈�
�版氮寰���XSS���诲�讳�浠�
2011骞�6��28�ユ��锛��版氮寰����虹�颁�涓�娆℃��杈�澶х��XSS�诲�讳�浠躲��澶ч���ㄦ�疯���ㄥ����璇稿�锛�����缇�缇�浜�浠剁��涓�浜���娉ㄦ���扮��缁�����锛���寤哄��澶т�涓�绌垮府���版�光��锛���璁╁コ浜哄��ㄧ��100�ヨ��姝���锛���3D���㈠�㈤��娓�����璇���绉�瀛���锛���杩���浼�璇翠腑��绁�浠��蜂荆����锛�������!���板�拌�崇�х��娴��轰���绛�绛�寰�����绉�淇★�骞惰���ㄥ�虫敞涓�浣���涓�hellosamy���ㄦ�枫��
浜�浠剁��缁�杩�绾跨储濡�涓�锛�
20:14锛�寮�濮���澶ч��甯�V��璁よ���ㄦ�蜂腑��杞�������
20:30锛���缃�绔�涓�����姣�椤甸�㈡��娉�璁块��
20:32锛��版氮寰���涓�hellosamy�ㄦ�锋��娉�璁块��
21:02锛��版氮婕�娲�淇�琛ュ��姣�
http://baike.baidu.com/link?url=U6aHSRPZGSNdlqqaQPs_CEHwU6PJuv71AgK2bjszQR2jSzggRNGomF4BjImBqCMIKJARajr-cLI2PdvCKXcN6a