web开发安全

web开发安全问题

越权

越权是指操作主体能够访问逾越期权限的资源。比如A操作了B的订单,非管理者查看了管理者才能访问的数据。
越权可以分为水平越权和垂直越权。

水平越权

水平越权又被称之为数据越权,如上述所说的A操作了B的订单数据。

案例

如下所示,攻击者可以取消任意一个订单

	cancelOrderByOrderId(String orderId){
        updateStatusByOrderId(orderId);
    }
防御

在访问前先进行身份验证,A所操作的数据是否是A的数据。如下所示

	cancelOrderByOrderId(String orderId) {
        Long userId = getUserIdByCookie();
        Order order = queryOrderByOrderId(orderId);
        if (order != null && order.getUserId().equeals(userId)) {
            updateStatusByOrderId(orderId);
        } else {
            //return null 或者抛出异常
        }

垂直越权

垂直越权又被称之为功能越权,例如员工访问了老板才能访问的功能。
解决方法:在代码逻辑中检查用户的角色,确保该角色拥有此项权限。

XSS

跨站脚本攻击,Cross Site Script。是指攻击者在网页上注入恶意代码,并且让浏览器执行而达到攻击目的的手段。
它危害极大,可以获取用户Cookie,篡改页面,钓鱼攻击等等。
XSS可以分为三类

持久型攻击(持久型攻击)

杀伤力最大的一种,它将恶意代码存储到服务器,只要有用户访问了这个数据,就会执行恶意代码,进而攻击。
例如,将恶意代码上传到论坛的发言中,每一个访问者都会中招。

案例

在一个论坛上输入 </div><script>alert(1)</script>,它将存储到服务端,如果前后端没有防范XSS的话,每一个访问你帖子的人都会弹出一个弹窗。

反射型攻击

反射性攻击是指攻击者实时注入恶意代码,但不会存储到服务端。

案例

一个搜索页面会提供一个搜素框,且会将用户的输入最终输出到页面。因此可以在搜索框中输入一段js代码进行攻击。

DOM型攻击

算是一种反射型跨站脚本攻的特例,利用动态修改DOM文档的能力实时注入恶意代码进行攻击。

防御

对用户的输入进行过滤转码,将特殊字符转义

  1. 将要插入html代码块中的进行html转义
  2. 将要插入js代码块中的进行js转义
  3. 将要插入到css中的进行css转义
  4. jsonp返回格式的数据,要保证响应的Content-Type为 application/json,避免text/html

设置HttpOnly

CSP(Content-Security-Policy),内容安全策略,是浏览器与跨站脚本攻击抗争的产物,其提供一个额外的安全层。

CSRF

CSRF 跨站点请求伪造(Cross—Site Request Forgery) 是指攻击者在控制的页面伪造请求,向服务端发送请求而到达攻击目的的手段。

案例

某购物网站A取消订单的请求https://www.xxx.com/shop/cancelorder?activityid=y

  1. 被攻击者先登录了网站A,网站A在xxx这个域种下了Cookie。
  2. 被攻击者不小心访问了攻击者控制的网站B,且在B网站中会执行https://www.xxx.com/shop/cancelorder?activityid=y,因此在访问B网站时,攻击者伪造了请求,并向网站A的服务器发起了访问(带上了Cookie),取消了订单。

防御

  1. 验证请求Header中的Referer字段,如果Referer不是合法的,那么可以拒绝请求。该方法简单高效,但是黑客可以攻击浏览器修改Referer字段,用户也可能认为Referer会泄露隐私,会拒绝提供Referer。
  2. 在发起请求时,带上动态生成的token。这个token可以在用户访问网站时生成,发起请求时再带上,这个token不能存储到Cookie中。

SQL注入

攻击者将非法的SQL注入到参数中,使得数据库执行非预期的SQL语句,造成攻击。本质上是程序与代码没有做到分离。

案例

一个网站提供了按照活动名称搜索活动记录的功能,后台的SQL语句:'SELECT * FROM activity WHERE name = ' + 'keyword';攻击者输入a or 1=1就能拿到所有的数据。

防御

  1. Java语言可以使用预编译功能,将参数与SQL语句分离
  2. Mybatis使用 ${param},不要使用#{param}
  3. 检查输入是否包含非法词

文件操作

  1. 任意文件上传:上传js代码造成XSS攻击,上传超大文件,上传木马
  2. 文件覆盖:用户上传时指定了上传的路径,覆盖服务器上的文件
  3. 文件下载:用户下载时指定了路径,下载服务器上的其他文件

案例

上传文件时,后端构造的路径/xxx/yyy/+param
上传文件时用户构造参数../../etc/profile,就有可能覆盖/etc/profile文件,下载攻击类似

防御

  1. 上传文件:限制文件格式、限制文件大小、限制”…/“等字符、对文件名重命名
  2. 下载文件:限制”…/“等字符

命令注入

类似SQL注入

CROS配置不当

cros是用来解决跨域问题的,但是在开发时,后端为了方便,会如下设置

response.setHeader("Access-Control-Allow-Origin", "*"); 

这会使得所有域的请求都会接受,因此可能会造成CRSF攻击。正确的做法是严格控制,使用白名单进行验证。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值