针对篡改的用户输入和SQL注入的保护失败


Protection against tampered user input and SQL injection fails

所以我有一个包含2个文本输入的表单。一个是价格,另一个是数量。在保存表单之前,有一些检查可以防止篡改用户输入和SQL注入。

其中之一就是:

    if(strval(floatval($quantity)) === $quantity && strval(floatval($price)) === price) {
      $errors = false;
   }

这个支票的问题是,例如,如果我们有$price="47.80"floatval()得到47.8,然后strval()给出"47.8",这不等于"47.80"所以检查失败了,我们得到了一个错误。

我想知道你是否能想出一种方法来绕过这一点,而不太改变逻辑。

您可以使用过滤器扩展:

$price = filter_var($price, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);

它删除所有不是数字或句点的内容。

如果数字必须有两个小数点,那么你必须以某种方式强制执行。您可以不允许没有两个小数点的数字,也可以自己修改输入。应该这样做:

$price= number_format($price, 2, '.', null);