【小(xiǎo)編推薦】ThinkPHP3.2——㮣♥防止SQL注入

2014-06-26   |&nbs ☆Ωλp;  發布者:梁國(guó)芳 &φ​nbsp; |   查看(kànΩ↑©©):3320次

Thinkphp

對(duì)于WEB應用(yòng)來(lái)說(sh₽✘πuō),SQL注入攻擊無疑是(shì)首要(yào)防範的(de)↕‌安全問(wèn)題,系統底層對(duì)于數(s®☆α♥hù)據安全方面本身(shēn)進行(xíng)了(le)很(hěα©n)多(duō)的(de)處理(lǐ)和(h​₽↓"é)相(xiàng)應的(de)防範機(jī)制(zhì♣§),例如(rú):

  1. $User = M("User"); // 實例化(huà)User對(duì)象
  2. $User->find($_GET["id"]);

即便用(yòng)戶輸入了(le)一(yī)些(xiē)惡意的(de™♥ )id參數(shù),系統也(yě)會(huì)強制(♦ ✘zhì)轉換成整型,避免惡意注入。這(zhè)εφ是(shì)因為(wèi),系統會(huì)對(duì)‍≥©數(shù)據進行(xíng)強制(zhìβ÷)的(de)數(shù)據類型檢測,并且對(duì)數(shù)據來(β≥λlái)源進行(xíng)數(shù) 據格式轉換。而且,對∏ε♥(duì)于字符串類型的(de)數(shù)據"©,ThinkPHP都(dōu)會(huì)進行(xíng)escape_strφλ↔•ing處理(lǐ) (real_escape_string,m‍•★≥ysql_escape_string),如(↑₩£rú)果你(nǐ)采用(yòng)PDO方式的(de✔£)話(huà),還(hái)支持參數(shù)綁定。

通(tōng)常的(de)安全隐患在于你(nǐ)的(de)←÷σ‌查詢條件(jiàn)使用(yòng)了(le)字符串參數∑≤(shù),然後其中一(yī)些(xiē)變量又(y‌∏ òu)依賴由客戶端的(de)用(yòng)戶輸入。≥★&

要(yào)有(yǒu)效的(de)防止SQL注入→ ₽問(wèn)題,我們建議(yì):

  • 查詢條件(jiàn)盡量使用(yòng)數(shù)組方式,這(zhè)是(←Ω$shì)更為(wèi)安全的(de)方式;
  • 如(rú)果不(bù)得(de)已必須使用(yòng)字符串查詢條件≈& (jiàn),使用(yòng)預處理(lǐ)機(​¥™jī)制(zhì);
  • 使用(yòng)自(zì)動驗證和(hé)自(zì)動完ε§成機(jī)制(zhì)進行(xíng)針©✔對(duì)應用(yòng)的(de)自(zì)定義過濾;¥™☆ 
  • 如(rú)果環境允許,盡量使用(yòng)PDO方式φ¥,并使用(yòng)參數(shù)綁定。α §

查詢條件(jiàn)預處理(lǐ)

where方法使用(yòng)字符串條件(jiàn)的(de)時(s ©hí)候,支持預處理(lǐ)(安全過濾),并支持↑↓兩種方式傳入預處理(lǐ)參數(shù),例如 "↓σ(rú):

  1. $Model->where("id=%d and username×∑π='%s' and xx='%f'",array($id,$username,$xx))->select();
  2. // 或者
  3. $Model->where("id=%d and username='%s' and♦&‍₹ xx='%f'",$id,$username,$xx)->select();

模型的(de)query和(hé)execute方法 同>↔樣支持預處理(lǐ)機(jī)制(zhì),例如(rú):

  1. $model->query('select * from user ₩☆‌where id=%d and status=%d',$id,$status);
  2. //或者
  3. $model->query('select * from user where id≥•φ=%d and status=%d',array($id,$status));

execute方法用(yòng)法同query方法。