亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PDO準備好的陳述有多安全

PDO準備好的陳述有多安全

慕桂英3389331 2019-11-30 13:46:58
不久前開始使用PDO準備的語句,據我了解,它為您完成了所有轉義/安全性工作。例如,假設$ _POST ['title']是一個表單字段。$title = $_POST['title'];$query = "insert into blog(userID, title) values (?, ?)"$st = $sql->prepare($query);$st->bindParam(1, $_SESSION['user']['userID'], PDO::PARAM_INT);$st->bindParam(2, $title);$st->execute();這真的安全嗎?我還需要做其他事情嗎?我還需要考慮什么?謝謝。
查看完整描述

3 回答

?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

嚴格來說,實際上不需要轉義,因為參數值永遠不會插值到查詢字符串中。


查詢參數的工作方式是在調用時將查詢發送到數據庫服務器prepare(),然后在調用時將參數值發送到數據庫服務器execute()。因此,它們與查詢的文本形式分開存放。SQL注入永遠不會有機會(提供的PDO::ATTR_EMULATE_PREPARES是錯誤的)。


因此,可以,查詢參數可以幫助您避免這種形式的安全漏洞。


他們是否100%證明沒有任何安全漏洞?不,當然不是。您可能知道,查詢參數僅在SQL表達式中代替單個文字值。您不能用單個參數替代值列表,例如:


SELECT * FROM blog WHERE userid IN ( ? );

您不能使用參數使表名或列名動態化:


SELECT * FROM blog ORDER BY ?;

您不能將參數用于任何其他類型的SQL語法:


SELECT EXTRACT( ? FROM datetime_column) AS variable_datetime_element FROM blog;

因此,在很多情況下,您必須在prepare()調用之前將查詢作為字符串處理。在這些情況下,您仍然需要仔細編寫代碼以避免SQL注入。


查看完整回答
反對 回復 2019-11-30
?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

從SQL注入是安全的。

幾件事情不安全:

  • 拒絕服務(導致創建過多的行)

  • 跨站點腳本攻擊(如果標題回顯給另一個用戶)

安全不僅僅是阻止SQL注入。


查看完整回答
反對 回復 2019-11-30
?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

關于SQL注入,我相信這是最安全的方法,尤其是在使用PDO :: PARAM_INT等常量的情況下。


查看完整回答
反對 回復 2019-11-30
  • 3 回答
  • 0 關注
  • 560 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號