2010-11-23 34 views
0

我正在构建一个评论网站,允许用户提交将存储在MySQL数据库中的评论。评论将由我手动审查内容,然后显示在我的网站上。这里是我的清洗数据的自定义功能(表单上的每个项目传递给此功能):对我的表单安全性的意见提交/显示

function cleanDataForDB($data) { 
$data = trim(htmlentities(strip_tags($data))); 

if (get_magic_quotes_gpc()) 
    $data = stripslashes($data); 

$data = mysql_real_escape_string($data); 

return $data; 

}

一旦被批准我没有写脚本来显示评论但是我打算只是通过html_entity_decode()函数从我的MySQL表中传递所有字段并将它们写入我的页面的HTML。

有没有人在这个计划中看到任何明显的安全漏洞?这对我来说似乎很安全,但这是我建立的第一个允许用户提交数据的站点,所以我想确保我不会让自己变得脆弱。

谢谢!

+0

魔术引号更正应该在一个中心位置进行一次。有关`if(get_magic_quotes_gpc()){$ _POST = array_map(“stripslashes”,$ _POST); $ _GET ...}` – mario 2010-11-24 00:42:06

回答

1

在将数据放入数据库之前,应该对数据进行数据库转义,并在将数据拉出时进行HTML转义。这样,你可以在将来处理用户帖子中的HTML,而不会发现“哎呀,我把它弄坏了”。

转义插入数据的最佳方法是使用PDO。

对于显示数据,htmlentities可能就足够了。

+0

`htmlspecialchars`通常更好,但也取决于*正确的字符集参数是有效的。 – mario 2010-11-24 00:44:31

+0

我不熟悉PDO,而且php.net手册对这个主题不是很有帮助。你说这是我应该使用的东西,除了我已经使用的自定义功能?我认为PDO以某种方式提供更强大的安全性? – Chris 2010-11-24 00:59:57

0

我同意Borealid,但是想补充一点,您可能希望使用preg_replace()来完全删除任何JavaScript脚本,而不是仅仅从中剥离标签。