2012-04-01 90 views
0
function filter($p){ 
    $i=0; 
    return str_replace("<","&lt;",str_replace(">","&gt;",str_replace("&","&amp;",$p,$i),$i),$i); 
} 

任何想法通过这个xss预防? 只是我的想法,不做作业通过此过滤器的XSS攻击?

+1

为什么不直接使用htmlspecialchars()? – 2012-04-01 21:45:45

+0

假设编码器是noob,他不知道htmlspecialchar():D 我不谈论如何预防,我想知道如何攻击:D – n0b0dybk 2012-04-01 21:50:48

+3

Offtopic - 这个网站是不是审查代码。这就是http://codereview.stackexchange.com/的用途。但作为一般规则,不要推出自己的“安全”代码。除非你是专家,否则总会有一个或多个边缘案例让你的代码泄露。 – 2012-04-01 21:53:09

回答

2

正如问题勘误中提出的,这里的问题在于你试图在PHP中推出自己的替代品htmlspecialchars。尽管您已经要求进行现场代码审查以修复潜在的XSS exploit,但实际上您已经在应用程序中指出了处理漏洞的方式。

虽然你似乎是试图做(注this answer about black- and white-lists),您可以进行反复的修正或输入模式杀毒,您将得到更好的阅读this documentation on how to address and mitigate XSS exploitsthis additional documentation服务。它应该提供有关审查和重新构建您的应用程序的指导,以便干净而安全地处理这些威胁,而不是通过代码中的多个修复程序来减轻您的缓解策略。

Additional helpful resource

祝您好运与您的申请!

0

千万不要使用黑名单。始终使用白名单。关于大量不同的攻击的Read for example here。发人深省的:)

1

可能。例如,如果filter是内使用一个HTML标签,就像这样:

<input type="text" value="<?=filter($p)?>"> 

,攻击者可能会被强迫$p执行XSS攻击应运而生类似:

something" onfocus="javascript:alert('test') 

所以输出HTML变为:

<input type="text" value="something" onfocus="javascript:alert('test')">