在PHP中,将$ _POST值设置为变量有什么好处,而不仅仅是在已经消毒之后使用$ _POST值进行内联?
答案 0 :(得分:3)
在您“清理”$_POST
数组本身时,前提是有缺陷的。
“Sanitisation”(我无法在没有引号的情况下编写)是一个令人不安的概念,因为它通常归结为随机删除在某些情况下可能具有某些特殊含义的字符。问题在于:a)随机删除数据会留下用户实际输入的一些随机子集,永远不知道现在究竟发生了什么,以及b)每个上下文都有自己的特殊字符,这意味着几乎不可能平等地消毒所有情况。
您需要单独为每个上下文转义或编码(HTML编码为HTML,SQL-escape为SQL (更好:使用参数化查询) ,JSON编码JSON等)。不要随意删除数据的子集,希望它现在对于您想要的任何上下文都是“安全的”。
由于1.,将所有输入数据修改一次并丢弃原始数据意味着您实际上完全丢弃了原始数据。以后可能会非常麻烦......
解决方案:
从概念上讲,当您生成一段数据的更改版本时,请将其分配给新变量:
$htmlEncodedUsername = htmlspecialchars($_POST['username']);
$sqlEscapedUsername = $mysqli->real_escape_string($_POST['username']);
智能地执行此操作,不要分配一千个新变量:
$stmt->bindValue(':username', $_POST['username']);
...
<p><?php echo htmlspecialchars($_POST['username']); ?></p>
无需执行您最初提议的任何事情。