安全编码实践之一:注入攻击防御

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

文章来源:https://medium.com/bugbountywriteup/how-to-write-secure-code-against-injection-attacks-aad4fff058da

如何编写安全代码?保护自己免受注入攻击!

我已经在这个问题上工作了好几个月,试图理解是什么让代码变得脆弱,现在,我收到了这个简单的答案 - 糟糕的编程习惯。现在这看起来很明显,但编程社区的很大一部分仍然对这个事实一无所知。

了解问题!

我的意思是渗透测试,并有专门的团队来负责构建的应用程序的安全性是惊人的,总是值得称赞,但它不是每个人都能负担得起的。大公司可以吹嘘他们的安全实践,他们如何让团队全天候工作以保证客户数据的安全,但那些没有资源的人则如此。

我们在银行,航空,网上购物等最重要的应用程序中出现这些易受攻击的代码的最大原因之一是程序员。

最后一行肯定会让很多人受到冒犯,让我说我不是故意要抨击某个社区。我不会这样做因为它不是他们的错,在当前编程时代,代码执行时间需要尽可能低,完全可以理解他们跳过这些部分来增强他们的代码。

所以,我开始做笔记,可以帮助程序员编写安全的代码。我将尝试涵盖不同类型的攻击以及程序员为保持代码安全而进行的小调整,以便他们的组织不需要再次花钱来保证应用程序的安全。我想我今天已经足够了,所以让我们直截了当。

我们来挖掘吧!

让我开始我的定义注入及其发生的原因。攻击者输入恶意有效载荷,可以欺骗解释器执行非预期的命令或访问未经授权的数据。注入缺陷的发生是由于不受信任的数据作为命令或查询的一部分直接发送到解释器而没有检查或清理有效负载导致所有问题的唯一原因。

在本文中,我将介绍三种不同类型的注入攻击和方法,您可以使用它们来防止它们: 

1. SQL注入

这种类型的攻击主要发生在攻击者在语句末尾添加一个单引号(')时,将OR添加到语句后面的真值总数。简单来说,SQL有效负载看起来像这样

'或1 = 1  -  

添加到查询中的上述语句可以帮助攻击者获得对完整数据库的访问权限。为了让您更好地理解下面的查询,它将为攻击者提供整个数据库。

SELECT * FROM Users WHERE UserName ='Aditya'OR 1 = 1--

看看下面的代码,并试着弄清楚它是否容易受到SQL注入攻击。

如果您认为上述代码是安全的,那么您一定要继续阅读本文。

代码不安全的原因是因为攻击者输入的值直接作为参数传递。只要输入了预期值,但用户的输入可能包含%1 $ tm,%1 $ te和%1 $ tY格式说明符,情况就很好。

如果攻击者为args [0]传入值%1 $ tm,则结果将如下。

05不匹配!提示:它是在某个月的23日发布的。
// 05是用户验证自己需要知道的月份。

您可以看到该程序本身将在信用卡到期日的当月出炉。

为了避免这种攻击,下面的代码可能非常有用。

这两个代码之间的唯一区别是,在第一个代码中,攻击者输入的值直接传递给程序,而在第二个代码中,我们不是传递值,而是直接将其打印出来,使得整个攻击无用。

防止SQL注入攻击应该涉及输入验证。我们必须检查用户输入的值,并且我们必须始终假设这些值不受信任,即它们可能会损害应用程序。

我们必须使用带有绑定变量的参数化查询,并对用户输入的值执行清理。

参数化和消毒代码

在上面的图像中,我们可以看到传递的值如何在被代码使用之前首先被清理。

2.命令注入

这是最危险的注入攻击类型之一,在当今的情景中仍然很普遍,并没有得到太多关注。此攻击利用漏洞,攻击者可以进入并执行应用程序不期望的命令。

让我与您分享一个示例,以显示命令注入攻击的基本实现。

在上面的图像中,我们观察到有一个文本框,我们需要输入主机名/ IP,然后将获取有关IP地址的详细信息,然后呈现给我们。

整个应用程序似乎非常简单,但它很容易受到代码注入的影响。要理解我们首先需要弄清楚应用程序是如何工作的,然后我们可以试着找出然后我们就能理解代码注入是如何工作的。

当我们输入主机名/ IP时,应用程序实际上会调用终端,然后从那里向我们显示输出。那些与终端合作的人他们知道我们可以在终端中使用&&同时传递两个不同的命令。

因此,上图显示了代码注入的确切方式。为了避免这种攻击,应用程序需要执行路径验证(规范化然后进行绝对路径检查),应用程序还需要执行输入验证以及枚举它允许用户输入和执行的命令。

枚举{dir,cd,cls}
3. JSON注入

这是一次重要的注入攻击,而且近年来在应用程序中经常使用API​​的情况越来越多。当我们在API发出请求和响应查询时将有效负载注入到传递的JSON查询中时,JSON注入工作。

这个例子很容易理解,这个应用程序有一个下拉菜单,您需要从中选择一个PenTest工具选项,应用程序将向您显示您选择的PenTest工具的详细信息。

因此,让我们尝试了解此应用程序的工作原理。让我们打开burp-suite并拦截应用程序发出的请求。

 

因此,在上面的图像中,我们可以看到ToolId正在请求查询中发送,我们将有效负载添加到ToolId,以检查它是否在响应查询中反映给我们。

我们确实收到了我们在请求查询中注入的有效负载,因此我们可以确保我们的注入攻击将通过。让我们执行攻击有效载荷并确认攻击是否有效。

看到我们之前收到的回复,让我们传递此值以获取cookie值。

“}});警报(document.cookie中); //

