首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL注入保护

SQL注入保护
EN

Stack Overflow用户
提问于 2009-09-22 13:18:59
回答 7查看 2.9K关注 0票数 5

下面的PHP语句是否可以防止MySQL注入?

代码语言:javascript
复制
$strSQL = "SELECT * FROM Benutzer WHERE Benutzername = '".$Benutzer."' AND Password = '".md5($PW)."'";

变量$Benutzer$PW是用户的输入。

我们正在根据常见的SQL注入技术检查用户名和密码:

' or 0=0 --" or 0=0 --or 0=0 --' or 0=0 #" or 0=0 #or 0=0 #' or 'x'='x" or "x"="x') or ('x'='x' or 1=1--" or 1=1--or 1=1--' or a=a--" or "a"="a') or ('a'='a") or ("a"="ahi" or "a"="ahi" or 1=1 --hi' or 1=1 --hi' or 'a'='ahi') or ('a'='ad25代码。

我是不是遗漏了什么?我应该使用不同的方法来防止SQL注入吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-09-22 13:27:37

您可能需要查看用于查询数据库的参数化查询。这消除了SQL注入攻击。

我主要使用postgreSQL,执行这种查询的格式如下所示:

代码语言:javascript
复制
$query = 'select * from Benutzer where Benutzername = $1 and Passwort = $2';
$params = array($Benutzer, md5($PW));
$results = pg_query_params($query, $params);

大多数数据库都有一个类似于这种功能的函数。

希望这能帮上忙,祝你好运!

凯尔

票数 11
EN

Stack Overflow用户

发布于 2009-09-22 13:25:16

我个人建议使用像SHA1 over MD5这样的算法,因为碰撞的可能性较低。你也应该是用盐腌你的密码,否则你可以用彩虹桌破解你的密码。

另外,使用mysql_real_escape_string()来逃避事情,不要简单地搜索和替换普通的注入。

票数 5
EN

Stack Overflow用户

发布于 2009-09-22 13:39:12

准备好 语句是一个奇妙的发明。

例如,http://www.php.net/manual/en/pdo.prepare.phphttp://www.php.net/manual/en/mysqli.prepare.php

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1460060

复制
相关文章

相似问题

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