PHP中SQL注入的验证和检测

Cra*_*ayl 6 php mysqli sql-injection

我是PHP的新手,还不熟悉它是如何工作的.

  1. 如果我使用mysqli_real_escape_string()并参数化SQL查询中的每个变量,我可以省去自己进行验证is_numeric()等吗?

  2. 创建注射检测系统的最佳方法是什么?用regex的东西简单验证用户的输入并将其保存在数据库中?

Mic*_*ski 2

即使您已经通过使用参数化查询或mysql_real_escape_string()(不是mysql_escape_string())来保护变量免受注入,您仍然应该在服务器端验证它们,以确保它们与预期的输入类型匹配。这样,如果不这样做,您可以向用户返回一条错误消息,并请求重试这些表单字段。

如果您使用参数化查询(例如 MySQLi 提供的预准备语句),则无需转义字符串。但是,如果您不使用参数化查询,则必须调用mysql_real_escape_string()PHP 接收到的每个输入参数。