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

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

PHP MySQLI防止SQL注入

PHP MySQLI防止SQL注入

搖曳的薔薇 2019-10-12 10:26:49
我已經建立了一個網站,該網站即將上線,并且有幾個關于防止SQL注入的問題,我知道如何使用,mysqli_real_escape_string但是我只是想知道是否必須在要獲取的所有變量上使用它SQL語句,是否在執行select語句時還是在插入更新和刪除時必須使用它?另外,在我將網站投入使用之前,您還建議我實施哪些其他安全措施,在此先感謝您的幫助!
查看完整描述

2 回答

?
慕村225694

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

任何查詢都可以被注入,無論是讀取還是寫入,持久性還是瞬時性。可以通過結束一個查詢并運行一個單獨的查詢(可能帶有mysqli)來執行注入,這會使所需的查詢變得無關緊要。


來自外部源的查詢的任何輸入,無論是來自用戶還是內部的輸入,都應視為該查詢的參數以及該查詢上下文中的參數。查詢中的任何參數都需要參數化。這會導致參數化查詢正確,您可以從中創建準備好的語句并使用參數執行。例如:


SELECT col1 FROM t1 WHERE col2 = ?

?是參數的占位符。使用mysqli,您可以使用創建一個準備好的語句,使用來prepare將變量(參數)綁定到參數bind_param,然后使用來運行查詢execute。您根本不需要清理參數(實際上這樣做是有害的)。  mysqli為您做到這一點。整個過程將是:


$stmt = mysqli->prepare("SELECT col1 FROM t1 WHERE col2 = ?");

$stmt->bind_param("s", $col2_arg);

$stmt->execute();

參數化查詢和預備語句之間也有重要區別。該語句在準備時并未進行參數化,因此容易注入:


$stmt = mysqli->prepare("INSERT INTO t1 VALUES ($_POST[user_input])");

總結一下:


所有查詢都應正確參數化(除非它們沒有參數)

不論其來源如何,查詢的所有參數都應被視為具有敵意


查看完整回答
反對 回復 2019-10-12
  • 2 回答
  • 0 關注
  • 1094 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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