2013-04-09 57 views
0

我将此代码添加到我的网站有文字消毒:文本消毒问题

var re = /(<([^>]+)>)/gi; 
     for (i=0; i < arguments.length; i++){ 
     arguments[i].value=arguments[i].value.replace(re, ""); 
     } 

但不知何故,人们能够使用的标签,仍然能够通过文本区我的网站上张贴的照片。请让我知道如果我的代码错误。

PS:用户也在逃避标签。

+6

他们可能可以绕过JavaScript端..你还需要消毒在服务器端 – 2013-04-09 05:45:37

+1

还与'i'小心变量,它泄漏。 – elclanrs 2013-04-09 05:47:07

+0

你是什么意思?老实说,当我看着用户通过mysql数据库输入的输入时,我只看到了html标签。 – Karthik 2013-04-09 05:47:39

回答

0

永远不要相信输入数据。 用户可以简单地使用curl或其他东西,并发送HTTP POST请求与他想要的任何数据在他的身体,你的服务器。 因此有一条规则在将其保存到数据库之前验证服务器端上的所有数据。

尽管可以引入客户端验证以改善用户体验,但无论如何,您必须在收到请求时验证服务器端的输入。


更新:

我看到你php标签标记你的问题,因此,如果你的服务器端应用程序是用PHP编写的,你可以使用一个HTML Purifier净化输入数据,并避免XSS等 另外,如果你使用一些PHP框架,它可能有一个自己的HTML净化器包装。例如Yii框架有它。

0

也许没有错,用户只需在提交前禁用javascript。

在服务器端 检查像

$_POST['name'] = preg_replace('/<[^>]*>/', '', $_POST['name']); 

OR

$_POST['name'] = strip_tags($_POST['name']);