2012-06-20 47 views
5

有點PHP的/ MySQL的新手在這裏...PHP/MySQL的 - 用於顯示名稱/用戶名/密碼安全字符,與PDO

我已經建立了使用MySQL數據庫基於PHP的網站用於存儲用戶信息,如顯示名稱,用戶名和密碼。

我一直在學習關於轉義,準備的語句等,以及如何防止像「bobby」這樣的SQL注入); drop table users--「。

我正在使用PDO準備語句從表單獲取用戶輸入,以便將它們註冊到數據庫中。不過,我需要知道的幾件事情:

  1. 由於我使用預處理語句,用於顯示名稱,用戶名, 密碼等,是沒有問題啊,讓特殊字符,如 @,#, $,甚至是「單」或「雙」引號?那麼空間怎麼樣, 國際字符,帶有口音的字符,或者♥ ?當我詢問是否允許這些字符是「好的」時,我是 想知道是否存在進一步的安全風險,可能會出現 允許在用戶名中使用引號或括號,或者使用大寫或斜體的HTML標籤 ?

  2. 如果它是好的,讓特殊字符,但不能一些:是 有任何具體的「危險」人物(在MySQL的範圍內) 我絕對需要做違法嗎? (我覺得報價可能適合 這一議程,但我對得到的混合信號。)

  3. 如果我讓人物的典型外「字母數字 和下劃線」的範圍,是否有任何陷阱我可能會遇到後面的 (在MySQL,SQL或PHP中)允許奇怪的字符?在顯示用戶名時,我需要以某種方式使html標籤顯示爲字符串,而不是實際的 標籤?或者,我需要在用戶的用戶名中跳過 引號,只要我想與他們查詢? 或者沒有這個問題,因爲我將在PDO中使用準備好的語句 ?

  4. 做喜歡的字符集UTF8或UTF16進來的任何地方,在做它,所以我 可以接受的顯示名稱和用戶名的範圍最廣,而 仍然確保這些字母可以在我的網站被渲染?

  5. 我知道有一些西裏爾字母看起來與 英文字母相同。我曾經直接複製這些MS Word,並在我的用戶名中使用 。我意識到這些可以被用來感知冒充其他成員,只需要換一個 英文「a」作爲西里爾文的「a」。如果用戶不熟悉alt-code,可能會難以用 來搜索♥的用戶名。這個 應該是一個問題嗎?你對此有何看法?

在此先感謝誰可以給我一些這方面的見解。

+0

請將您的帖子限制在一個問題 –

回答

2

首先讓我說我真的很喜歡你的風格。看起來大多數人並沒有花時間思考這些問題,只是將查詢打包在一起,根本沒有數據清理。所以恭喜你勤奮。 :)

這就是說,與PDO,你不應該擔心引用搞亂你的查詢。特別是如果你將你的變量與bindParam綁定,允許嚴格的參數控制。用這個,你可以施放變量類型和長度。而且,特殊字符不會混淆您的查詢,因爲PDO也會轉義它們。所以不用擔心這一點。

至於使HTML顯示爲文本而不是實際的HTML,一個非常有用的功能是htmlspecialchars(),它將HTML代碼轉換爲字符代碼。此功能還可以與可選的ENT_QUOTES標誌一起使用,該標誌將此"轉換爲此"。 htmlspecialchars()也可以將輸出設置爲您選擇的編碼。

+0

,但也相信'htmlspecialchars'也可能是危險的:http://blog.astrumfutura.com/2012/03/a-hitchhikers-guide-to-cross -site-scripting-xss-in-php-part-1-how-to-use-htmlspecialchars-for-output-escaping/ –

+0

謝謝;這很好地回答了我的「整體」問題。 :) – Jackson

4

這個SQL Injection Cheat Sheet有幾個MySQL查詢的例子,你可以在開發中測試。

這是學習關於什麼是「可接受」的一些問題的好資源,您必須考慮「一段數據」的整個生命週期。

通常一個數據可能會開始在HTML表單,然後得到POST方法到你的PHP腳本(因此,如果用戶直接想要他們可以POST數據,而表格)。 然後你的PHP腳本(希望)清理的數據,然後它是存儲

雖然在數據庫中,你可能會做備份操作,將其保存到一個SQLDump,或一些其他類型的維護。

那麼很明顯的數據將在某些時候,如果是,它可能會編譯一個降價的語言,並最終在那裏它可能注入HTML顯示它發送到別人的瀏覽器。

正如您所看到的,在數據​​生命週期中可能出現錯誤的地方有很多地方。如果你沒有考慮所有這些,你可能會看到一些常見的錯誤,例如每次保存/加載數據時堆積起來的反斜槓...... sql錯誤,容易受到攻擊等。

什麼樣的數據你想支持嗎?這取決於你。只要確保你能正確處理它。

+0

感謝您的鏈接;儘管該頁面看起來很嚇人,但它對我的項目來說也是一個有用的安全資源。我也讚賞關於數據生命週期的概述;因爲我(目前很寬鬆地)理解了這個概念,所以我對這個「全局圖」的概念不那麼模糊 – Jackson

相關問題