首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP函数中避免SQL注入

在PHP函数中避免SQL注入
EN

Stack Overflow用户
提问于 2014-03-22 04:35:27
回答 6查看 774关注 0票数 0

这段代码容易受到SQL注入的影响吗?

代码语言:javascript
复制
function SaveUser($usu,$pass,$name){
    $sql="insert into usuarios(USU,PASS,NOMBRE,ESTADO)
    values('$usu',md5('$pass'),'$name','$apellido2','A')";

    ...
}
EN

回答 6

Stack Overflow用户

发布于 2014-03-22 05:48:56

如果要停止sql注入,最安全的方法是不使用sql。尽管对于预准备语句,PDO是的最佳选择。我将留下一个连接/插入脚本的示例。文档在http://php.net/pdo上。另外,你应该使用bcrypt或password_hash (只有当你使用php5.5的时候)来散列密码。MD5不安全。

代码语言:javascript
复制
<?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());
}
?>
票数 2
EN

Stack Overflow用户

发布于 2014-03-22 04:41:20

是的,如果您想停止sql注入,请使用pdo。在将输入数据插入数据库之前,清理输入数据非常重要。

检查这个:How does PHP PDO's prepared statements prevent sql injection? What are other benefits of using PDO? Does using PDO reduce efficiency?

下面是关于如何使用pdo的链接:http://www.php.net/manual/en/book.pdo.php

票数 1
EN

Stack Overflow用户

发布于 2014-03-22 04:51:01

当你在查询中插入动态数据(例如变量)时,这个查询就变成了可注入的。即使这些变量不是来自“外部”系统。你可以轻而易举地给自己注射。例如:

代码语言:javascript
复制
$name = "Miles O'Brien";
$sql = "SELECT * FROM users WHERE name='$name'";

看起来完全清白。没有恶意用户提交的“外部”数据。它纯粹是您编写的代码+数据,但是名称中的'-quote现在破坏了您的语句,并导致了注入攻击。攻击失败是因为它实际上不是真正的攻击,但它仍然引入了一个SQL语法错误:

代码语言:javascript
复制
SELECT * FROM users WHERE name='Miles O'Brien';
                               ^^^^^^^^^---- string
                                        ^^^^^^--dangling unknown field/keyword.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22569024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档