2011-04-21 87 views
1

如何從get/post獲取信息並將信息保存到數據庫中,今天的最佳實踐是什麼?數據是否仍然像過去一樣逃脫或者還有其他做法?另外,HTMLPurifier在哪裏可以適應?我目前正在使用它來過濾富文本。

+0

這一切都取決於你將要對數據做什麼。這取決於用什麼樣的逃避需求來完成它。你能添加一些上下文嗎? – 2011-04-21 18:12:32

+0

嗨Pekka。大部分數據將被保存並隨後顯示。這是一個社交網站。 – 2011-04-21 18:14:28

回答

5

從不將數據從GET保存到數據庫。

即使您正在進行足夠的驗證和轉義,也永遠不要從GET保存數據。 GET不應該改變服務器上的信息。

改變在服務器中的任何(DB或服務器中的文件)檢查是否請求是POST或PUT或DELETE適用

POST之前應該更改服務器的狀態。因此,在更新表格或更改服務器上的任何文件之前,請檢查請求方法是否過帳。

處理

如果你期待一個整數驗證輸入之前驗證輸入確實是一個整數。使用的數據庫查詢或添加到輸出

對於查詢目的之前

逃逸逃逸輸入輸入和的情況下,使用的是輸入到直接打印到輸出然後剝離斜線和消毒它。對於POST

使用易腐令牌時,你有用戶會話

使用訪問令牌的權限如果你有用戶登錄和更新令牌每次訪問或5分鐘左右。

使用訪問令牌,當你沒有用戶會話

由於ANKUR建議使用訪問令牌,當你沒有登錄會話。但這不可靠。

+3

使用$ _SERVER屬性(如http_referrer)來檢查是否僅從所需頁面生成了帖子。 – 2011-04-21 18:26:12

+3

但引用者可以僞造 – 2011-04-21 18:31:40

+1

除此之外,您可以使用access_tokens作爲另一種選擇,無論用戶何時打開表單頁面,生成access_token並使用該標記創建數據庫條目,使用訪問標記創建隱藏字段。更新該行以防止用戶提交表單,否則在一段時間後刪除該行條目。 – 2011-04-21 18:32:49

1

那麼這取決於你的價值觀和他們來自哪裏。在簡短而親切的回答是:

ESCAPE和消毒

這意味着確保你把所有的字符串中的報價,並確保你逃避用戶提交的字符串的所有特殊字符。類型匹配和長度檢查。

+0

「將所有字符串放在引號中」是什麼意思?你指的是什麼特殊字符? – 2011-04-21 18:15:42

+0

那麼如果你有一個輸入$ 1和sql語句'INSERT'。$ 1'。 INTO ... SQL注入可以通過$ 1 =')來實現; PHP最好的方法是使用準備好的語句,就像PDO – austinbv 2011-04-21 18:18:34

+0

@austin那樣,你需要*使用庫的衛生功能(如'mysql_real_escape_string')。只需添加斜槓或引號即可產生安全漏洞。或者使用準備好的語句,正如你所說的 – 2011-04-21 18:22:32

3

在將數據放入數據庫之前,切勿將數據轉換爲表示格式;在適當的時候對其進行清理,但始終讓數據庫包含「最快」的數據形式。

在顯示之前,請務必將數據轉換爲演示文稿格式,除非確定不應該轉義數據並且不可以轉義數據。

+0

嗨伊格納西奧。當你說數據庫應該包含最豐富的信息時,你如何保存富文本?我會補充說我使用過濾的html,因爲一個共識是bbcode比它的價值更麻煩。 – 2011-04-21 18:26:15

+2

如果過濾的HTML是你最喜歡的格式,那就這樣吧。 – 2011-04-21 18:28:37

+0

爲什麼不逃生? – austinbv 2011-04-21 18:33:23

4

即使您在您的網站上進行了驗證,您也絕不應該假設來自GET或POST的信息能夠正確轉義,javascript可以被禁用,並且可以手動編寫請求以執行SQL注入攻擊。生成查詢字符串時使用mysql_real_escape_string()

http://php.net/manual/en/function.mysql-real-escape-string.php

據我可以從它迅速地讀了出來,HTML過濾是從所見即所得的編輯器或任何地方你從用戶期待適當的HTML解析輸出。它允許您控制禁止和過濾某些事物(如腳本),並確保所有標記都正確嵌套和關閉。從數據庫中讀取數據後,將HTML轉儲到頁面中尤其重要。

+0

那麼,那就是他正在使用'mysql _()'函數族。 – 2011-04-21 18:21:14

+0

@Pekka - 嗯......真......這篇文章是用mysql標記的,所以我可能會說得對。 – DarthJDG 2011-04-21 18:25:24

+0

@Pekka @DarthJDG:我不確定,但我是這麼認爲的。正在使用某種數據庫類。另外,HTMLPurifier本身還不夠。這只是一個額外的層,以避免跨站點攻擊等事情。 – 2011-04-21 19:03:41

相關問題