在传入参数中的值之前,我们对其进行url-encode以避免可能已经放置的任何特殊字符限制。

我们可以清楚地看到cookie值已经在警报框中返回给我们,它确认攻击已经通过。

我们需要检查攻击在浏览器中的实际情况,并根据需要显示cookie详细信息。

防止JSON注入攻击的最有效方法是在JavaScript上执行编码技术。OWASP还提供了一种JSON杀菌剂,可用于字符串验证。

String someValidation = JsonSanitizer.sanitize(myJsonString);

道德

我们可以做的最重要的事情是防止注入攻击发生,就是相信来自用户端的任何和所有输入都可能是攻击。程序员大多理所当然地认为,用户输入的内容不会对导致应用程序中大部分漏洞的应用程序造成伤害。必须对使用方的每个输入进行消毒,并且必须在应用程序使用之前验证输入。用户输入的值绝不能直接传递给程序。

如果程序员记住这些事情,他们肯定可以防御大多数的注入攻击。

 

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

Web安全攻防全景图:十大经典攻击手段与纵深防御实战指南 在Web应用开发与运维领域,安全是保障业务连续性和数据资产的核心。理解Web安全攻防原理,需要从基础概念入手:攻击者常利用应用程序对用户输入的信任缺失,通过注入恶意代码或构造非法请求,实现窃取数据、提升权限或破坏服务等目的。其技术价值在于构建系统性的安全认知,将孤立的技术点串联成完整的攻击链与防御面。典型的应用场景包括金融、电商、社交等任何涉及用户交互与数据处理的在线服务。本文聚焦于跨站脚本攻击(XSS)和SQL注入等经久不衰的经典威胁,通过剖析其利用方式与防御逻辑,旨在为开发者、运维及安全工程师提供一张清 阅读详情

相关推荐

从教务系统漏洞看Web安全:权限、注入与会话管理的深度防御

