Sim*_*Bot 0 php mysql security sql-injection
我在大学里为我的安全模块做了一个SQL注入项目,我正在努力学习它是如何工作的.
我可以看到当脚本不过滤输入时它是如何工作的,然后循环遍历DB结果集,在屏幕上显示数据.但据我所知,以下代码不容易受SQL注入,因为它只期望在屏幕上显示一组值:
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("testdb");
$result = mysql_query("SELECT id, name, description FROM test_table WHERE id = ".$_GET['id']);
list($id, $name, $description) = mysql_fetch_row($result);
echo "ID: $id \n";
echo "Name: $name \n";
echo "Description: $description \n";
?>
Run Code Online (Sandbox Code Playgroud)
如果我将id的值设置为:
1 OR 1 = 1 UNION SELECT id, username, password FROM users LIMIT 1, 1 --
Run Code Online (Sandbox Code Playgroud)
除非我运行两次mysql_fetch_row($ result)语句,否则不会显示查询的UNION部分中的值,如下所示:
<?php
$result = mysql_query("SELECT id, name, description FROM test_table WHERE id = ".$_GET['id']);
list($id, $name, $description) = mysql_fetch_row($result);
echo "ID: $id \n";
echo "Name: $name \n";
echo "Description: $description \n";
list($id, $name, $description) = mysql_fetch_row($result);
echo "ID: $id \n";
echo "Name: $name \n";
echo "Description: $description \n";
?>
Run Code Online (Sandbox Code Playgroud)
只有这样才会显示语句的UNION部分的值(即用户名,密码).
如果有人对此有所了解,你能否确认我说上述代码不易受SQL注入影响,因为它只是期望在屏幕上显示一组值.
如果我错了,请纠正我.
谢谢你的帮助.
大多数人不明白注射剂是什么.
他们混淆注入漏洞与注射本身.
说到注射,只要你在查询中允许不需要的代码 - 注射是可能的,即使你注入的只是"Hello Kitty"(在预期的边界之外).
因此,新手程序员可以设计的所有数百万个问题的答案,"如果我有这个","如果我没有那个",那就完全相同了 - 是的,注射是可能的.
说到漏洞,有很多技术比你想象的要多,其中一些非常复杂.那么,回答"这种注射是否可以利用? "的问题,答案很可能也是肯定的.
因此,不要用"这可能吗?"来质疑自己.这个问题没有丝毫意义.您只需要编写防注射代码.这就是为什么这个问题很糟糕.因为你应该问
代替.