2011-06-22 16 views
0

因爲我只研究PHP/HTML/MySQL作爲業餘愛好,所以我的知識很淺,所以請溫和。自動創建特殊字符的「ESCAPE」(如POST和GET)的新表單輸入方法的可行性

ESCAPE旨在幫助程序員防止SQL注入。是的,程序員應該更聰明,但只要最近的LulzSec愚蠢,我認爲W3C會採取一個很好的舉措來實現一種新的表單輸入方法,使得程序員更容易實現安全性。

我只知道PHP,所以我會說。基本上,而在此之前,我們有

$safeTagSearch = addslashes($_GET["tagSearchRaw"]); 

我們現在有

$safeTagSearch = $_ESCAPE["tagSearchRaw"]); 

如果tagSearchRaw = "cats in hats",它將被削減爲☃"cats in hats☃"。 (Unicode的雪人是爲了說明這將如何與不同的轉義序列不同的語言。)

$_ESCAPE代碼將識別的形式轉義字符和傳球\"cats in hats\"$safeTagSearch之前做加工的一點點。

這完全可行嗎?

+0

請注意,在標題中說「ESCAPE(如POST和GET)」會讓您聽起來像是在提出一個新的Web服務器動詞供瀏覽器使用。這很混亂。不知道PHP的人不會意識到你指的是* functions *'$ _GET []'和(可能?)'$ _POST []',它們檢索這些動詞提供給Web服務器的值。 – ErikE

回答

0

我不認爲它是可行的,因爲它要求Web編程語言知道您使用的特定SQL語法。該功能是數據庫提供程序(如ODBC,OLEDB,SQL Server Native,Jet等)的域,能夠將所有輸入轉換爲在數據庫中完成作業所必需的SQL特定變體語法錯誤和沒有SQL注入。

治癒率是不給Web開發人員爲他們的串聯SQL語句的誤用柺杖,而是爲Web開發人員在命令使用的形式參數(或至少使用參數佔位符,如?上即席查詢)而不是隻是將SQL片段和參數字符串壓縮在一起,並希望它能正常工作。

如果你提供$_ESCAPE到所謂治癒的人誰brainlessly使用$_GET,那麼你會通過愚笨使用引入其他的問題,比如在已經逃脫了兩次(哎呀)數據庫字符串存儲。這只是混淆了這個問題。

此問題帶來的另一個問題是不知道您使用的字符串是安全還是不安全的問題。我支持的解決方案是構建強類型的String對象,它指示它是什麼類型的字符串(HTMLString,UnsafeString,SQLString等)。

然後,如果您嘗試執行諸如<SQLStringFragment> + <UnescapedString>之類的操作,則會在嘗試連接兩種不同類型的字符串而未先將其轉換爲相同類型時收到編譯時或運行時錯誤。

數據庫庫可以擴展爲提供轉換實用程序,如SQLStringFromParameterValue,它將接受未轉義的字符串,並根據當前連接的屬性返回轉義實用程序。

+0

照明,謝謝! – DharmaTurtle

0

不可行。數據庫安全性很複雜,並且通常是數據庫類型特定的。簡單地添加斜線有助於避免引號,但是,對於XSS(跨站點腳本)攻擊沒有任何幫助。然後,如果你看看XSS問題,你會意識到有時你想要允許某些HTML,並禁止其他人使用。

轉義和消毒值是一個比您想象的要複雜得多的問題。