Web安全是保障在线业务连续性与数据隐私的核心技术领域,其基础原理在于对用户输入、身份认证与系统资源访问的严格管控。在技术实现层面,权限体系混乱、输入验证缺失和会话管理不当是导致系统被攻破的常见根源。例如,垂直越权与水平越权漏洞往往源于后端接口缺乏角色与数据级校验,而SQL注入、XSS等攻击则直接利用了系统对用户输入的无条件信任。这些安全缺陷的技术价值在于,它们揭示了单一功能点漏洞如何通过攻击链被串联放大,最终导致业务崩溃或数据泄露。在应用场景上,从教务系统、电商平台到企业OA,任何涉及多用户交互与敏感数据

weixin_30470643的博客 509

VBS实现微信轰炸

vbs实现微信轰炸升级版,支持最新版微信了!

None 3万+

用Pikachu靶场学防御:SQL注入漏洞的7种防护方案实测

本文基于Pikachu靶场实战,详细解析了防御SQL注入漏洞的7种有效方案,包括参数化查询、输入验证、ORM框架安全实践等。通过实测数据对比,展示了各方案的拦截效果,帮助开发者和安全运维人员构建多层防护体系,提升Web应用安全性。

weixin_27741699的博客 142

微信信息轰炸

4.打开微信聊天框,聊天框中输入要发送的内容,复制。5.双击打开vbs程序,再次点击聊天框。1.创建一个txt文件。3.改变后缀为vbs。

qq_60607143的博客 1万+

SQL注入攻击原理与防御实战:从手工探测到参数化查询

SQL注入是一种利用Web应用程序与数据库交互时的安全漏洞进行攻击的技术。其核心原理在于攻击者通过构造特殊的输入,篡改原本的SQL查询逻辑,从而欺骗数据库执行非预期的命令。这种攻击之所以长期位列OWASP Top 10榜首,是因为它直接威胁到数据的机密性、完整性和可用性,可能导致敏感信息泄露、数据篡改甚至服务器被完全控制。在工程实践中,防御SQL注入的关键在于采用参数化查询,实现SQL指令与用户数据的彻底分离,从根本上杜绝攻击者注入恶意代码的可能性。无论是使用Java的PreparedStatement、P

weixin_27875131的博客 257

微信打飞机Android版(源代码)

这是一个自己编写的基于安卓平台的仿微信打飞机游戏,能在2.3.3及以上版本的手机平台上正常运行,在电脑的模拟器上运行可能会有的卡。 关于该游戏的实现可以访问以下的博客连接:http://blog.youkuaiyun.com/u010878441/article/details/14051263

python超简单智能微信消息连发代码实现(仅限文字类信息)

python10行代码实现超简单的文字微信信息连发。

Xx314b的博客 3769

Encoder编码解码攻击

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

常用的攻击软件源代码(c)

Abstract这里有一些是老的,现在看来并没有用,但他们都很有名。 1 Land 攻击一台Win95的机器。这是Win95的一个漏洞,以其IP地址和端口向自己的同一个端口发起连接(发SYN),Win95即会崩溃。 /* land.c by m3lt, FLCcrashes a win95 box */ #include #include #include #include #includ...

weixin_33860737的博客 443

【NTN 卫星通信】使用地面网络和卫星网络接入的终端应用场景

卫星接入有广覆盖的特点, 可以改善地面接入网覆盖或无线条件差的地区(例如多径干扰)的服务可用性。对于高速移动中需要实时业务的终端,如IMS语音/视频会议,可以通过地面接入和卫星接入同时实现与5G系统的双连接,在地面接入网不可用的情况下获得连续可靠的业务。

weixin_43603524的博客 2558

CODESYS连接触摸屏

触摸屏:威纶通-MT8071iP(网络IP:192.168.1.10) 控制器:研华AMAX-5580(PAC)(Win10系统,网络IP:192.168.1.3) CODESYS RTE:RTE 64 V3.5 SP13 Build05 笔记本:Thinkpad L14(网络IP:192.168.1.2) CODESYS IDE:V3.5 SP13(ADD ON V3.5.13.5) 一、确认网络通讯正常(关闭防火墙) 笔记本与触摸屏网络测试情况 笔记本与控制器网络测试情况 二、控制器部分 1、新建

