我需要从SQL注入攻击中保护这个PHP代码

时间:2012-03-31 21:11:19

标签: php sql-injection mysql-real-escape-string

  

可能重复:
  Best way to stop SQL Injection in PHP

我需要保护此代码免受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>";

?> 

2 个答案:

答案 0 :(得分:2)

你应该能够将你的帖子值包装在mysql_real_escape_string()中:

$address = mysql_real_escape_string($_POST[address]);

$sql="INSERT INTO email (address) VALUES ('$address')";

答案 1 :(得分:1)

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')"