POST在發送數據的時候使用的是HTTP命令


防止SQL注入

SQL(結構化查詢語言)是基於美國國家標准學會(ANSI)標准,並作為共同的語言與數據庫通信。每個數據庫系統增加了一些專有功能到基本的ANSI SQL。

SQL注入是一門將制作好的SQL注入用戶輸入字段的一種技術,它是網頁形式的一部分——用來繞過自定義登錄到網站。然而,SQL注入也可以用於登錄或者接管一個網站,因此要確保其能防止攻擊很重要。

開發人員和管理員可以采取許多不同的步驟解決SQL注入的問題。以下是為開發者提供的解決方案:

· 過濾的所有輸入字段單引號(' ),以防止未經授權的登錄。

· 過濾器SQL命令的所有輸入字段,如插入,選擇,工會,刪除和exec ,以保護服務器操作。 (請確保操作是在過濾單引號后進行)

· 限制輸入字段長度(這將限制攻擊者的選擇),並用服務器端腳本驗證輸入長度。

存儲過程用處

xp_cmdshell執行數據庫電腦操作系統的外部命令

xp_sendmail從數據庫電腦發送一封郵件

xp_regaddmultistring xp_regdeletekey xp_regdeletevalue xp_regenumkeys xp_regenumvalues xp_regread xp_regremovemultistring xp_regwrite控制注冊管理的各項因素

xp_servicecontrol啟動,停止和暫停服務。可用於攻擊者停止關鍵服務或者激活可被利用的服務,如Telnet服務器服務。

· 使用選項來過濾“轉義字符” (用於注入SQL代碼,比如單引號) ,如果該數據庫提供了該功能。

· 除了Web 服務器,將數據庫在不同的計算機的Web服務器上。一旦數據庫遭到黑客攻擊,也很難攻擊到Web服務期。

· 限制的服務器端腳本的用戶權限。從服務器端腳本中記錄到數據庫的通常的做法是使用管理用戶,但這可能同事也讓攻擊者趁機運行需要管理用戶的數據庫任務(如修改表或運行存儲過程) 。所以用最小的用戶權限分配來達到此目的。

· 刪除所有不必要的擴展存儲過程來限制攻擊者的可能性。

· 將數據庫放置到一個單獨的空間(在防火牆后面) ,與Web容器和應用服務器相隔離。

不同於開發商,管理員沒有代碼的控制權,不能代表程序員產生變化。然而管理員可以通過運行一些測試,並確保代碼安全來降低風險:

· 確保Web服務器給返回一個自定義錯誤頁。這樣一來,服務器將不會返回SQL錯誤,這將使攻擊者更難獲得SQL數據。(自定義錯誤頁面不應該包含任何可能有助於攻擊者的信息,不同於常規將返回部分SQL的錯誤頁面。)

· 只部署從Web服務器分離數據的Web應用程序。

· 聘請外部機構對Web服務器上執行穿透測試,並尋找SQL注入攻擊。

· 使用一個專用的自動掃描設備來探索由程序員的失誤導致的SQL注入漏洞。

· 部署安全解決方案來驗證用戶輸入並過濾SQL注入企圖。

二、防止窗體和腳本泄密

窗體用於允許用戶輸入,但也可以用來管理會話,並在會話內傳輸的重要數據(如用戶或會話標識符)。攻擊者可以暴露嵌入在創窗口中的數據,並通過Web應用暴露其他用戶信息,或以較低的價格在電子商務中進行交易。3種暴露形式如下:

· 禁用客戶端腳本

· 在URL中傳遞參數

· 通過隱藏字段傳遞參數

1. 客戶端腳本

一些開發人員使用客戶端腳本來驗證各種方式輸入字段:

· 限制輸入字段的大小

· 禁止某些字符(如單引號)

· 執行其他類型的驗證(這些可以具體到每個站點)

通過禁用客戶端腳本( javascript或VBScript)中,此驗證可輕松繞過。開發人員應該在服務器端驗證所有字段。這可能需要服務器上的額外資源。

2. 通過URL傳遞參數

窗口有兩種方法來傳遞數據: post和get 。 post命令。在內容流發送數據和get命令在URL中發送數據。攻擊者可以利用get命令來發送無效或不正確的數據,或發送惡意代碼。

例如,假設我們有這樣的形式:

...
<formaction="login.asp"method="get">
<p>username:<inputtype=textname="username"/></p>
<p>password:<inputtype=passwordname=password/></p>
<p><inputtype="submit"name="submit"value="login"/></p>
</form>
...

讓我們假設用戶輸入someusername作為用戶名,somepassword為密碼。瀏覽器會被重定向到這個URL

http://thesite/login.asp?username=someusername?password=somepassword

攻擊者可以通過簡單地修改URL的數據(利用此類型的URL在瀏覽器的地址欄)。這個方法可以用在電子商務網站來改變項目的價格。例如,看看下面的網址:

http://somesite/checkout.asp?totalprice=100

攻擊者可以簡單地改變“TOTALPRICE”的值,並執行檢出有以較低的價格比之意。這可以簡單地通過改變這樣的URL來完成:

http://somesite/checkout.asp?totalprice=50

Web應用程序將執行檢驗,但總價為50美元(代替了2881064151美元)。

另一種情況是,在登錄后,用戶識別正在使用GET發送,讓攻擊者修改它,並在另一個用戶的名義執行操作。

攻擊者可以更改“用戶”的值,並當存在用戶的時候獲得該用戶的數據。

3. 通過隱藏字段傳遞數據

POST在發送數據的時候使用的是HTTP命令。不同於get,這種方法不會顯示在URL中的數據,但它也更容易被利用。考慮以下表格:

...<formaction="checkout.asp"method="post"><inputtype="hidden"name="userid"value="102"/><p><inputtype="submit"name="submit"value="checkout"/></p></form>...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM