我已經做出了簡單和薄的數據庫層來幫助我正常運行。現在它正在起作用,我決定以安全方式審查它。第一次碰撞(with help of Mordred)是我的動態查詢。爲表的第一個問題變量很容易被驗證表變量對固定的正則表達式解析:動態查詢和安全選項
$regex = '/^[a-zA-Z0-9_$]+$/';
現在,下一個變量消毒/驗證是列名和AFAICS是我有兩個選擇。首先檢索該表中的所有列並構建白名單或再次使用正則表達式來驗證列變量。我的問題是,上述哪一項是一種方式?對錶名使用正則表達式驗證是否好?下面是我在談論
$stmt= $this->conn->prepare("SELECT * FROM $table WHERE $id_col[0]=:id");
$stmt->execute(array(":id"=>$id_val[0]));
$this->resultset = $stmt->fetch(PDO::FETCH_ASSOC);
希望從你的朋友聽到一個樣本SQL字符串(很抱歉,如果問題是某處的回答。我找不到這種事情!)