2017-03-29 84 views
-1

我的課堂中有以下方法。我的目標基本上是找到數據庫中的所有管理員,但可以選擇限制sql語句。例如" AND U.username='jake56'" AND A.firstName='Jake'。我想知道是否可以選擇爲SQL注入添加限制。安全地動態更改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')

+0

儘管您應該使用參數化查詢,但可以手動輸入查詢的任何內容都可能會利用它。那麼就存在一個問題,如果你輸入了一個無效的條件呢?我寧願動態建立基於輸入的查詢,而不是輸入查詢的直接部分。 – Qirel

回答

-2

做這個

public function find_all_managers($limitA = 0,$limitB = 0) { 
    //now create the limit part here, if real numbers given 
    //if(is_numeric($limitA) and $limitA > 0) 
} 

所以知道自己創造了極限,沒有別的可以注射。

+0

你誤會了這個問題。雖然「限制」一詞是誤導性的,但這個例子是相當確定的。總是有必要把這個問題讀到最後一行 –

+0

@你的常識2'在一個SQL中哪裏是不會工作的,請不要責怪我。我已經回答了大約90%的問題。在再次閱讀最後一行之後,我可以將問題關閉,廣泛,不清楚。而且有人可以刪除我的答案:-)我將來會花更多時間,並且會等到問題設置正確。實例失敗可能發生 – JustOnUnderMillions