�寸��php�叉敞�ュ��XSS�诲�婚���ㄨ�婊�

瀵圭�绔�����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('/(&#x*[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

你可能感兴趣的:(�寸��php�叉敞�ュ��XSS�诲�婚���ㄨ�婊�)