程序员必备基础:10种常见安全漏洞浅析
前言
我们日常开发中,很多小伙伴容易忽视安全漏洞问题,认为只要正常实现业务逻辑就可以了。其实,安全性才是最重要的。本文将跟大家一起学习常见的安全漏洞问题,希望对大家有帮助哈。如果本文有什么错误的话,希望大家提出哈,感谢感谢~
1. SQL 注入
1.1 什么是SQL注入?
SQL注入是一种代码注入技术,一般被应用于攻击web应用程序。它通过在web应用接口传入一些特殊参数字符,来欺骗应用服务器,执行恶意的SQL命令,以达到非法获取系统信息的目的。它目前是黑客对数据库进行攻击的最常用手段之一。
1.2 SQL注入是如何攻击的?
举个常见的业务场景:在web表单搜索框输入员工名字,然后后台查询出对应名字的员工。
这种场景下,一般都是前端页面把一个名字参数name传到后台,然后后台通过SQL把结果查询出来
因为SQL是直接拼接的,如果我们完全信任前端传的参数的话。假如前端传这么一个参数时'' or '1'='1',SQL就变成酱紫的啦。
这个SQL会把所有的员工信息全都查出来了,酱紫请求用户已经越权啦。请求者可以获取所有员工的信息,其他用户信息已经暴露了啦。
1.3 如何预防SQL注入问题
1.3.1 使用#{}而不是${}
在MyBatis中,使用#{}而不是${},可以很大程度防止sql注入。
- 因为#{}是一个参数占位符,对于字符串类型,会自动加上"",其他类型不加。由于Mybatis采用预编译,其后的参数不会再进行SQL编译,所以一定程度上防止SQL注入。
- ${}是一个简单的字符串替换,字符串是什么,就会解析成什么,存在SQL注入风险
1.3.2 不要暴露一些不必要的日志或者安全信息,比如避免直接响应一些sql异常信息。
如果SQL发生异常了,不要把这些信息暴露响应给用户,可以自定义异常进行响应
1.3.3 不相信任何外部输入参数,过滤参数中含有的一些数据库关键词关键词
可以加个参数校验过滤的方法,过滤union,or等数据库关键词
1.3.4 适当的权限控制
在你查询信息时,先校验下当前用户是否有这个权限。比如说,实现代码的时候,可以让用户多传一个企业Id什么的,或者获取当前用户的session信息等,在查询前,先校验一下当前用户是否是这个企业下的等等,是的话才有这个查询员工的权限。
2. JSON反序列化漏洞——如Fastjson安全漏洞
2.1 什么是JSON序列化,JSON发序列化
- 序列化:把对象转换为字节序列的过程
- 反序列:把字节序列恢复为Java对象的过程
Json序列化就是将对象转换成Json格式的字符串,JSON反序列化就是Json串转换成对象
2.2 JSON 反序列化漏洞是如何被攻击?
不安全的反序列化可以导致远程代码执行、重放攻击、注入攻击或特权升级攻击。之前Fastjson频繁爆出安全漏洞,我们现在分析fastjson1.2.24版本的一个反序列化漏洞吧,这个漏洞比较常见的利用手法就是通过jndi注入的方式实现RCE。
我们先来看fastjson一个反序列化的简单例子:
运行结果:
加了@type属性就能调用对应对象的setXXX方法,而@type表示指定反序列化成某个类。如果我们能够找到一个类,而这个类的某个setXXX方法中通过我们的精心构造能够完成命令执行,即可达到攻击的目的啦。
com.sun.rowset.JdbcRowSetImpl就是类似这么一个类,它有两个set方法,分别是setAutoCommit和setDataSourceName”
有兴趣的小伙伴,可以看下它的源代码
setDataSourceName简单设置了设置了dataSourceName的值,setAutoCommit中有connect操作,connect方法中有典型的jndi的lookup方法调用,参数刚好就是在setDataSourceName中设置的dataSourceName。
因此,有漏洞的反序列代码实现如下即可:
漏洞复现的流程如下哈:
参考的代码来源这里哈,fastjson漏洞代码测试(https://github.com/earayu/fastjson_jndi_poc)
如何解决json反序列化漏洞问题
可以升级版本,比如fastjson后面版本,增强AutoType打开时的安全性fastjson,增加了AutoType黑名单等等,都是为了应对这些安全漏洞。
反序列化有fastjson、gson、jackson等等类型,可以替换其他类型。
升级+打开safemode
3. XSS 攻击
3.1 什么是XSS?
XSS 攻击全称跨站脚本攻击(Cross-Site Scripting),这会与层叠样式表(Cascading StyleSheets,CSS)的缩写混淆,因此有人将跨站脚本攻击缩写为XSS。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。XSS攻击一般分三种类型:存储型、反射型、DOM型XSS”
3.2 XSS是如何攻击的?
拿反射型举个例子吧,流程图如下:
我们搞点简单代码样例吧,首先正常html页面如下:
用户输入搜索信息,点击搜索按钮,就是到达正常服务器的。如果黑客在url后面的参数中加入如下的恶意攻击代码。
当用户打开带有恶意代码的URL的时候,正常服务器会解析出请求参数 name,得到"",拼接到 HTML 中返回给浏览器。形成了如下的 HTML:
用户浏览器接收到响应后执行解析,其中的恶意代码也会被执行到。
4.这里的链接我写的是百度搜索页,实际上黑客攻击的时候,是引诱用户输入某些重要信息,然后跳到他们自己的服务器,以窃取用户提交的内容信息。
3.3 如何解决XSS攻击问题
- 不相信用户的输入,对输入进行过滤,过滤标签等,只允许合法值。
- HTML 转义
- 对于链接跳转,如
- 限制输入长度等等
4. CSRF 攻击
4.1 什么是CSRF 攻击?
CSRF,跨站请求伪造(英语:Cross-siterequestforgery),简单点说就是,攻击者盗用了你的身份,以你的名义发送恶意请求。跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF利用的是网站对用户网页浏览器的信任。
4.2 CSRF是如何攻击的呢?
我们来看下这个例子哈(来自百度百科)
4.3 如何解决CSRF攻击
检查Referer字段。HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址。
添加校验token。
5. 文件上传下载漏洞
5.1 文件上传漏洞
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器。”
解决办法一般就是:
- 限制服务器相关文件目录的权限
- 校验上传的文件,如后缀名 禁止上传恶意代码的文件
- 尽量禁止使用前端上传的文件名
5.2 文件下载漏洞
文件下载漏洞,举个例子,使用 .. 等字符,使应用读取到指定目录之外的其他目录中的文件内容,从而可能读取到服务器的其他相关重要信息。
6. 敏感数据泄露
这个相对比较好理解,一般敏感信息包括密码、用户手机身份证信息、财务数据等等,由于web应用或者API未加密或者疏忽保护,导致这些数据极易被黑客利用。所以我们需要保护好用户的隐私数据,比如用户密码加密保存,请求采用https加密,重要第三方接口采用加签验签,服务端日志不打印敏感数据等等。
7. XXE 漏洞
7.1 什么是XXE
XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。”
7.2 XXE三种攻击场景
场景1. 攻击者尝试从服务端提取数据
场景2. 攻击者通过将上面的实体行更改为一下内容来探测服务器的专用网络
场景3. 攻击者通过恶意文件执行拒绝服务攻击
7.3 如何防御XXE
- 使用开发语言提供的禁用外部实体的方法
- 过滤用户提交的XML数据,过滤
8. DDoS 攻击
8.1 什么是DDos攻击
DDoS 攻击,英文全称是 Distributed DenialofService,谷歌翻译过来就是“分布式拒绝服务”。一般来说是指攻击者对目标网站在较短的时间内发起大量请求,大规模消耗目标网站的主机资源,让它无法正常服务。在线游戏、互联网金融等领域是DDoS攻击的高发行业。
为了方便理解,引用一下知乎上一个非常经典的例子
我开了一家有五十个座位的重庆火锅店,由于用料上等,童叟无欺。平时门庭若市,生意特别红火,而对面二狗家的火锅店却无人问津。二狗为了对付我,想了一个办法,叫了五十个人来我的火锅店坐着却不点菜,让别的客人无法吃饭。”
8.2 如何应对 DDoS 攻击?
- 高防服务器,即能独立硬防御 50Gbps 以上的服务器,能够帮助网站拒绝服务攻击,定期扫描网络主节点等
- 黑名单
- DDoS 清洗
- CDN 加速
9. 框架或应用漏洞
- Struts 框架漏洞:远程命令执行漏洞和开放重定向漏洞
- QQ Browser 9.6:API 权限控制问题导致泄露隐私模式
- Oracle GlassFish Server:REST CSRF
- WebLogic: 未授权命令执行漏洞
- Hacking Docker:Registry API 未授权访问
- WordPress 4.7 / 4.7.1:REST API 内容注入漏洞
10. 弱口令、证书有效性验证、内部接口在公网暴露、未鉴权等权限相关漏洞
10.1 弱口令
- 空口令
- 口令长度小于8
- 口令不应该为连续的某个字符(QQQQQQ)
- 账号密码相同(例:root:root)
- 口令与账号相反(例:root:toor)
- 口令纯数字(例:112312324234, 电话号)
- 口令纯字母(例:asdjfhask)
- 口令已数字代替字母(例:hello word, hell0 w0rd)
- 口令采用连续性组合(例:123456,abcdef,654321,fedcba)
- 服务/设备默认出厂口令
10.2 证书有效性验证漏洞
如果不对证书进行有效性验证,那https就如同虚设啦。
- 如果是客户生成的证书,需要跟系统可信根CA形成信任链,不能为了解决ssl证书报错的问题,选择在客户端代码中信任客户端中所有证书的方式。
- 证书快过期时,需要提前更换。
10.3 未鉴权等权限相关漏洞
一些比较重要的接口,一般建议鉴权。比如你查询某账号的转账记录,肯定需要先校验该账号是不是操作人旗下的啦。
参考与感谢
- 【入坑JAVA安全】fastjson中的jndi注入
- Web渗透之文件上传漏洞总结
- XXE漏洞利用技巧:从XML到远程代码执行
- WEB应用常见15种安全漏洞一览
- 什么是 DDoS 攻击?
- 弱口令总结(什么是弱口令)
本文转载自微信公众号「捡田螺的小男孩」,可以通过以下二维码关注。转载本文请联系捡田螺的小男孩公众号。
推荐系统
番茄花园Ghost Win7 x64 SP1稳定装机版2022年7月(64位) 高速下载
语言:中文版系统大小:3.91GB系统类型:Win7欢迎使用 番茄花园 Ghost Win7 x64 SP1 2022.07 极速装机版 专业装机版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,集成最全面的硬件驱动,精心挑选的系统维护工具,加上独有人性化的设计。是电脑城、个人、公司快速装机之首选!拥有此系统
番茄花园 Windows 10 极速企业版 版本1903 2022年7月(32位) ISO镜像快速下载
语言:中文版系统大小:3.98GB系统类型:Win10番茄花园 Windows 10 32位极速企业版 v2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动激活
新萝卜家园电脑城专用系统 Windows10 x86 企业版 版本1507 2022年7月(32位) ISO镜像高速下载
语言:中文版系统大小:3.98GB系统类型:Win10新萝卜家园电脑城专用系统 Windows10 x86企业版 2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程
笔记本&台式机专用系统 Windows10 企业版 版本1903 2022年7月(32位) ISO镜像快速下载
语言:中文版系统大小:3.98GB系统类型:Win10笔记本台式机专用系统 Windows 10 32位企业版 v2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过
笔记本&台式机专用系统 Windows10 企业版 版本1903 2022年7月(64位) 提供下载
语言:中文版系统大小:3.98GB系统类型:Win10笔记本台式机专用系统 Windows10 64专业版 v2022年7月 一、系统主要特点: 使用微软Win10正式发布的专业版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动
雨林木风 Windows10 x64 企业装机版 版本1903 2022年7月(64位) ISO镜像高速下载
语言:中文版系统大小:3.98GB系统类型:Win10新雨林木风 Windows10 x64 企业装机版 2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动激活
深度技术 Windows 10 x64 企业版 电脑城装机版 版本1903 2022年7月(64位) 高速下载
语言:中文版系统大小:3.98GB系统类型:Win10深度技术 Windows 10 x64 企业TLSB 电脑城装机版2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程
电脑公司 装机专用系统Windows10 x64 企业版2022年7月(64位) ISO镜像高速下载
语言:中文版系统大小:3.98GB系统类型:Win10电脑公司 装机专用系统 Windows10 x64 企业TLSB版2022年7月一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过
相关文章
- Dell潜藏12年的驱动漏洞影响数百万计算机
- 无线网为什么会很不稳定 网络不稳定怎么办解决方法
- 室内设计网站Havenly曝130万个帐户数据泄露事件
- TeamViewer用户注意:请尽快将其更新为最新版本
- Emotet的技术迭代史(2018-2020年)
- 你真的知道什么是线程安全吗?
- 228万名MeetMindful用户的数据被泄露
- 复工之后:员工如何改善网络安全?
- 怎么修复互联网连接 修复网络连接方法【介绍】
- 华盛顿警局遭黑客入侵,不交赎金就公开警方线人
- 网络交换机有什么功能 网络交换机分类及选购技巧【详解】
- 超实用!如何让智能家居网络更安全?
- 通过网页中的 6 个特征字段检测钓鱼网站
- 无线网络机顶盒品牌有哪些 无线网络机顶盒品牌推荐
热门系统
- 1华硕笔记本&台式机专用系统 GhostWin7 32位正式旗舰版2018年8月(32位)ISO镜像下载
- 2深度技术 Windows 10 x86 企业版 电脑城装机版2018年10月(32位) ISO镜像免费下载
- 3电脑公司 装机专用系统Windows10 x86喜迎国庆 企业版2020年10月(32位) ISO镜像快速下载
- 4雨林木风 Ghost Win7 SP1 装机版 2020年4月(32位) 提供下载
- 5深度技术 Windows 10 x86 企业版 六一节 电脑城装机版 版本1903 2022年6月(32位) ISO镜像免费下载
- 6深度技术 Windows 10 x64 企业版 电脑城装机版2021年1月(64位) 高速下载
- 7新萝卜家园电脑城专用系统 Windows10 x64 企业版2019年10月(64位) ISO镜像免费下载
- 8新萝卜家园 GhostWin7 SP1 最新电脑城极速装机版2018年8月(32位)ISO镜像下载
- 9电脑公司Ghost Win8.1 x32 精选纯净版2022年5月(免激活) ISO镜像高速下载
- 10新萝卜家园Ghost Win8.1 X32 最新纯净版2018年05(自动激活) ISO镜像免费下载
热门文章
常用系统
- 1新萝卜家园 Ghost Win7 x64 SP1 极速版2020年1月(64位) 高速下载
- 2番茄花园GhostWin7 SP1电脑城极速装机版2020年11月(32位) 最新高速下载
- 3雨林木风Ghost Win7 x64 SP1 极速装机版2022年4月(64位) 高速下载
- 4番茄花园GhostWin7 SP1电脑城喜迎国庆 极速装机版2021年10月(32位) 最新高速下载
- 5雨林木风Ghost Win8.1 64位 纯净正式版下载 2018年8月免激活)
- 6电脑公司Ghost Win8.1 X64位 元旦特别 纯净版2022年1月(自动激活) ISO镜像快速下载
- 7番茄花园 Windows 10 官方企业版 版本1903 2021年10月(64位) ISO高速下载
- 8深度技术 Windows 10 x64 企业版 电脑城装机版2020年4月(64位) 高速下载
- 9深度技术 Windows 10 x86 企业版 六一节 电脑城装机版2020年6月(32位) ISO镜像免费下载
- 10新萝卜家园 GhostWin7 SP1 电脑城极速装机版2018年10月(32位) 最新版ISO镜像下载