Leo的博客 1万+

CSV注入攻击原理与防御:从公式注入到安全编码实践

数据导出是Web应用中的常见功能,CSV格式因其简单易用被广泛采用。然而,电子表格软件(如Excel)的自动公式计算特性,会将单元格中以等号、加号等开头的文本识别为公式执行,这构成了CSV注入(也称公式注入)攻击的技术原理。该漏洞允许攻击者通过控制导出数据,在受害者使用电子表格打开CSV文件时触发恶意行为,其技术价值在于揭示了纯文本数据在特定解析上下文中的语义危险性。应用场景主要出现在用户数据导出、报表生成等涉及CSV文件下载的功能模块中。本文聚焦于**CSV注入**的完整攻击链条,深入剖析其利用方式,并提

weixin_33801856的博客 414

二阶系统的带宽(频域分析)

下面以典型I型系统为例,计算系统的开环截止频率和闭环截止频率。设I型系统为: 1:系统的开环截止频率为 2:系统的闭环截止频率 其实我们在工程整定时,把ζ = 0.707,也把系统的带宽近视看成自然震荡角频率即 (wb≈wc≈wnw_{b}\approx w_{c}\approx w_{n}wb​≈wc​≈wn​)对于二阶系统。 ...

wanrenqi的博客 2万+

命令注入攻击原理与防御:从连接符到安全编码实践

命令注入是一种常见的安全漏洞,其核心原理在于攻击者通过注入恶意命令连接符,突破应用程序的信任边界,实现远程代码执行。在Linux/Unix Shell和Windows CMD/PowerShell中,分号、管道符、逻辑连接符等元字符原本用于灵活组合命令,但在缺乏输入验证的上下文中,这些连接符成为攻击者构造恶意载荷的关键。理解命令连接符的工作原理是防御此类攻击的基础。从技术价值看,命令注入防御不仅涉及输入过滤,更关乎安全的系统架构设计,例如使用参数化API替代字符串拼接、实施严格的白名单验证。在应用场景上,W

weixin_28715953的博客 248

Windows 上安装 OpenCode 完全指南:从零到成功,人人能看懂!

