如何测试我的网站是不是存在基本的 sql 注入漏洞?
Posted
技术标签:
【中文标题】如何测试我的网站是不是存在基本的 sql 注入漏洞?【英文标题】:How to test my website for basic sql injection vulnerabilities?如何测试我的网站是否存在基本的 sql 注入漏洞? 【发布时间】:2017-05-28 23:58:07 【问题描述】:我正在为一个项目创建一个带有登录屏幕的基本网站,我想测试它是否存在一些基本的 sql 注入漏洞。我正在使用表单从用户那里读取用户名和密码,并使用这行 php 代码在我的数据库中查找他们的信息并将其打印给他们:
if(isset($_POST['username'])&&$_POST['username']!=""&&isset($_POST['pass'] )&&$_POST['pass']!="")
$sql="SELECT username,pass,email,name,surname,ADT,tel,address,bdate,gender FROM myusers WHERE username='".$_POST['username']."' AND pass='".$_POST['pass']."'";
提前感谢您的帮助。如果您需要有关我的代码的任何其他信息,请询问。
【问题讨论】:
我可以告诉你,你的代码很容易受到攻击,无需任何测试。 简单,只要问一个问题:“是否有任何没有完全参数化的任何语句? - 如果答案是肯定的,那么是的,您的代码非常容易受到攻击。这在您的示例中很明显。想象一下有人发布用户名'; DROP TABLE myusers; --
.. 顺便说一句:永远不会!存储纯文本密码! 使用password_hash()
和password_verify()
! (每次存储纯密码时,root 都会将小猫移动到 /dev/null)
【参考方案1】:
我会建议使用一些提琴手(我推荐telerik fiddler)并手动创建请求。通过该程序,您可以准备 sql-injection 请求并查看服务器响应。在这里你有一些基本的例子:
0+1, 2-1, (...) - if it return specific record, your code is vulnerable
In your case check this:
x' or 'x'='x'
x' or 'x'='x' --
1 AND 1=(SELECT 1), 1 AND 1=(SELECT 0) - check if subquery works
您也可以查看cheat sheet和sql injection cheat sheet。
【讨论】:
以上是关于如何测试我的网站是不是存在基本的 sql 注入漏洞?的主要内容,如果未能解决你的问题,请参考以下文章