我在本地主机上有一个简单的注册表单(仍在测试),我想知道它是否可以被SQL注入攻击?
代码:

$name = mysql_real_escape_string($_POST['name']);
$password = mysql_real_escape_string($_POST['password']);
$password = md5($password);
$email = mysql_real_escape_string($_POST['email']);
$refId = $_GET['refid'];
$ip = $_SERVER['REMOTE_ADDR'];


$add = mysql_query("INSERT INTO `users` (`name`, `password`, `email`, `refId`, `ip`)
VALUES('$name','$password','$email','$refId', '$ip')") or die(mysql_error());

这是安全的还是有人可以使用SQL注入(我想知道如何使用)?如何避免注射?

最佳答案

避免注射的最好方法是使用Prepared Statements
对于准备好的语句,我更喜欢使用PDO来处理我所有的DB内容。下面是我为检索一些基本登录信息而编写的一些PDO示例代码:

$sql=new PDO("mysql:host=127.0.0.1;dbname=name","user","password");
        $user=$_POST[user];

        $query="select Salt,Passwd from User
                where Name=:user";
        $stmt=$sql->prepare($query);
        $stmt->bindParam(':user',$user);
        $stmt->execute();
        $dr=$stmt->fetch();
        $sql=null;
        $password=$_POST[pass];
        $salt=$dr['Salt'];

... 等
阅读this页了解有关PDO的更多信息。如果你想知道每一行代码在做什么,请阅读我给另一篇文章的答案。

关于php - 避免在注册表格php中进行SQL注入(inject),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11418211/

10-11 22:22