php - 避免在注册表单 php 中注入(inject) SQL

标签 php mysql sql sql-injection

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

代码:

$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 注入(inject)吗(我想知道如何使用)?如何避免注入(inject)?

最佳答案

避免注入(inject)的最好方法是使用 Prepared Statements .
对于准备好的语句,我更喜欢使用 PDO 来处理我所有的数据库内容。这是我为检索一些基本登录信息而编写的一些 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 的更多信息的页面。如果你想知道这里的每一行代码在做什么,请阅读 this我给另一个帖子的答案。

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

相关文章:

php - 如何在 php 中使用 mySQL 数据库创建连接功能

mysql - 重命名从 SQL 连接查询返回的值

php - "MySQL server has gone away"错误,我觉得不是超时

c# - 如何使用 C# 将 SQL 存储过程表转换为 HTML

php - 从 HTML 标签获取信息并将其传递给 PHP

php - cakePHP验证

php - 如何同时将一张表中的id插入到另一张表中?

mysql - 通过脚本更改字段和端口 mysql 表数据?

mysql - 如何使用 MySQL Workbench 保存视频文件

MySQL:由于外键问题无法插入记录