假设有一个 AJAX 应用程序,用户可以在其中提交项目 - 购买它们。
还有一个代码
IF ($_POST[items] > 20) {
echo 'error';
}
else {
do_buy($_POST[items]);
echo 'success'
}
在这里,有一个检查是否items不超过 20。在客户端,应该不能选择超过 20 个项目。
即使提交了 21 个(或更多)项目(用户只需为每个项目付费),系统也可以正常工作。虽然我知道你一定想大喊不信任客户,但如果没有后果,这样做有什么害处吗,就像这里的情况一样?
有人可能会说,超载购物车可能会导致系统不稳定,但似乎最坏的情况是某些脚本超时。如果错误被禁用,用户将不会得到任何响应。
一般来说:为违反系统不变量的攻击编写保护代码是否有意义?
更新:
$_POST['items'] 我的意思是这是数组,而不是整数。以及每个项目如何拥有属性 - id 和数量,稍后在完成购买操作之前检查这些属性。
关于 sql 注入 - 我通常使用框架,它们负责注入保护。
更新
我问这个问题的另一个原因是我想要尽可能多的干净代码,并且当有人阅读它时 - 会想为什么需要这样做,这个程序员不知道他在编程什么以及为什么。因此,对于所有代码,我想清楚地说明为什么那段代码存在,所以如果没有评论,那么至少我自己会清楚地理解为什么要进行此检查,以便我可以解释是否有其他程序员询问。