【发布时间】:2017-08-23 04:03:25
【问题描述】:
我的课堂上有以下方法。我的目标基本上是找到数据库中的所有管理器,但可以选择限制 sql 语句。例如" AND U.username='jake56' 或" AND A.firstName='Jake'。我想知道添加限制是否安全,因为它容易受到 SQL 注入的影响。
/**
* Returns an array of manager Users
* @param string (optional) $limits - limit the query EX: 'AND U.userId > 7'
* @return an array of managers with associative arrays
*/
public function find_all_managers($limits = '') {
$sql = "SELECT U.*, A.*
FROM Users U
JOIN Address A
ON U.addressId=A.addressId
WHERE U.role='manager' " . $limits;
// run the query
$result = $this->query($query);
$managers = mysqli_fetch_all($result, MYSQLI_ASSOC);
return $managers;
}
使用该参数是否安全?有人告诉我这种方法容易受到 SQL 注入的影响,但如果我愿意,我看不到另一种限制查询的方法。
例如我可能想$db->find_all_managers(' WHERE A.lastName='smith')
【问题讨论】:
-
你应该使用参数化查询,任何可以手动输入到查询中的东西都有可能利用它。那么问题来了,如果你输入了一个无效的条件呢?我宁愿根据输入动态构建查询,而不是将输入作为查询的直接部分。