2011-12-07 115 views
5

我在一本PHP書中讀到,在我們處理用戶輸入數據的條件下使用htmlspecialcharsmysqli_real_escape_string是一個好習慣。這兩者之間的主要區別是什麼以及它們適合使用的地方?請指導我。htmlspecialchars和mysqli_real_escape_string之間的區別?

+0

的可能重複[用htmlspecialchars或mysql_real_escape_string?](http://stackoverflow.com/questions/3603146/htmlspecialchars-or-mysql-real-escape-string) – ajreal

回答

7

htmlspecialchars:「<」to「& lt;」 (取代HTML代碼)

mysqli_real_escape_string:「到\」 (替換代碼,即在一個MySQL查詢一個意思)

兩者都曾經是保存對像SQL注入和一些攻擊XSS

+0

能不能請用一個例子解釋 –

+0

用htmlspecialchars(」 < b >ä< /b >‘)==’& lt; b & lt; ä & lt;/B & gr;‘ – EGOrecords

+0

mysql_real_escape_string(’ )[想象一下qoutes] == \「, – EGOrecords

5

這兩個函數用於完全不同的事情。

htmlspecialchars()將特殊的HTML字符轉換爲實體,以便它們可以毫無問題地輸出。 mysql_real_escape_string()可以轉義敏感的SQL字符,因此可以執行動態查詢而不會造成SQL注入的風險。

您可以輕鬆地說htmlspecialchars處理敏感的OUTPUT,而mysql_real_escape_string處理敏感的INPUT。

Shai

+1

能不能請用一個例子 –

+0

我想解釋一下@ EGOrecords已經解釋過它。另外我建議閱讀手冊,因爲它有所有需要的例子:http://php.net/htmlspecialchars,http://php.net/mysql_real_escape_string –

4

這兩個函數在目的上是完全無關的;他們共享的唯一屬性是它們通常用於爲Web應用程序提供安全性。

mysqli_real_escape_string是爲了提供針對SQL injection的安全性。

htmlspecialchars旨在提供針對跨站點腳本(XSS)的安全性。

另見What's the best method for sanitizing user input with PHP?Do htmlspecialchars and mysql_real_escape_string keep my PHP code safe from injection?

+0

你可以用一個例子來解釋一下 –

+0

@ TheNoble-Coder:看看我鏈接到的問題。另外,谷歌是你的朋友。 – Jon

+0

謝謝,我已經打開了這個問題 –

1

htmlspecialcharacters變爲「HTML特殊字符」轉換成代碼,例如引號(單,雙),和號,而且比標誌小於/大。此功能通常用於確保您的網站上發佈的內容用戶沒有HTML標記或XSS腳本。

mysql_real_escape_string轉義字符串,這意味着它在斜線,引號(包括單和雙)前面加\,還有其他任何可以搞亂mysql查詢的東西。此功能確保沒有人在您的服務器上執行SQL命令並從數據庫獲取信息。

+0

能不能請用一個例子解釋 –

0

我可以補充說,現在真正高級的PHP網絡程序員不再需要手動進行用戶輸入驗證,因爲它容易出現一大堆可能的謬誤,而是通常會選擇一些PHP框架,如CakePHP或CodeIgniter來執行用戶輸入驗證和更多的幾行代碼?

+0

真正高級的PHP程序員不會因爲不知道如何防禦以及如何發展而變得更高級。除非您濫用消毒設施,否則手動消毒輸入沒有任何問題。我是否可以添加濫用這些設施,無論它們被稱爲「htmlspecialchars」還是「框架助手」。 – Jon

+0

據我所知,知識永遠不是一個壞主意,我只是說用戶輸入驗證最好是由PHP退伍軍人開發的框架中的一些經過充分證明和修改的功能完成,而不是使用定製功能。我認爲SO框架助手是一個不錯的選擇,上帝禁止不知道htmlspecialchars如何工作! – dendini