2012-07-23 116 views
1

我的大多數問題都是理論性的,因爲我認爲「偉大的思想家討論想法」和職員討論語法。將用戶數據存儲在數據庫中無需轉義

不管怎麼說..所以這裏的情況是

我有采取從user.BUT沒有該輸入的輸入查詢(全部)使用的系統。這個輸入包含很多代碼片段。現在在過去,我逃過了輸入,然後將其存儲在數據庫中。我不使用任何添加和剝離斜線功能排序,而使用它們使用的preg_replace像下面

$data = preg_replace("/\;/", "&#59;", $data);// 
$data = preg_replace("/</", "&lt;", $data); 
$data = preg_replace("/>/", "&gt;", $data); 
$data = preg_replace("/\"/", "&quot;",$data); 
$data = preg_replace("/\(/", "&#40;", $data); 

發生然而下面的問題我自己的程序。

有時軟件會錯誤地轉義數據(因爲我的軟件沒有缺陷),我將無法找到實際數據。 不時更新我的​​轉義程序,這意味着不同的輸入轉義不同。

用戶可以選擇編輯他的帖子。這意味着我必須向他呈現轉義數據(或不轉義數據)以防止數據泄漏兩次...... 因此,我終於得出結論,我直接從用戶保存未轉義的數據進入數據庫。並在顯示之前將其轉義(它沒有其他目的..在查詢中沒有用處等)。對於其他任何事情我都有原始數據未更改。

我的問題::

可以取消逃脫數據庫中的用戶數據仍然是危險的,即使在查詢中不使用或顯示之前逃脫???

與斜線相等/更好/比換款字符。例如:<到<逃逸不同逃逸..

如果數據正確地轉義(我的意思是所有的特殊字符),那麼它還可以用於XSS攻擊。 SQL注入是沒有問題的。

回答

12

從不編碼顯示數據直到你真的要顯示它。當存儲,編碼存儲,傳輸時,編碼傳輸等。在適當的時間適當的編碼將爲您處理這些問題。

+0

這麼簡短,但這樣一個偉大的答案。 +1 – drew010 2012-07-23 21:02:00

+2

我還會添加「永遠不要寫你自己的轉義函數」。 – Vatev 2012-07-23 21:07:25

+0

ohh ...亞做出這麼多的意義..你可以plz指示我去一些地方閱讀更多關於...什麼是顯示編碼...什麼是存儲編碼....謝謝 – 2012-07-23 21:27:38

0

是的,它可能是危險的。用戶可以輕鬆注入代碼來在數據庫上運行自己的查詢(即使您不打算查詢此數據)。

相關問題