2009-11-19 36 views
0

如何檢查$_SESSION['text']確實是文本而不是某些惡意的.exe?

,如果我這樣做destroy_session(...),但設置

$a = $_SESSION; 

做$一個成爲空了嗎?

+0

在這方面沒有辦法確定。你可以做的最好的事情就是不要執行它(不要把它寫到文件中也會有幫助) –

回答

1

只有您可以設置會話變量,因爲會話數據存儲在服務器端(通常位於tmp目錄中的文件中)。但是這些數據是用類似於serialize的東西序列化的。所以實際的文件內容可能不是以適當的格式被執行。所以你不必擔心那個文件會被錯誤地執行。

2

你爲什麼在意?你打算執行它嗎?如果會話字段恰好包含可執行的二進制數據,那並不意味着它會執行

即使是文本字符串也可以包含可執行代碼;取決於你如何執行它。它可能包含「rm -rf *」,如果你用「exec」運行它,你會遇到麻煩。沒有任何過濾功能可以保證字符串在某些語言中不可執行。需要擔心的是當你真的在執行執行,並使用一個變量作爲它的一部分。

至於第二個問題,如果您在銷燬會話之前複製了數組,則即使會話更改,副本也不會更改。所有PHP陣列都是如此。

+0

好的,你能回答我的第二個問題嗎? – Gal

0

你可以使用is_string來知道它是否是一個有效的字符串,並使用prege_match($ _SESSION ['text'],'[a-z] +')等正則表達式,但我確認了JW所說的內容。

0

要回答你的第二個問題,不,它將是一個空的數組。

0

在發送到數據庫之前,請將其長度限制爲您期望的長度並使用addslashes()進行消毒。

你是否計劃將它發送給系統調用?別。