跟着这篇教程,你应该已经成功在 Windows 上安装并运行了 OpenCode。步骤操作要点1安装 Chocolatey必须以管理员身份运行 PowerShell2安装 OpenCode3验证安装关闭并重新打开终端,输入4进入项目目录必须是 Git 仓库(git init5配置模型输入/connect,输入 API Key6开始使用输入问题测试最后的小建议如果没有 API Key,可以从 DeepSeek 或 Kimi 开始,有免费额度初次使用建议先在简单项目上测试。

专注于编程、AI、人工智能等多个领域内容研究和分析 3887

2024年Unity 面试题 |五萬字 二佰道| Unity面试题大全,面试题总结【全网最全,收藏一篇足够面试】

正所谓 金三银四 ,又到了找工作的大好时机了,不知道大家有没有意向找一份更好的工作呢~ 之前写了很多Unity的学习和实例文章,但是面试题部分还没有一个系统的整理。 那本篇文章就来整理一下Unity中一些常见的面试题,说不准就会面试的时候就会遇到! 本篇文章会将Unity所有方面的面试资料都融会贯通,绝对是2022年Unity面试领域最实用的文章啦!

努力前行,总会成为自己心中的那道光 17万+

筑牢防线:SQL注入与XSS攻击的防御实战指南

安全不是一个功能,而是一个过程。对抗SQL注入“绝不拼接,只用参数”。对抗XSS“输入虽可信,输出必编码”,并辅以CSP和HttpOnly加固。在DevSecOps日益普及的今天,将这些安全实践融入CI/CD流程,使用静态代码分析工具(SAST)自动扫描,定期进行渗透测试,才能让应用在充满敌意的网络环境中屹立不倒。记住,最坚固的防线,往往建立在开发者对每一个字符的敬畏之心上。

2609_95039210的博客 312

mabl:AI原生测试自动化平台的基础使用

mabl是一个基于人工智能和机器学习的云原生测试自动化平台。它通过使用先进的技术,如机器学习,自动创建和执行测试,自动分析测试结果,并根据需求的变化自动适配和维护测试。这样的自动化过程极大地提高了软件测试的效率和准确性。mabl的口号是 “You write code, mabl tests”,意味着开发者只需关注编写代码,而测试工作则可以交给mabl来完成。mabl的平台支持多种测试类型,包括 Web、App、Api、可访问性和性能测试,使得团队能够更快速、更有信心地发布软件。

blues_C的博客 3655

javascript基础三十一:web常见的攻击方式有哪些?如何防御?

web常见的攻击方式有哪些?如何防御?

Allen-Ye博客 788

【定位教程2----旋转中心标定之方法一】

【定位教程2----旋转中心标定之方法一】

Quintin 3万+

西南科技大学数字电子技术实验七(4行串行累加器设计及FPGA实现)FPGA部分

/在k=1时输入1,并在k=0时运算。//在k=1时输入0,并在k=0时运算。//在k=1时输入1,并在k=0时运算。//在k=1时输入0,并在k=0时运算。//在k=1时输入1,并在k=0时运算。//在k=1时输入1,并在k=0时运算。//在k=1时输入0,并在k=0时运算。//在k=1时输入0,并在k=0时运算。三、程序清单(每条语句必须包括注释或在开发窗口注释后截图)四、综合、管脚分配、生成输出文件、下载(所有步骤截图)五、仿真程序清单、波形(波形截图必做,截图!.k(k),//开关。

Welcome To My6n Blog 4330

Java代码注入攻击原理与防御实战:从SQL注入到命令注入的全面防护

代码注入是一种常见的安全漏洞,其核心原理在于应用程序将用户输入的数据错误地解析为可执行的代码指令。这种混淆数据与代码的行为,使得攻击者能够通过精心构造的输入,篡改程序的原始执行逻辑,从而执行未授权的操作。从技术价值角度看,理解并防御代码注入是构建健壮、可信赖的软件系统的基石,尤其在Java这类企业级应用开发语言中至关重要。其应用场景广泛,涵盖了数据库交互、系统命令调用、表达式解析以及数据序列化等多个层面。本文聚焦于Java生态中的SQL注入和OS命令注入等典型攻击,深入剖析其利用方式,并系统性地阐述如何通过

weixin_32428571的博客 226

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

API安全深度解析:XSS、SQL注入、NoSQL注入与XAS攻击的防御实战

在Web应用与微服务架构中,注入攻击是长期存在的核心安全威胁,其本质在于系统未能正确区分用户输入的数据与可执行代码的边界。攻击者通过构造恶意输入,诱使应用程序执行非预期指令,从而实现数据窃取、权限提升或服务破坏。从原理上看,无论是传统的SQL注入、跨站脚本攻击,还是针对现代API的NoSQL注入与序列化格式攻击,都源于对用户输入缺乏严格的验证与处理。在技术价值层面,防御注入攻击是保障数据完整性、可用性与保密性的基石,尤其对于微服务、Serverless等分布式架构,API作为核心通信枢纽,其安全性直接关系到

weixin_29327525的博客 354

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

别只盯着漏洞利用!用DVWA中级关卡反向学习PHP安全编码规范

本文探讨如何利用DVWA靶场反向学习PHP安全编码规范,涵盖命令注入、文件上传、SQL注入、XSS防御和CSRF防护等关键安全实践。通过实战示例和防御策略,帮助开发者从防御视角提升Web应用安全性,将DVWA转化为安全编程的教科书。

weixin_33743880的博客 528

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: 通过User-agent进行SQL注入
下一篇: 安全编码实践之二:跨站脚本攻击防御
an0708
博客等级 码龄12年 30粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值