所以我有一个表单,它接受来自用户的一些输入,这些输入稍后可能会显示在页面上。
我从安全的角度考虑的方法是获取输入,对所有输入应用mysql_real_escape_string()函数,然后使用准备好的语句插入。
检索数据时,我将在屏幕上显示之前对其执行htmlspecialchars()操作。
可以吗?我是不是忽略了一些重要的事情?
最佳答案
两件事:
必须先转义所有输入,然后再将其发送到数据库;为此:mysql_real_escape_string
是正确的工具,如果您没有使用准备好的语句
如果您使用的是准备好的语句,则不需要自己转义:它将自动完成。
但是,您不能同时执行这两个操作:正如@longneck在他的评论中所阐明的,如果您正在逃离自己,并使用准备好的语句(这些语句也会逃脱),那么您的字符串将被转义两次——您不希望这样做。
然后,必须转义所有输出;如果输出格式为html,则htmlspecialchars或htmlentities可以。
所以,对于outtohtml,您所做的对我来说似乎是可以的;但是对于db的输出,您所做的却超出了必要的范围。
附带说明:如果您想允许用户使用HTML,可以使用类似于htmlpurifier的工具——它允许您指定允许或不允许哪些标记/属性。
关于php - 清理公众意见的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1406293/