这段代码容易受到SQL注入的影响吗?
function SaveUser($usu,$pass,$name){
$sql="insert into usuarios(USU,PASS,NOMBRE,ESTADO)
values('$usu',md5('$pass'),'$name','$apellido2','A')";
...
}发布于 2014-03-22 05:48:56
如果要停止sql注入,最安全的方法是不使用sql。尽管对于预准备语句,PDO是的最佳选择。我将留下一个连接/插入脚本的示例。文档在http://php.net/pdo上。另外,你应该使用bcrypt或password_hash (只有当你使用php5.5的时候)来散列密码。MD5不安全。
<?php
$connect = new PDO("mysql:host=localhost;dbname=db", "username", "password");
$connect->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
$query = $connect->prepare("insert into usuarios(USU,PASS,NOMBRE,ESTADO)
values(?, ?, ?, ?)");
$query->bindValue(1, $usu);
$query->bindValue(2, md5('$pass'));
$query->bindValue(3, $name);
$query->bindValue(4, $apellido2);
try {
$query->execute();
} catch (PDOException $e) {
die($e->getMessage());
}
?>发布于 2014-03-22 04:41:20
是的,如果您想停止sql注入,请使用pdo。在将输入数据插入数据库之前,清理输入数据非常重要。
下面是关于如何使用pdo的链接:http://www.php.net/manual/en/book.pdo.php
发布于 2014-03-22 04:51:01
当你在查询中插入动态数据(例如变量)时,这个查询就变成了可注入的。即使这些变量不是来自“外部”系统。你可以轻而易举地给自己注射。例如:
$name = "Miles O'Brien";
$sql = "SELECT * FROM users WHERE name='$name'";看起来完全清白。没有恶意用户提交的“外部”数据。它纯粹是您编写的代码+数据,但是名称中的'-quote现在破坏了您的语句,并导致了注入攻击。攻击失败是因为它实际上不是真正的攻击,但它仍然引入了一个SQL语法错误:
SELECT * FROM users WHERE name='Miles O'Brien';
^^^^^^^^^---- string
^^^^^^--dangling unknown field/keyword.https://stackoverflow.com/questions/22569024
复制相似问题