这个SQL查询是否可以安全地注入?

NSF*_*NSF 1 php mysql sql security sql-injection

下面的代码是用php编写的:

$user = addslashes($_POST['user']);
$pwd = addslashes($_POST['pwd']);

$query = "SELECT * FROM userdata WHERE UserName='$user' AND Password=PASSWORD('$pwd')";
Run Code Online (Sandbox Code Playgroud)

然后将查询发送到mysql还有什么我需要处理的吗?

请指出.

Sar*_*raz 6

不,这不是安全的,请mysql_real_escape_string最低:

$user = mysql_real_escape_string($_POST['user']);
$pwd = mysql_real_escape_string($_POST['pwd']);
Run Code Online (Sandbox Code Playgroud)

为了更好的安全性,请准备好陈述.

最佳选择:

您可以询问选择哪一个,请查看:


Cod*_*ian 5

不.

原因是虽然单引号'不是打破SQL查询的唯一char,但引号是唯一转义的字符addslashes().

更好:使用mysql_real_escape_string

$user = mysql_real_escape_string($_POST['user'], $conn);
$pwd = mysql_real_escape_string($_POST['pwd'], $conn);

$query = "SELECT * FROM userdata WHERE UserName='$user' AND Password=PASSWORD('$pwd')";
Run Code Online (Sandbox Code Playgroud)

最佳:使用PDO和准备好的声明

$stmt = $dbh->prepare("SELECT * FROM userdata WHERE UserName=':user' AND Password=PASSWORD(':pass')");
$stmt->bindParam(':user', $user);
$stmt->bindParam(':pass', $pass);
Run Code Online (Sandbox Code Playgroud)