可能重复:
停止PHP 中SQL注入的最佳方法
我需要保护此代码免受SQL注入攻击,可能使用mysql_real_escape_string
。我在哪里以及如何使用它?
<?php
mysql_select_db("database");
$sql="INSERT INTO email (address) VALUES ('$_POST[address]')";
if (!mysql_query($sql))
{
die('Error: ' . mysql_error());
}
echo "<center>THANK YOU!</center>";
?>
您应该能够将您的post值包装在mysql_real_eescape_string()中:
$address = mysql_real_escape_string($_POST[address]);
$sql="INSERT INTO email (address) VALUES ('$address')";
Stack Overflow不太适合教学,而更适合对不太常见的问题给出权威答案。
你会遇到一个常见的问题,"我该如何使用这个函数",最好使用PHP文档来回答这类问题。例如,您在文档中查找mysql_real_escape_string
,就会发现以下页面:http://php.net/manual/en/function.mysql-real-escape-string.php
其示例代码如下:
<?php
// Connect
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
?>
将其应用到您的案例中会得到:
$sql = sprintf("INSERT INTO email (address) VALUES ('%s')",
mysql_real_escape_string($_POST['address']));
或者你可以分两个阶段来做,
$email = mysql_real_escape_string($_POST['address'])
$sql = sprintf("INSERT INTO email (address) VALUES ('$email')"