2016-07-05 53 views
-5

我是PHP新手。需要轉義多少個字符?

我用兩種方式來逃避字符串:

方法1.使用替代

function htmlreplace($str, $useBR = false) { 
    $str2 = $str; 
    $str2 = preg_replace ("/</", "&lt;", $str2); 
    $str2 = preg_replace ("/>/", "&gt;", $str2); 
    $str2 = preg_replace ("/(\r\n|\n|\r)/", $useBR ? "<br />" : " ", $str2); 
    $str2 = preg_replace ("/&/", "&amp;", $str2); 
    $str2 = preg_replace ("/\'/", "&#39;", $str2); 
    return preg_replace ("/\"/", "&#34;", $str2); 
} 
$string='some string needs to insert into mysql'; 
stripslashes(htmlreplace($string)); 

方法2.連接到MySQL

function sanitizeString($var, $DBconnection) { 
    $var = strip_tags ($var); 
    $var = htmlentities ($var); 
    $var = stripslashes ($var); 
    return $DBconnection->real_escape_string ($var); 
} 
$string='some string needs to insert into mysql'; 
trim (sanitizeString ($string)); 

SQL Injection Prevention Cheat Sheet

後顯示這些角色需要轉義

NUL, BS, TAB, LF, CR, SUB, %, 」, \, _, 所有其它非字母數字字符與ASCII值小於256

PHP addslashes

顯示addslashes()函數將轉義這些字符:單引號('),雙引號(「),反斜槓()和NUL(NULL字節)

據我所知,轉義是爲了防止SQL注入。

所以我很好奇有多少角色需要逃脫?他們是什麼?他們都是Special Characters in HTML

至於SQL注入阻止,感謝Slico,Marc B和bub幫助。

謝謝!

+3

你爲什麼不只是使用PDO預處理語句?在SO上有一個[nice post](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1)關於SQL注入 –

+4

不,你不用't「黑名單」字符。如果發生任何變化,您的列表將會過時並允許出現問題。這正是** WRONG **防止sql注入的方法。您不應該首先通過正確使用工具來實現它:使用佔位符準備語句。那麼你不必擔心所有可能會有什麼惡意的東西,並讓數據庫本身爲你擔憂。 –

+0

無論如何,對於SQL注入來說,HTML確實沒有多大的作用。 –

回答

1

從OWASP看看這個link

主要防禦:

  • 選項#1:利用預準備語句(參數化查詢)

  • 選項#2:使用存儲過程

  • 選項3:轉義所有用戶提供的輸入

額外的防禦措施:

  • 還強制執行:最小特權
  • 也履行:白名單輸入驗證
+0

請問我的方法2轉義全部字符嗎? – Autodesk

+0

在準備好陳述之前,我可以做出逃生嗎? – Autodesk

相關問題