天天看點

記錄一次小漏洞的修複過程

作者:程式員濤哥
記錄一次小漏洞的修複過程

前幾天,漏洞掃描出一個小問題。但隻有一句話。

MEDIUM 4.3* - xx Web Application Potentially Vulnerable to Clickjacking

于是就開始研究

點選劫持(Click Jacking),也被稱為UI覆寫攻擊

黑客建立一個網頁利用iframe包含目标網站;隐藏目标中的網站,

是使用者無法察覺到目标網站的存在;誘使使用者點選圖中特定的按鈕。

特定的按鈕為位置和原網頁中關鍵按鈕位置一緻,使用者在不知情的情況下點選按鈕,被引誘執行了危險操作。

Content Security Policy(CSP),内容(網頁)安全政策,為了緩解潛在的跨站腳本問題(XSS攻擊),浏覽器的擴充程式系統引入了内容安全政策(CSP)這個概念。

HTTP Content-Security-Policy響應頭允許網站管理者控制允許使用者代理為給定頁面加載的資源。除少數例外,政策主要涉及指定伺服器源和腳本端點。這有助于防止跨站點腳本攻擊(XSS)。

CSP 的實質就是白名單制度,開發者明确告訴用戶端,哪些外部資源可以加載和執行,等同于提供白名單。它的實作和執行全部由浏覽器完成,開發者隻需提供配置。

兩種方法啟用 CSP

一種是通過 HTTP 響應頭資訊的Content-Security-Policy字段。

"Content-Security-Policy:" 政策集
下面是php代碼示例
<?php

header( "Content-Security-Policy: frame-src 'self' http://www.a2.com/;" );
?>
  java示例
  response.addHeader("Content-Security-Policy", "frame-src 'self'");           

一種是通過網頁的标簽。

<meta http-equiv="content-security-policy" content="政策集">
比如
<meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src example.org third-party.org; child-src https:">           

script-src:腳本:隻信任目前域名

object-src:不信任任何URL,即不加載任何資源

style-src,樣式表:隻信任example.org和third-party.org

child-src:必須使用HTTPS協定加載。這個已從Web标準中删除,新版本浏覽器可能不支援。

frame-src:iframe設定

其他資源:沒有限制其他資源

CSP 文法

每一條政策都是指令與指令值組成:

Content-Security-Policy:指令1 指令值1           

政策與政策之間用分号隔開,例如:

Content-Security-Policy:指令1 指令值1;指令2 指令值2;指令3 指令值3
           

在一條政策中,如果一個指令中有多個指令值,則指令值之間用空号隔開:

Content-Security-Policy:指令a 指令值a1 指令值a2           

擷取指令

提取指令控制可以加載某些資源類型的位置。

child-src定義Web從業人員的有效來源以及使用元素(例如<frame>和)加載的嵌套浏覽上下文<iframe>。

connect-src限制可以使用腳本接口加載的URL default-src用作其他提取指令的後備。

font-src指定使用加載的字型的有效來源@font-face。frame-src為使用元素(例如<frame>和)加載的嵌套浏覽上下文指定有效來源<iframe>。

img-src指定圖像和網站圖示的有效來源。

manifest-src指定應用程式清單檔案的有效來源。

media-src指定使用加載媒體來源有效<audio>,<video>和<track>元素。

object-src指定有效的來源<object>,<embed>和<applet>元素。

script-src指定JavaScript的有效來源。

style-src指定樣式表的有效來源。

worker-src指定有效來源Worker,SharedWorker或ServiceWorker腳本。

檔案指令

Document指令控制政策适用的文檔或工作環境的屬性。

base-uri限制可以在文檔<base>元素中使用的URL 。

plugin-types通過限制可以加載的資源類型來限制可以嵌入到文檔中的一組插件。

sandbox為請求的資源啟用沙箱,類似于<iframe>sandbox屬性。disown-opener確定資源在導航時不會洩露其開啟者。

導航指令

例如,導航指令控制使用者可以導航到哪個位置或将表單送出到哪個位置。

form-action限制可以用作來自給定上下文的表單送出的目标的URL。frame-ancestors指定有效的父級可以使用嵌入網頁<frame>,<iframe>,<object>,<embed>,或<applet>。navigation-to限制文檔可以通過任何方式(a, form, window.location, window.open,等)導航到的URL。

報告指令

報告指令控制着違反CSP的報告流程。另見Content-Security-Policy-Report-Only标題。

report-uri訓示使用者代理報告違反内容安全政策的企圖。這些違規報告由通過HTTP 請求發送到指定URI 的JSON文檔組成POST。report-toFires SecurityPolicyViolationEvent。

其他指令

block-all-mixed-content當使用HTTPS加載頁面時,防止使用HTTP加載任何資産。

referrer用于在引用者(sic)頭中指定遠離頁面的連結的資訊。

Referrer-Policy改為使用标題。

require-sri-for需要在頁面上使用SRI作為腳本或樣式。

upgrade-insecure-requests訓示使用者代理将所有站點的不安全URL(通過HTTP提供的URL)視為已被替換為安全URL(通過HTTPS提供的URL)。此指令适用于需要重寫大量不安全的舊版URL的網站。

我的測試

分别本地搭建三個網站

記錄一次小漏洞的修複過程

www.a1.com代碼

<?php
header('X-Powered-By: PHP/6.0.0'); //修改 X-Powered-By資訊
header( "Content-Security-Policy:frame-src   'self'" );

?>
1111
<iframe src="http://www.a2.com/"
        width="500" height="500" frameborder="1"
        allowfullscreen >
  <p><a href="http://www.a2.com/">點選打開嵌入頁面</a></p>
</iframe>

<iframe src="http://www.a3.com/"
        width="500" height="500" frameborder="1"
        allowfullscreen >
  <p><a href="http://www.a3.com/">點選打開嵌入頁面</a></p>
</iframe>


           
記錄一次小漏洞的修複過程

www.a2.com代碼

這是a2.com的内容           
記錄一次小漏洞的修複過程

www.a3.com代碼

這是a3.com的内容           
記錄一次小漏洞的修複過程

隻添加

header( "Content-Security-Policy:frame-src 'self'" );

的效果

記錄一次小漏洞的修複過程

修改下

header( "Content-Security-Policy:frame-src   'self' http://www.a2.com/;" );           

效果。

記錄一次小漏洞的修複過程

我看有的網站設定的是可以顯示的。

記錄一次小漏洞的修複過程

還沒找到原因。先這樣吧。

參考網站:https://m.php.cn/manual/view/35556.html

https://blog.csdn.net/qq_32247819/article/details/124446652