前幾天,漏洞掃描出一個小問題。但隻有一句話。
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