Sanitize:trim()+ mysqli_real_escape_string()OR filter_input()?

时间:2015-09-23 14:05:07

标签: php sanitization

我正在寻找最安全的方法来清理用户输入并避免PHP在线应用程序的安全风险。

到目前为止,我使用TRIM + mysqli_real_escape_string来清理空格和清理内容,因为这(字符串数据):

$ca_title = trim(mysqli_real_escape_string($con,$_POST['ca_name']));

由于连续“不直接访问超全球$ _post数组”Netbeans的建议,我搜索了这个,并找到了另一种消毒方法,我怀疑是否与我现在制作的相同:

$ca_title = filter_input(INPUT_POST, 'ca_name', FILTER_SANITIZE_STRING);

在查看PHP文档后,我必须说我两者之间没有太大差异,所以我不能拒绝最安全的方法。你能告诉我这个吗?

2 个答案:

答案 0 :(得分:1)

他们做不同的事情。

始终转义数据库的数据。最好用准备好的陈述来完成。

在将文本插入HTML之前始终转义文本(htmlspecialchars是此处的基本工具)。

始终(除非您绝对信任您的用户既不是恶意的并且能够编写高质量的HTML),在将输入的HTML插入HTML文档之前,请对输入的HTML使用DOM感知白名单XSS过滤器。

当数据中包含某些字符(例如电话号码中的非数字)时,使用过滤器(除上述之外)是没有意义的。首先确保你的preconceptions是正确的。

答案 1 :(得分:0)

使用mysqli的预制红外语句,而不是过滤/消毒。无论参数的内容如何,​​都可以安全地执行,并且不需要繁琐且容易出错的转义/取消转义。