我在一本PHP書中讀到,在我們處理用戶輸入數據的條件下使用htmlspecialchars
和mysqli_real_escape_string
是一個好習慣。這兩者之間的主要區別是什麼以及它們適合使用的地方?請指導我。htmlspecialchars和mysqli_real_escape_string之間的區別?
回答
htmlspecialchars:「<」to「& lt;」 (取代HTML代碼)
mysqli_real_escape_string:「到\」 (替換代碼,即在一個MySQL查詢一個意思)
兩者都曾經是保存對像SQL注入和一些攻擊XSS
能不能請用一個例子解釋 –
用htmlspecialchars(」 < b >ä< /b >‘)==’& lt; b & lt; ä & lt;/B & gr;‘ – EGOrecords
mysql_real_escape_string(’ )[想象一下qoutes] == \「, – EGOrecords
這兩個函數用於完全不同的事情。
htmlspecialchars()將特殊的HTML字符轉換爲實體,以便它們可以毫無問題地輸出。 mysql_real_escape_string()可以轉義敏感的SQL字符,因此可以執行動態查詢而不會造成SQL注入的風險。
您可以輕鬆地說htmlspecialchars處理敏感的OUTPUT,而mysql_real_escape_string處理敏感的INPUT。
Shai
能不能請用一個例子 –
我想解釋一下@ EGOrecords已經解釋過它。另外我建議閱讀手冊,因爲它有所有需要的例子:http://php.net/htmlspecialchars,http://php.net/mysql_real_escape_string –
這兩個函數在目的上是完全無關的;他們共享的唯一屬性是它們通常用於爲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?
htmlspecialcharacters變爲「HTML特殊字符」轉換成代碼,例如引號(單,雙),和號,而且比標誌小於/大。此功能通常用於確保您的網站上發佈的內容用戶沒有HTML標記或XSS腳本。
mysql_real_escape_string轉義字符串,這意味着它在斜線,引號(包括單和雙)前面加\,還有其他任何可以搞亂mysql查詢的東西。此功能確保沒有人在您的服務器上執行SQL命令並從數據庫獲取信息。
能不能請用一個例子解釋 –
我可以補充說,現在真正高級的PHP網絡程序員不再需要手動進行用戶輸入驗證,因爲它容易出現一大堆可能的謬誤,而是通常會選擇一些PHP框架,如CakePHP或CodeIgniter來執行用戶輸入驗證和更多的幾行代碼?
- 1. 之間的〜/和的區別../
- 2. '#','%'和'$'之間的區別
- 3. {!!之間的區別!!}和{{}}
- 4. '+ ='和'= +'之間的區別?
- 5. 「。+」和「。+?」之間的區別
- 6. .eq之間的區別。和==
- 7. #。/和#之間的區別。 ./
- 8. !=和!之間的區別==
- 9. 「%〜dp0」和「。\」之間的區別?
- 10. | =和^ = css之間的區別
- 11. 之間的區別。和#
- 12. ==和case之間的區別?
- 13. 「**/* /」和「** /」之間的區別?
- 14. jQuery - '。'之間的區別和「#」
- 15. 「?1」和「?」之間的區別
- 16. `%in%`和`==`之間的區別
- 17. fmod和%之間的區別
- 18. 之間的區別:+和:+
- 19. 類區域和堆之間的區別
- 20. SPFile和PublishingPage類別之間的區別
- 21. 子類和類別之間的區別?
- 22. System.Timers.Timer Enabled = true和.Start()之間的區別Enabled = true和.Start()之間的區別
- 23. 如何在mysqli_real_escape_string和\ nl之間切換?
- 24. 如何把值之間mysqli_real_escape_string
- 25. isForeground()和onExposed和onObscured之間的區別
- 26. $ .ajax()和$ .get()和$ .load()之間的區別
- 27. 和intent和setcontentview之間的區別
- 28. Java和C#和.NET之間的區別
- 29. NSthread和NStimer和NSNotifcation之間的區別?
- 30. sys.log()和console.log()和console.error()之間的區別?
的可能重複[用htmlspecialchars或mysql_real_escape_string?](http://stackoverflow.com/questions/3603146/htmlspecialchars-or-mysql-real-escape-string) – ajreal