註:以下文章非本人撰寫為中國大陸網路轉載文章,,並經本人整理。
來源:IT168安全頻道分析XSS(Cross Site Script)漏洞原理
作者:茄子寶
如果你還不知道什麼是XSS,那我來解釋一下,XSS的全稱是Cross Site Scripting,意思是跨站腳本.這第一個單詞是Cross,為什麼縮寫成X呢?因為CSS是層疊樣式表的縮寫(Cascading Style Sheets)的縮寫,同時Cross發音和X相似,為了避免混淆用X來代替,縮寫成XSS。其實我覺得叫XSS挺合適的,因為現在流行AJAX嘛,新的跨站腳本攻擊技術很多都是和XMLHTTP控制項無間配合,嘿嘿,這個是題外話,我們只講原理,下面我就分兩個部分分析XSS原理:
一、XSS的觸發條件
瞭解XSS的觸發條件就先得從HTML(超文字標記語言)開始,我們流覽的網頁全部都是基於超文字標記語言創建的,如顯示一個超連結:
<A HREF="http://safe.it168.com">IT168安全頻道</A>
而XSS的原理也就是往HTML中注入腳本,HTML指定了腳本標記<script></script>.在沒有過濾字元的情況下,只需要保持完整無錯的腳本標記即可觸發XSS,假如我們在某個資料表單提交內容,表單提交內容就是某個標記屬性所賦的值,我們可以構造如下值來閉和標記來構造完整無錯的腳本標記,
"><script>alert('XSS');</script><"
結果形成了<A HREF=""><script>alert('XSS');</script> <"">茄子寶的博客在這裡</A>這樣一個標記,這裡和SQL注入很像!
測試表單值所在的標記,形成完整無錯的腳本標記可觸發XSS,但是沒有腳本標記怎麼觸發XSS呢?呵呵,我們只好利用其他標記了,假如要在網頁裡顯示一張圖片,那麼就要使用一個<img>標記,示例如下:
<img src=" http://safe.it168.com /xss.gif">
img標記並不是真正地把圖片給加入到Html文檔把兩者合二為一,而是通過src屬性賦值。那麼瀏覽器的任務就是解釋這個img標記,訪問src屬性所賦的值中的URL位址並輸出圖片。問題來了!瀏覽器會不會檢測src屬性所賦的值呢?答案是否!
那麼我們就可以在這裡大做文章了,接觸過javascript的人應該知道,javascript有一個URL偽協議,可以使用“javascript:”這種協議說明符加上任意的javascript代碼,當流覽器裝載這樣的URL時,便會執行其中的代碼.於是我們就得出了一個經典的XSS示例:
<img src="javascript:alert('XSS');">
結果如圖一:
當然並不是所有標記的屬性都能用,細心的你應該發現標記的屬性在訪問檔才觸發的XSS,這裡我就不再深入,因為離開標記的屬性還有事件能?明我們觸發XSS.那什麼是事件呢?只有達到某個條件才會引發事件,正巧img標記有一個可以利用的onerror()事件,當img標記內含有一個onerror()事件而正好圖片沒有正常輸出便會觸發這個事件,而事件中可以加入任意的腳本代碼,其中的代碼也會執行.現在我們又得到了另外一個經典的XSS示例:
<img src=" http://xss.jpg" onerror=alert('XSS')>
結果如圖二:
綜合這一部分,我們知道XSS的觸發條件包括:完整無錯的腳本標記,訪問檔的標記屬性和觸發事件。
二、XSS轉碼引發的過濾問題
有攻就有防,網站程式師肯定不會放任大家利用XSS,所以他們常會過濾類似javascript的關鍵字符,讓大家構造不了自己的XSS,我這裡就撿兩個被忽略慣了的字元來說,它們是"&"和"\".首先來說說"&"字元,玩過SQL注入的都知道,注入的語句可以轉成16進制再賦給一個變數運行,XSS的轉碼和這個還真有異曲同工之妙,原因是我們的IE流覽器預設採用的是UNICODE編碼,HTML編碼可以用&#ASCII方式來寫,這種XSS轉碼支持10進制和16進制,SQL注入轉碼是將16進制字串賦給一個變數,而XSS轉碼則是針對屬性所賦的值,下面我就拿
<img src="javascript:alert('XSS');">
使用10進制轉碼來作範例:
<img src="javascript:alert('XSS');">
結果如圖三:
使用16進制轉碼來作範例:
<img src="javascript:alert('XSS');">
這個&#分隔符號還可以繼續加0變成“j” ,“j” ,“j” ,“j”等形式。
而這個"-:special:1:-字元卻暴露了一個嚴重的XSS 0DAY漏洞,這個漏洞和CSS(Cascading Style Sheets)層疊樣式表有很大的關聯,下面我就來看看這個漏洞,先舉個javascript 的eval 函數的例子,官方是這樣定義這個函數:
eval(codeString),必選項 codestring 參數是包含有效 JScript 代碼的字串值。這個字串將由 JScript 分析器進行分析和執行。
我們的JavaScript中的"-:special:1:-字元是轉義字元,所以可以使用"-:special:1:-連接16進制字串運行代碼:
<SCRIPT LANGUAGE="JavaScript">
eval("\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3a\x61\x6c\x65\x72\x74\x28\x22\x58\x53\x53\x22\x29")
</SCRIPT>
恐怖的是樣式表也支援分析和解釋"-:special:1:-連接的16進制字串形式,流覽器能正常解釋。下面我們來做個實驗:
寫一個指定某圖片為網頁背景的CSS標記:
<html>
<body>
<style>
BODY { background: url(http://127.0.0.1/xss.gif) }
</style>
<body>
<html>
存檔為HTM,瀏覽器打開顯示正常。
轉換background屬性值為"-:special:1:-連接的16進制字串形式,瀏覽器打開同樣顯示正常。
<html>
<body>
<style>
BODY { background: \75\72\6c\28\68\74\74\70\3a\2f\2f\31\32\37\2e\30\2e\30\2e\31\2f\78\73\73\2e\67\69\66\29 }
</style>
<body>
<html>
在文章第一部分我已經說過XSS的觸發條件包括訪問檔的標記屬性,因此我們不難構造出
<img STYLE="background-image: url(javascript:alert('XSS'))">
這樣的XSS語句。有了實驗的結果,我們又能對CSS樣式表的標記進行XSS轉碼,瀏覽器將幫我們解釋標記內容,XSS語法範例:
<img STYLE="background-image: \75\72\6c\28\6a\61\76\61\73\63\72\69\70\74\3a\61\6c\65\72\74\28\27\58\53\53\27\29\29">
結果如圖四:
原編者語:XSS攻擊以及的可怕性及靈活性深受駭客的喜愛。針對XSS攻擊,編者給一般瀏覽網頁使用者及WEB應用開發者給出以下的安全建議:
web使用者:
在電子郵件或者即時通訊軟體中點選連結時需要格外小心:留心可疑的過長連結,尤其是它們看上去包含了HTML代碼。如果對其產生懷疑,可以在流覽器位址欄中手工輸入功能變數名稱,而後通過該頁面中的連結瀏覽你所要的資訊。
對於XSS漏洞,沒有哪種web流覽器具有明顯的安全優勢。也就是Firefox也同樣不安全。為了獲得更多的安全性,可以安裝一些流覽器外掛程式:比如Firefox的NoScript或者Netcraft工具條。
世界上沒有“100%的有效”。儘量避免訪問有問題的網站:比如提供hack資訊和工具、破解軟體、成人照片的網站。這些類型的網站會利用瀏覽器漏洞並危害作業系統。
web應用開發者:
對於開發者,首先應該把精力放到對所有使用者提交內容進行可靠的輸入驗證上。這些提交內容包括URL、查詢關鍵字、http頭、post資料等。只接受在你所規定長度範圍內、採用適當格式、你所希望的字元、阻檔、過濾或者忽略其它的任何東西。
保護所有敏感的功能,以防被bots自動化或者被協力廠商網站所執行。實現session標記(session tokens)、CAPTCHA系統或者HTTP引用頭檢查。
如果你的web應用必須支援用戶提供的HTML,那麼應用的安全性將受到災難性的下滑。但是你還是可以做一些事來保護web網站:確認你接收的HTML內容被妥善地格式化,僅包含最小化的、安全的tag(絕對沒有JavaScript),去掉任何對遠端內容的引用(尤其是樣式表和JavaScript)。為了更多的安全,請使用httpOnly的cookie。
本文章來自於神魂顛倒論壇 http://bbs.flash2u.com.tw
原文網址:http://bbs.flash2u.com.tw/dispbbs_171_87491.html
分享到:
相关推荐
最后,“浅析XSS漏洞原理.mht”文件可能深入探讨了XSS漏洞的基础概念,包括它的工作原理、危害性以及预防措施。文件可能还涵盖了常见的XSS防护手段,如使用HTTP头部的Content-Security-Policy(CSP)、输入验证、...
防止跨站脚本攻击(Cross-Site Scripting, XSS) 跨站脚本攻击是指攻击者在受害者的浏览器上执行恶意脚本的一种方式。攻击者通常会利用Web应用中没有过滤或过滤不严的地方,将恶意脚本注入到返回给用户的网页中。例如...
8. **跨站攻击:** 包括XSS(Cross-Site Scripting)等攻击手段。 9. **Web应用测试:** 对Web应用程序进行全面的安全测试。 10. **代码审查:** 仔细审查应用程序源代码,查找潜在的安全漏洞。 11. **第三方软件误...
跨站攻击(Cross-site scripting,简称XSS)是Web应用程序中最常见的安全漏洞之一。攻击者通过在用户浏览的页面中注入恶意的HTML或JavaScript代码,从而获取用户的敏感信息、篡改网页内容或进行钓鱼攻击。文中提到,...
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
8c71b76fb2ec10cf50fc6b0308d3dcfc_9545878e2b97a84b2e089ece58da9e82
Android逆向过程学习
内容概要:本文详细介绍了基于西门子S7-200 PLC的糖果包装控制系统的设计与实现。首先阐述了PLC在工业自动化领域的优势及其在糖果包装生产线中的重要性。接着深入探讨了系统的硬件连接方式,包括传感器、执行机构与PLC的具体接口配置。随后展示了关键的编程实现部分,如糖果计数、包装执行、送膜控制、称重判断以及热封温度控制等具体梯形图代码片段。此外,还分享了一些实用的经验技巧,如防止信号抖动、PID参数优化、故障诊断方法等。最后总结了该系统的优势,强调其对提高生产效率和产品质量的重要作用。 适合人群:从事工业自动化控制、PLC编程的技术人员,尤其是对小型PLC系统感兴趣的工程师。 使用场景及目标:适用于糖果制造企业,旨在提升包装生产线的自动化程度,确保高效稳定的生产过程,同时降低维护成本并提高产品一致性。 其他说明:文中不仅提供了详细的理论讲解和技术指导,还结合实际案例进行了经验分享,有助于读者更好地理解和掌握相关知识。
内容概要:本文详细介绍了参与西门子杯比赛中关于三部十层电梯系统的博图V15.1程序设计及其WinCC画面展示的内容。文中不仅展示了电梯系统的基本架构,如抢单逻辑、方向决策、状态机管理等核心算法(采用SCL语言编写),还分享了许多实际调试过程中遇到的问题及解决方案,例如未初始化变量导致的异常行为、状态机遗漏空闲状态、WinCC画面动态显示的挑战以及通信配置中的ASCII码解析错误等问题。此外,作者还特别提到一些创意性的设计,如电梯同时到达同一层时楼层显示器变为闪烁爱心的效果,以及节能模式下电梯自动停靠中间楼层的功能。 适合人群:对PLC编程、工业自动化控制、电梯调度算法感兴趣的工程技术人员,尤其是准备参加类似竞赛的学生和技术爱好者。 使用场景及目标:适用于希望深入了解PLC编程实践、掌握电梯群控系统的设计思路和技术要点的人士。通过学习本文可以更好地理解如何利用PLC进行复杂的机电一体化项目的开发,提高解决实际问题的能力。 其他说明:文章风格幽默诙谐,将严肃的技术话题融入轻松的生活化比喻之中,使得原本枯燥的专业知识变得生动有趣。同时,文中提供的经验教训对于从事相关领域的工作者来说非常宝贵,能够帮助他们少走弯路并激发更多创新思维。
慧荣量产工具合集.zip
内容概要:本文详细介绍了永磁同步电机(PMSM)的FOC(磁场定向控制)和SVPWM(空间矢量脉宽调制)算法的仿真模型。首先解释了FOC的基本原理及其核心的坐标变换(Clark变换和Park变换),并给出了相应的Python代码实现。接下来探讨了SVPWM算法的工作机制,包括扇区判断和占空比计算的方法。此外,文章还讨论了电机的PI双闭环控制结构,即速度环和电流环的设计与实现。文中不仅提供了详细的理论背景,还分享了一些实用的编程技巧和注意事项,帮助读者更好地理解和应用这些算法。 适合人群:电气工程专业学生、从事电机控制系统开发的技术人员以及对永磁同步电机控制感兴趣的科研人员。 使用场景及目标:① 学习和掌握永磁同步电机的FOC控制和SVPWM算法的具体实现;② 提供丰富的代码示例和实践经验,便于快速搭建和调试仿真模型;③ 探讨不同参数设置对电机性能的影响,提高系统的稳定性和效率。 其他说明:文章强调了在实际应用中需要注意的一些细节问题,如坐标变换中的系数选择、SVPWM算法中的扇区判断优化以及PI控制器的参数调整等。同时,鼓励读者通过动手实验来加深对各个模块的理解。
# 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;
Android逆向过程学习
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
3dmax插件
# 【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar中文文档.zip】 中包含: 中文文档:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar中文文档.zip,java,spring-ai-autoconfigure-vector-store-qdrant-1.0.0-M7.jar,org.springframework.ai,spring-ai-autoconfigure-vector-store-qdrant,1.0.0-M7,org.springframework.ai.vectorstore.qdr
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
内容概要:本文详细介绍了平方根容积卡尔曼滤波(SRCKF)在永磁同步电机(PMSM)控制系统中的应用及其相对于传统CKF的优势。文章首先指出传统CKF在处理协方差矩阵时存在的数值不稳定性和非正定问题,导致系统性能下降。接着,作者通过引入SRCKF,利用Cholesky分解和QR分解来确保协方差矩阵的正定性,从而提高状态估计的精度和稳定性。文中展示了具体的电机模型和状态方程,并提供了详细的代码实现,包括状态预测、容积点生成以及观测更新等关键步骤。此外,文章还分享了实际调试过程中遇到的问题及解决方案,如选择合适的矩阵分解库和处理电机参数敏感性。最终,通过实验数据对比,证明了SRCKF在突加负载情况下的优越表现。 适合人群:从事永磁同步电机控制研究的技术人员、研究生及以上学历的研究者。 使用场景及目标:适用于需要高精度状态估计的永磁同步电机控制系统的设计与优化,特别是在处理非线性问题和提高数值稳定性方面。 其他说明:文章引用了相关领域的权威文献,如Arasaratnam的TAC论文和Zhong的《PMSM无传感器控制综述》,并强调了实际工程实践中代码调试的重要性。
# 【tokenizers-***.jar***文档.zip】 中包含: ***文档:【tokenizers-***-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【tokenizers-***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【tokenizers-***.jar Maven依赖信息(可用于项目pom.xml).txt】 Gradle依赖:【tokenizers-***.jar Gradle依赖信息(可用于项目build.gradle).txt】 源代码下载地址:【tokenizers-***-sources.jar下载地址(官方地址+国内镜像地址).txt】 # 本文件关键字: tokenizers-***.jar***文档.zip,java,tokenizers-***.jar,ai.djl.huggingface,tokenizers,***,ai.djl.engine.rust,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,djl,huggingface,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【tokenizers-***.jar***文档.zip】,再解压其中的 【tokenizers-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件; # Maven依赖: ``` <dependency> <groupId>ai.djl.huggingface</groupId> <artifactId>tokenizers</artifactId> <version>***</version> </dependency> ``` # Gradle依赖: ``` Gradle: implementation group: 'ai.djl.huggingface', name: 'tokenizers', version: '***' Gradle (Short): implementation 'ai.djl.huggingface:tokenizers:***' Gradle (Kotlin): implementation("ai.djl.huggingface:tokenizers:***") ``` # 含有的 Java package(包): ``` ai.djl.engine.rust ai.djl.engine.rust.zoo ai.djl.huggingface.tokenizers ai.djl.huggingface.tokenizers.jni ai.djl.huggingface.translator ai.djl.huggingface.zoo ``` # 含有的 Java class(类): ``` ai.djl.engine.rust.RsEngine ai.djl.engine.rust.RsEngineProvider ai.djl.engine.rust.RsModel ai.djl.engine.rust.RsNDArray ai.djl.engine.rust.RsNDArrayEx ai.djl.engine.rust.RsNDArrayIndexer ai.djl.engine.rust.RsNDManager ai.djl.engine.rust.RsSymbolBlock ai.djl.engine.rust.RustLibrary ai.djl.engine.rust.zoo.RsModelZoo ai.djl.engine.rust.zoo.RsZooProvider ai.djl.huggingface.tokenizers.Encoding ai.djl.huggingface.tokenizers.HuggingFaceTokenizer ai.djl.huggingface.tokenizers.HuggingFaceTokenizer.Builder ai.djl.hu
3