2012-10-21 105 views
-1

PHP手冊和用戶反饋都讓我感到困惑。我試圖修復別人的代碼,他將所有的表單數據轉換爲ASCII代碼並返回。PHP轉義字符串瘋狂

這是作爲逃避一切的粗略方式完成的,但難以維護,數據庫看起來像一堆逗號分隔的數字而不是可查詢的數據庫。當然,在PHP中存在一種確定的方式來存儲表單值並在沒有太多扭曲的情況下檢索它。各種escapeunescape函數似乎無法逃脫一切。

您還需要檢查並設置此項,但請確保沒有設置其他項。是什麼賦予了?簡單地說,表單字段中的任何內容都必須可靠地寫入MySQL列,並且可以輕鬆地將其重新獲取到PHP中並在mysql中進行查詢。表單位於Intranet上,數據可能包含所有正常的鍵盤輸入,包括美元符號,百分號,斜槓和撇號。

回答

2
  1. 如果您使用的是過時的PHP版本:升級PHP或遷移到具有較新PHP的更好託管。否則:禁用PHP設置中的魔術引號。也沒有這樣做:detect and undo magic quotes。魔術引號是一個可怕的想法,並已從PHP中刪除。
  2. 將數據插入數據庫,請使用prepared statements and parameterized queries
  3. 將數據插入HTML,escape special characters(確保報價選擇對你來說環繞你的屬性值引號的類型正確設置,默認爲安全僅供value="<?php echo ... ?>"而不是如果你改用')。有關更復雜的場景,請參閱the OWASP XSS (Cross Site Scripting) Prevention Cheat Sheet
+0

php 5.3.3這是值得信賴的Intranet應用程序,我們並不過分關心跨站點腳本和sql注入。只是想存儲和檢索表單數據而不會出現任何亂碼。所以你說我必須使用參數化查詢和轉義特殊字符,並確保使用正確的引號等?除了關閉代碼頂部的魔術引號(簡單部分),什麼是插入和檢索單個表單字段的示例語句集合,所有字符都是完整的。關於逃脫特殊字符的PHP手冊是一個美妙的旋轉木馬。用於perl手冊的地方是明確的。 – chris

+0

「這是值得信賴的Intranet應用程序,我們不會過度擔心跨站點腳本和sql注入」 - **關注**。人們犯錯。完美的數據可以打破SQL。員工可能會不滿。 – Quentin

+0

「所以你說我必須使用參數化查詢和轉義特殊字符,並確保使用正確的引號等?」 - 是的。 「什麼是一組示例」 - 鏈接涵蓋了這一點。 「關於轉義特殊字符的PHP手冊是一個美妙的旋轉木馬」 - 如果你正在處理在答案中描述的場景,只需在要插入到HTML文檔的字符串中調用'htmlspecialchars'並插入返回值代替。 – Quentin