如何從get/post獲取信息並將信息保存到數據庫中,今天的最佳實踐是什麼?數據是否仍然像過去一樣逃脫或者還有其他做法?另外,HTMLPurifier在哪裏可以適應?我目前正在使用它來過濾富文本。
回答
從不將數據從GET保存到數據庫。
即使您正在進行足夠的驗證和轉義,也永遠不要從GET保存數據。 GET不應該改變服務器上的信息。
改變在服務器中的任何(DB或服務器中的文件)檢查是否請求是POST或PUT或DELETE適用
POST之前應該更改服務器的狀態。因此,在更新表格或更改服務器上的任何文件之前,請檢查請求方法是否過帳。
處理
如果你期待一個整數驗證輸入之前驗證輸入確實是一個整數。使用的數據庫查詢或添加到輸出
對於查詢目的之前
逃逸逃逸輸入輸入和的情況下,使用的是輸入到直接打印到輸出然後剝離斜線和消毒它。對於POST
使用易腐令牌時,你有用戶會話
使用訪問令牌的權限如果你有用戶登錄和更新令牌每次訪問或5分鐘左右。
使用訪問令牌,當你沒有用戶會話
由於ANKUR建議使用訪問令牌,當你沒有登錄會話。但這不可靠。
使用$ _SERVER屬性(如http_referrer)來檢查是否僅從所需頁面生成了帖子。 – 2011-04-21 18:26:12
但引用者可以僞造 – 2011-04-21 18:31:40
除此之外,您可以使用access_tokens作爲另一種選擇,無論用戶何時打開表單頁面,生成access_token並使用該標記創建數據庫條目,使用訪問標記創建隱藏字段。更新該行以防止用戶提交表單,否則在一段時間後刪除該行條目。 – 2011-04-21 18:32:49
那麼這取決於你的價值觀和他們來自哪裏。在簡短而親切的回答是:
ESCAPE和消毒
這意味着確保你把所有的字符串中的報價,並確保你逃避用戶提交的字符串的所有特殊字符。類型匹配和長度檢查。
「將所有字符串放在引號中」是什麼意思?你指的是什麼特殊字符? – 2011-04-21 18:15:42
那麼如果你有一個輸入$ 1和sql語句'INSERT'。$ 1'。 INTO ... SQL注入可以通過$ 1 =')來實現; PHP最好的方法是使用準備好的語句,就像PDO – austinbv 2011-04-21 18:18:34
@austin那樣,你需要*使用庫的衛生功能(如'mysql_real_escape_string')。只需添加斜槓或引號即可產生安全漏洞。或者使用準備好的語句,正如你所說的 – 2011-04-21 18:22:32
在將數據放入數據庫之前,切勿將數據轉換爲表示格式;在適當的時候對其進行清理,但始終讓數據庫包含「最快」的數據形式。
在顯示之前,請務必將數據轉換爲演示文稿格式,除非確定不應該轉義數據並且不可以轉義數據。
嗨伊格納西奧。當你說數據庫應該包含最豐富的信息時,你如何保存富文本?我會補充說我使用過濾的html,因爲一個共識是bbcode比它的價值更麻煩。 – 2011-04-21 18:26:15
如果過濾的HTML是你最喜歡的格式,那就這樣吧。 – 2011-04-21 18:28:37
爲什麼不逃生? – austinbv 2011-04-21 18:33:23
即使您在您的網站上進行了驗證,您也絕不應該假設來自GET或POST的信息能夠正確轉義,javascript可以被禁用,並且可以手動編寫請求以執行SQL注入攻擊。生成查詢字符串時使用mysql_real_escape_string()
。
http://php.net/manual/en/function.mysql-real-escape-string.php
據我可以從它迅速地讀了出來,HTML過濾是從所見即所得的編輯器或任何地方你從用戶期待適當的HTML解析輸出。它允許您控制禁止和過濾某些事物(如腳本),並確保所有標記都正確嵌套和關閉。從數據庫中讀取數據後,將HTML轉儲到頁面中尤其重要。
那麼,那就是他正在使用'mysql _()'函數族。 – 2011-04-21 18:21:14
@Pekka - 嗯......真......這篇文章是用mysql標記的,所以我可能會說得對。 – DarthJDG 2011-04-21 18:25:24
@Pekka @DarthJDG:我不確定,但我是這麼認爲的。正在使用某種數據庫類。另外,HTMLPurifier本身還不夠。這只是一個額外的層,以避免跨站點攻擊等事情。 – 2011-04-21 19:03:41
- 1. 將CreditCard信息存儲到數據庫中的最佳做法
- 2. 從窗體獲取信息到控制器並將其保存在數據庫中
- 3. Facebook - JavaScript SDK並將用戶信息保存到數據庫
- 4. 獲取天藍色的死亡信息並保存到宇宙數據庫中
- 5. 將數據保存到數據庫並使用PHP獲取
- 6. 從會話中獲取值並將其保存到數據庫ASP.NET
- 7. 如何從TinyMCE中獲取文本並將其保存到數據庫中
- 8. 無法將信息保存到數據庫 - UNC共享問題?
- 9. 無法將信息保存到數據庫
- 10. Django - 將Facebook信息從社會登記保存到數據庫
- 11. 從SQL數據庫獲取信息並獲取登錄錯誤
- 12. 我可以使用webservice.vb從gprs獲取信息並將信息存儲到數據庫中嗎?
- 13. 從PDF中提取文本並將其保存到數據庫 - 保留間距
- 14. 如何從獲取值並保存到php的數據庫
- 15. 從SQL Server數據庫獲取信息
- 16. 從數據庫sqlite中獲取信息
- 17. 從Mysql數據庫獲取信息
- 18. perl從selectrow_array獲取數據庫信息
- 19. 從數據庫中獲取信息
- 20. 無法將信息從表單存儲到數據庫中
- 21. 將撤消和重做信息存儲到數據庫?
- 22. 如何獲取Facebook用戶的信息並將其插入數據庫?
- 23. 在asp.net中保存文件並將信息保存在數據庫中
- 24. 將facebook用戶的詳細信息保存到數據庫
- 25. 如何將數據庫信息保存到android中的文件?
- 26. Javascript,將用戶的詳細信息保存到數據庫
- 27. 如何將Facebook私人信息保存到數據庫?
- 28. 如何獲取數據與改造並保存到數據庫
- 29. 從MySql Query獲取信息並將其放入PHP數組中
- 30. 在jquery回調後將信息保存到數據庫
這一切都取決於你將要對數據做什麼。這取決於用什麼樣的逃避需求來完成它。你能添加一些上下文嗎? – 2011-04-21 18:12:32
嗨Pekka。大部分數據將被保存並隨後顯示。這是一個社交網站。 – 2011-04-21 18:14:28