请先读
在这个答案中:How to prevent SQL injection with dynamic tablenames?
Pekka指出了为什么这个代码:
$clas=$_POST['clas'];
$query="SELECT * FROM $clas ";无法使用PDO或mysql-real_escape_string()修复。
谁能提供示例代码如何解决这个问题,这样新手就可以粘贴这些代码了吗?
(根据他的需要进行调整后),避免SQL注入。
请不要解释SQL-注入,我知道注入和PDO的所有情况,我只需要示例代码。
发布于 2011-05-18 21:20:44
您可以使用白名单来确保该值确实是您希望以这种方式访问的表之一。
示例:
$allowed_tables = array('table1', 'table2');
$clas = $_POST['clas'];
if (in_array($clas, $allowed_tables)) {
$query = "SELECT * FROM `$clas`";
}请注意,直接从GET或POST参数构造SQL查询通常是个坏主意,但白名单可以使其安全。
发布于 2011-05-18 23:08:06
您可以使用for转义:P
$clas = str_replace('`','\\`',$_POST['clas']);
$query = "SELECT * FROM \`{$clas}\`";所以,这是个非常糟糕的主意。
做不同的事。
https://stackoverflow.com/questions/6051125
复制相似问题