我正在尝试避免对使用html检查器进行的选择进行任何操作。
我的代码:
<select name="select">
<option value="1">1</option>
<option value="2">2</option>
</select>
我将其提交给数据库,如下所示:
$select = $_POST['select'];
$statement = $pdo->prepare('INSERT INTO option (select) VALUES(?)');
$statement->execute(array($select));
如果某人更改了选项的“值”部分,则会提交操纵的选项值。我该如何解决?
答案 0 :(得分:4)
您永远不应信任前端的数据。始终检查后端的值。喜欢
$select = intval($_POST['select']);
if( $select === 1 || $select === 2)
{
$statement = $pdo->prepare('INSERT INTO option (select) VALUES(?)');
$statement->execute(array($select));
}
else
{
// something is fishy
}
编辑:(以覆盖评论)
输入具有一些可接受的范围或值。精确地是[1,2或5]还是1到100000000之间的任何值都没有关系。您设置边界检查,对照数据库进行检查等,以确保您取回可接受的值。
上面的代码已简化。检查您得到的类型。如果希望使用整数,请执行intval($var)
以确保得到整数。还要检查字符串的长度。在此处查看更多信息:https://www.guru99.com/equivalence-partitioning-boundary-value-analysis.html
答案 1 :(得分:3)
我正在尝试避免对使用html检查器进行的选择进行任何操作。
不能。用户的浏览器中发生的事情与您无关。您不是用户。这是他们的浏览器。
您无法控制将什么提交到HTTP端点。
您只能编写服务器端代码来对此作出反应。例如如果提交了不可接受的值,则会返回错误消息。