2012-07-24 231 views
1

請看看下面的代碼:我們在使用會話時是否必須使用mysql_real_escape_string()?

$username = $_POST['username']; 
$_SESSION['user_name'] = $username; 

我一定要使用mysql_real_escape_string()功能,而我設置$username值嗎?如果我不這樣做,是否有任何威脅?

注意:我使用PDO,而我想使用MySQL。

+3

不需要它。 – 2012-07-24 07:30:16

+0

如果您使用PDO,則可以使用prepare,而不需要在執行查詢時轉義變量。 – 2012-07-24 07:33:48

回答

5

不,你不需要以任何方式逃避它。如果您將文本與其他文本連接起來,並且某些字符可能具有特殊含義,則只需要轉義文本。見The Great Escapism (Or: What You Need To Know To Work With Text Within Text)

+0

你同意@asprin嗎?在會話中使用SQL語句可能會損害應用程序?即使在會話中存儲值時,過濾所有SQL也不是更好嗎? – 2012-07-24 07:39:11

+0

@MohammadSaberi會話中沒有SQL語句;不在您發佈的代碼中。而且,「會話中的SQL語句會損害應用程序」是無稽之談 - 會話和SQL是完全無關的。 – Piskvor 2012-07-24 07:42:02

+2

@Moh在必要之前不要逃避數據!是的,您可能在那裏有數據,如果在SQL查詢中被天真地使用,會導致SQL注入。但這並不意味着你必須在將它存儲在會話中時逃脫它,因爲它不會在那裏造成傷害。必要時逃脫,不遲於。如果您使用PDO準備的語句,則根本無需轉義。 – deceze 2012-07-24 07:42:03

4

您不需要,只有當您想要將字符輸入到數據庫時才使用它。

3

Mysql_real_escape_string()用於安全目的,因此用戶無法執行SQL注入。如果您沒有使用$_SESSION['user_name']$username作爲數據庫,那麼您將不需要使用它。您可以在這裏閱讀更多 - http://php.net/manual/en/function.mysql-real-escape-string.php

mysql_real_escpae_string()向每個特殊字符添加反斜槓。

另外,您應該檢查一些SQL注入示例,以便了解它是如何完成的,以及mysql_real_escape_string()正在阻止的內容 - http://www.unixwiz.net/techtips/sql-injection.html

0

您不應該因爲只能在服務器上操作會話數據。

如果你知道你有數據在那裏是用於查詢和字符需要轉義,那麼顯然你應該確保發生。

您存儲在包含任何qry語言(如'OR 1 = 1')的會話中的任何值基本上都歸結爲糟糕的應用程序設計IMO - 會話中的任何值都可能會導致安全失誤,這是您自己的錯誤 - 確定它不能完成。

+0

咦?將用戶提供的數據存儲在會話中是非常常見的事情,如果在查詢或其他地方使用時需要進行轉義......?! – deceze 2012-07-24 07:36:47

相關問題