使用str_replace修复SQL注入

问题描述 投票:0回答:1

我有源代码,并尝试替换星号来修补SQL注入,这里是代码:

$search = str_replace ("*", "", $search);
$rows = mysqli_query ($conn, "SELECT * FROM users WHERE username=/*" . $search . "*/ 'Aaron'", MYSQLI_USE_RESULT); 

当变量放在C样式注释MySQL中时是否有可能利用?

sql security sql-injection
1个回答
0
投票

首先,如果您担心SQL注入,则应过滤用户的任何输入并进行验证。

最好的保护是通过准备好的语句来完成的。像这样:

<?php
/** Open DB-Connection */
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

$firstname = "John";
$lastname = "Smith";
$email = "[email protected]";

/** Your SQL-Statement */
$statement = $pdo->prepare("SELECT * FROM users WHERE firstname = :firstname OR lastname = :lastname OR email = :email");

/** Fills the parameter */
$statement->execute(array('firstname' => $firstname, 'lastname' => $lastname, 'email' => $email));   

?>

您尝试更换*将不起作用。 C风格的注释容易受到攻击。例如,如果黑客将“ *”作为UTF编码的符号发送,则他可能正在发送(编码)以下代码:

((用户名第一行,密码第二行)。

attacker', 1, /*
*/'pwd

© www.soinside.com 2019 - 2024. All rights reserved.