use*_*579 2 php mysql code-injection
$column = $_GET['id'];
$result = mysql_query("SELECT $column FROM table");
echo $result;
Run Code Online (Sandbox Code Playgroud)
我正在用mysql构建一个网站,因此我试图了解sql注入.我认为这段代码容易受到攻击,但我似乎无法进行有效的攻击.我如何从表'example2'中拉出'here'列?
谢谢
想象一下$ _GET ['id']等于这样的东西
* FROM anytable_i_want; --
Run Code Online (Sandbox Code Playgroud)
double hypen意味着你的字符串的其余部分是注释...所以现在你正在执行的sql是:
SELECT * FROM anytable_i_want;
Run Code Online (Sandbox Code Playgroud)
防止这种废话的唯一最佳方法是准备好的声明.如果您使用PDO界面,则执行以下操作:
$HANDLE = $PDO->prepare('SELECT ? FROM mytable');
$HANDLE->execute(array($_GET['id']));
Run Code Online (Sandbox Code Playgroud)
现在无论提交什么作为$ _GET ['id'],它都会产生任何奇怪的效果.
mysql_real_escape_string 如果使用我的mysql_系列函数,将会覆盖你,尽管如果你在运行时更改了charset,你可能会受到一些攻击.