我正在寻找最安全的方法来清理用户输入并避免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文档后,我必须说我两者之间没有太大差异,所以我不能拒绝最安全的方法。你能告诉我这个吗?
答案 0 :(得分:1)
他们做不同的事情。
始终转义数据库的数据。最好用准备好的陈述来完成。
在将文本插入HTML之前始终转义文本(htmlspecialchars
是此处的基本工具)。
始终(除非您绝对信任您的用户既不是恶意的并且能够编写高质量的HTML),在将输入的HTML插入HTML文档之前,请对输入的HTML使用DOM感知白名单XSS过滤器。
当数据中包含某些字符(例如电话号码中的非数字)时,使用过滤器(除上述之外)是没有意义的。首先确保你的preconceptions是正确的。
答案 1 :(得分:0)
使用mysqli的预制红外语句,而不是过滤/消毒。无论参数的内容如何,都可以安全地执行,并且不需要繁琐且容易出错的转义/取消转义。