第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

PHP MySQLI防止SQL注入

PHP MySQLI防止SQL注入

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

2 回答

?
慕村225694

TA貢獻1880條經(jīng)驗 獲得超4個贊

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


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


SELECT col1 FROM t1 WHERE col2 = ?

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


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

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

$stmt->execute();

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


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

總結一下:


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

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


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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號