2013-12-08 34 views
7

我建立一個測驗網站,在那裏我存儲一些變量 (回答所用的時間,選擇由用戶等等等等,哪個答案選項),回答每個問題之後在$_SESSION秒 - 在這裏我把這些統計到DB只用戶完成測驗後。

我已經實施了一些if's來檢查這些$_SESSION變量是否是數字(is_numeric())。我也驗證長度(strlen())等

  • 但是有沒有這樣做的理由?
  • 或者是濫竽充數real_escape_string()那些將它們存儲 在MySQL前?
  • 另外如果會有很多用戶,那麼會不會在 服務器上承擔很大的負載?
+1

如果您對防止SQL注入感興趣,則應該使用帶參數化語句的PDO或mysqli。這樣,無論你插入什麼,它都不會被評估爲MySQL代碼。 – jpodwys

+0

這種情況是,我不是隻談論SQL注入。有沒有其他方式可以使用用戶傳遞的變量攻擊我的網站? – joe007

+0

@ joe007是的,就像XSS一樣。 –

回答

8

不,既然你自行設置。

當然,除非你在這種情況下,適用於用戶輸入的每一位完全相同的規則適用的用戶輸入直接推斷出它們。

$_SESSION變量沒有什麼特別之處。您需要在用戶接收到用戶輸入時進行清理,無論您是否將其存儲在數據庫,會話等中。

像JPod建議的那樣 - 在執行SQL查詢時 - 總是使用準備好的查詢來緩解SQL注入。

+1

是的,但我們假設我在_page1_上設置$ _SESSION變量,然後在_page2_上讀取它。如果我在_page1_上對它進行清理並且不關心_page2_,那麼黑客/黑客可以使用某些軟件直接將惡意代碼/內容直接通過$ _SESSION發送到_page2_? – joe007

+2

@ joe007前端用戶無法直接訪問'$ _SESSION',_you're_是那裏的東西。如果你清理輸入_before_,你把它放在會話變量中(並且你總是這麼做),它不會變得不安全。更一般地說,你應該虔誠地對待你從客戶那裏得到的所有東西,而且毫無憐憫 - 它必須清晰,一致,明確,並在一個地方。毫無疑問,哪些數據是髒的,哪些數據是乾淨的。 –

+3

噢好吧我不知道用戶無法以某種方式重寫$ _SESSION。非常感謝你 :) – joe007