我有源代码,并尝试替换星号来修补SQL注入,这里是代码:
$search = str_replace ("*", "", $search);
$rows = mysqli_query ($conn, "SELECT * FROM users WHERE username=/*" . $search . "*/ 'Aaron'", MYSQLI_USE_RESULT);
当变量放在C样式注释MySQL中时是否有可能利用?
首先,如果您担心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