Php PDO查询中的Get参数是否危险?
我在pdo查询中使用了5个get搜索参数。所以,我想知道这是否危险 例如:Php PDO查询中的Get参数是否危险?,php,mysql,pdo,Php,Mysql,Pdo,我在pdo查询中使用了5个get搜索参数。所以,我想知道这是否危险 例如: $s_username = ""; if(isset($_GET["username"])){ $s_username = " AND ac_username LIKE %".$_GET["username"]."% "; } $appUsers = $db->query("SELECT ac_user FROM accounts WHERE ac_app = '{$appF
$s_username = "";
if(isset($_GET["username"])){
$s_username = " AND ac_username LIKE %".$_GET["username"]."% ";
}
$appUsers = $db->query("SELECT ac_user FROM accounts WHERE ac_app = '{$appFind["id"]}' '{$s_username}' ")->fetchAll(PDO::FETCH_ASSOC);
(我知道,有一个例子,我可以使用其他技术,但这只是一个简单的例子。因此,我使用了更多的搜索词或参数。)
如果真的很危险,你能给我推荐一些替代品吗?是的,绝对危险。你对我敞开心扉。使用预先准备好的语句而不是直接连接。谢谢!但是我不能使用,因为我正在添加“AND-columnname-LIKE..”文本。还有别的办法吗?是的,你可以。在将占位符传递到准备好的语句之前,只需将占位符添加到变量中。换句话说,有一个像
。。。哪里像代码>,并传递一个类似于“%”的值$x.“%”
而不仅仅是$x
。您必须执行类似$s_username=“和ac_username like?”代码>,然后使用准备好的语句而不是直接查询。将参数传递给语句处理程序时,不要传递它$\u GET[“username”]
,而是传递它'%$_获取[“用户名”].%'代码>。如果不知道$db
是什么(它是PDO类的一个实例,还是某种包装器?),很难提供比这更多的细节,但这应该足以帮助您解决问题。是的,这会起作用。只需确保$appFind[“id”]
不能包含任何用户输入。通常,您希望尽可能对所有变量值使用准备好的语句和占位符。当不可能时(例如表名,不能是参数),使用白名单值。