我正在做一個asp網站。搜索中的數據庫錯誤
當我開始
名稱的搜索這樣的奧尼爾
我得到一個數據庫錯誤。
我得到這個錯誤是因爲那個名字。
我該如何在asp中刪除這個錯誤。
如果它在asp中我們可以使用addslashes和stripslashes,但我怎麼能做到這一點在asp?
請幫
我正在做一個asp網站。搜索中的數據庫錯誤
當我開始
名稱的搜索這樣的奧尼爾
我得到一個數據庫錯誤。
我得到這個錯誤是因爲那個名字。
我該如何在asp中刪除這個錯誤。
如果它在asp中我們可以使用addslashes和stripslashes,但我怎麼能做到這一點在asp?
請幫
無論是選擇特定的字符串值,或將其插入到數據庫中,字符串必須是有效的SQL,具體如下:
因此
'O''Neil'
是適當的方式 「代碼」 的名字奧尼爾,因爲如果我們使用
'O'Neil'
相反,SQL會認爲這是一個字符串,開始與字母O,但在那之後結束。這個單個字母的字符串後面跟着SQL無法理解的表達式Neil'
。
上述信息將會允許你存儲的名稱和它保留嵌入名稱與愛爾蘭O'xxxx單引號的方式來查詢它們。
除了幫助你解決這個問題之外,如果我忘記提到SQL injection的風險,我會失去工作。
現在您明白非雙倍單引號會終止字符串,您可以看到惡意用戶如何使用它來「欺騙」應用程序。
例如假設用戶以某種方式猜測,在使用該表是search
,他/她可以繼續前進,填寫下列字符串中的應用程序的編輯框中
O'; DELETE FROM search where 'a%'='a
你的邏輯將使用此字符串如下
Lstart="O'; DELETE FROM search where 'a%'='a"; select * from search where lname like '%Lstart%'
-- which effectively will be substituted as
select * from search where lname like '%O'; DELETE FROM search where 'a%'='a%'
其中,如果與基礎SQL連接關聯的帳戶是如此認可,會導致刪除表中的所有行,並留下您的應用程序碎了!
通過系統地加倍單引號,以及一些其他預防措施(如使用參數化查詢),可以保護應用程序(及其數據庫)免受此類攻擊。
是的,你可能想詳細說明如何在它們到達數據庫之前將它們轉義出來。 – Russell 2010-03-03 06:03:01
對不起,我沒有正確地得到你。 它是一個網站的用戶將鍵入 例如杜澤 – 2010-03-03 06:03:25
名字ü可以給我查詢在ASP 正是 這是我的查詢 Lstart =「奧尼爾」; select * from搜索,其中lname類似於'%Lstart%' – 2010-03-03 06:14:45