Php Sql注入获取id解决方案

Php Sql注入获取id解决方案,php,mysql,Php,Mysql,我不知道如何使这个代码安全。我尝试在查询变量中使用mysql\u real\u escape\u字符串,如 $query=“从id=”的产品中选择*。mysql\u real\u escape\u字符串($products)我会使用MySQL而不是转义。转义跳过某些通配符,例如“%”和“*”,这也可能会提供意外的结果 $stmt = $dbh->prepare("SELECT * FROM PRODUCTS WHERE ID=?"); $stmt->bindParam(1, $pr

我不知道如何使这个代码安全。我尝试在查询变量中使用mysql\u real\u escape\u字符串,如

$query=“从id=”的产品中选择*。mysql\u real\u escape\u字符串($products)我会使用MySQL而不是转义。转义跳过某些通配符,例如“%”和“*”,这也可能会提供意外的结果

$stmt = $dbh->prepare("SELECT * FROM PRODUCTS WHERE ID=?");
$stmt->bindParam(1, $products, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 

// call the stored procedure
$stmt->execute();
此外,请记住以下措施以确保安全:

  • 永远不要以超级用户或数据库所有者的身份连接到数据库。使用始终具有非常有限权限的自定义用户
  • 检查给定输入是否具有预期的数据类型。(在本例中,请验证$products的格式是否符合预期,即如果您的产品目录的索引只有9个字符,请确保其长度不超过100个字符。)PHP有多种输入验证函数,从变量函数和字符类型函数中最简单的函数(例如is_numeric()、ctype_digit()中的函数)分别)和以后的Perl兼容正则表达式支持
  • 如果应用程序等待数字输入,考虑用CyType数字()验证数据,或者使用SETType()悄悄地更改它的类型,或者使用SaveTFF()来使用它的数值表示。

参考资料:

您仍然需要添加引号(并改用msqli),如:

$query=“从id=”的产品中选择*”。mysqli_real_escape_string($products)。“”;
//或
$query=sprintf(
“从id为“%s”的产品中选择*,
mysqli\u real\u escape\u字符串($products)
);

Define:不起作用。@Fred ii-它仍然容易受到sql注入的攻击。使用mysqli或pdo-准备语句和绑定参数^。事先准备好的陈述不是100%的解决方案。@RamRaider我同意这一点,但我仍然想用一种老方法来做。是的,这很容易。谢谢