位置:首页 > 安全分类 > 系统安全

你的系统还安全吗?

2021-05-14 16:52:21 来源:
简介程序开发过程中,系统的安全性很容易被忽略,下面列举一些比较常见的安全漏洞的场景。CSRF(跨站点请求伪造)原理增删改查的接口参数有规律可循,可以被恶意构造,将构造的接口发给特

程序开发过程中,系统的安全性很容易被忽略,下面列举一些比较常见的安全漏洞的场景。

CSRF(跨站点请求伪造)

原理

增删改查的接口参数有规律可循,可以被恶意构造,将构造的接口发给特定的用户,用户点击后就被攻击了。

防御

让参数不可猜解,发起请求时在参数中添加token参数,token参数在后台与保存的token的参数进行比较,不匹配则验证不通过。通过spring-security的包通过该参数spring.security.csrf.enabled=true开启防御。

CORS(跨域资源共享)

原理

跨域资源共享是一种机制,使用额外的http头告诉浏览器运行访问来自不同的源的服务器,出于安全原因,浏览器限制从脚本内发起跨域的请求,通过jsonp的方式可以实现跨域访问资源。

防御

建议不适用jsonp的方式访问跨域的问题,springboot在2.1.x移除对jsonp的支持 通过在头部设置Access-Control-的各个跨域的设置,不要用*的方式

Access-Control-Allow-Methods: 真实请求允许的方法 Access-Control-Allow-Headers: 服务器允许使用的字段 Access-Control-Allow-Credentials: 是否允许用户发送、处理 cookie Access-Control-Max-Age: 预检请求的有效期,单位为秒。有效期内,不会重复发送预检请求 Access-Control-Allow-Origin:设置哪些域名可以访问 SSRF(服务器端请求伪造)

原理

由攻击者构造的攻击链接传给服务端执行造成的漏洞,一般用来在外网探测或攻击内网服务

防御

java 看看后台的代码有哪些是会发起网络请求的,限制协议只是:http,https,禁止URL传入内网IP或者设置URL白名单,限制302重定向。

XSS(跨站脚本漏洞)

原理

利用前后端校验不严格,用户将攻击代码植入到数据中提交到了后台,当这些数据在网页上被其他用户查看的时候触发攻击

防御

url地址需要urlEncode,取值使用urlDecode,前后台获取的时候用HtmlEscap。

XXE(XML外部实体注入漏洞)

原理

漏洞全称XML External Entity Injection即XML外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、×××内网网站、发起dos×××等危害。 例子:可以获取用户的密码

<!ENTITY myentity SYSTEM="file:///etc/passwd"]>

防御

禁用DTD实体解析

任意文件上传漏洞

原理

通过文件上传直接获取应用系统的webshell,webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的

防御

上传到oss 后台类型校验:判断文件的后缀,通过读取文件头16进制内容 sql漏洞注入

原理

通过sql注入,获取数据库全量数据

防御

sql采用预编的方式 Mybatis 将 ${var}更换为#{var},Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;Mybatis在处理${}时,就是把${}替换成变量的值,MyBatis排序时使用order by 动态参数时需要注意,用$而不是#。 反序列化漏洞

原理

从用户可控的位置(cookie,参数)中读取序列化字符串,在服务端进行反序列化代码执行操作,因为反序列化的内容可以写入任意代码,导致代码注入执行

防御

升级相应(fastjson,commonsCollections,jackson)的版本

url任意跳转

原理

实现url跳转业务逻辑时,因为待跳转url本身是用户提供,或者url重大一级域名不发由用户输入,从而指向不安全站点,从而导致钓鱼

防御

后端跳转添加白名单校验