1.什么是抽象类
先说下什么是抽象类吧。
抽象类(Abstract Class)是一种在面向对象编程中常用的概念,主要用于定义一些抽象的方法或属性,这些方法或属性在抽象类中不具体实现,而是由继承该抽象类的子类来实现。
抽象类的主要特点有:
- 抽象方法:抽象类中可以包含抽象方法,这些方法是只有方法签名而没有具体实现的。子类必须实现这些抽象方法,除非子类也是抽象类。
- 不能被实例化:由于抽象类可能包含没有实现的抽象方法,因此它不能被实例化。也就是说,你不能直接创建一个抽象类的对象。
- 继承:抽象类可以被其他类继承,子类可以选择实现抽象类中的抽象方法,也可以选择再次声明为抽象类。
抽象类在编程中有很多用途,例如:
- 定义接口:抽象类可以定义一组操作的规范,而不需要提供具体的实现。这样,不同的子类可以根据需要来实现这些操作。
- 代码复用:抽象类可以包含一些已经实现的非抽象方法,这些方法可以被所有的子类共享,从而实现了代码的复用。
- 系统扩展:通过使用抽象类,我们可以更容易地扩展系统的功能。当需要添加新的功能时,只需要创建一个新的子类,实现必要的抽象方法即可。
下面是一个简单的抽象类的例子(以Java为例):
public abstract class Animal {
// 抽象方法
public abstract void makeSound();// 非抽象方法
public void eat() {
System.out.println("The animal is eating.");
}
}// 继承Animal的子类
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("The dog barks.");
}
}
在这个例子中,Animal 是一个抽象类,它定义了一个抽象方法 makeSound 和一个非抽象方法 eat。Dog 是 Animal 的一个子类,它实现了 makeSound 方法。
2.SSRF(URLConnection抽象类)-审计思路&修复方案
URLConnection 是一个抽象类,表示指向 URL 指定的资源链接,其本身依赖于 Socket 类实现网络连接。 支持的协议有:file ftp mailto http https jar netdoc gopher
URLStreamHandler 是一个抽象类,每个协议都有继承它的子类 —— Handler。 Handler 定义了该如何去打开一个连接,即 openConnection() 。 如果直接传入一个 URL 字符串,会在构造对象时,根据 protocol 自动创建对应 的 Handler 对象。
为什么先说抽象类就是为了说这个,你需要去看下具体的实现方法,然后去找到这个支持的协议。利用这个来进行SSRF。一般来说,他主要的审计思路就是去看下面这些标识,
基本上都是发起url请求的地方:
- 1. 分享:通过URL地址分享网页内容
- 2. 转码服务
- 3. 在线翻译
- 4. 图片加载与下载:通过URL地址加载或下载图片
- 5. 图片、文章收藏功能
- 6. 未公开的API实现以及其他调用URL的功能
- 7. 从URL关键字中寻找:share、wap、url、link、src、source、target、u、3g、 display、sourceURI、imageURL、domain
- 8. 云服务器商。(各种网站数据库操作)
常用函数 url关键词:share、wap、url、link、src、source、target、u、display、sourceURI、 imageURL、domain…
话说回来,还是具体情况具体考虑,他真叫A和a你也没辙,不过一般不会这么干,不符合开发规范,可以忽略不记。
修复方案老生常谈属实不适合单开一章,放在这吧,
- 白名单校验url及IP
- 限制协议和端口
3.CSRF审计思路&修复方案
CSRF和SSRF不能说一点关系没有,只能说反正毫不相干,除了名字,相似的地方几乎没有。
跨站请求伪造(Cross-site request forgery)CSRF,是一种使已登录用户在不知情的情况下执行某种动作的攻击。因为攻击者看不到伪造请求的响应结果,所以CSRF攻击主要用来执行动作,而非窃取用户数据。 当受害者是一个普通用户时,CSRF可以实现在其不知情的情况下转移用户资金、发送邮件等操作;但是如果受害者是一个具有管理员权限的用户时CSRF则可能威胁到整个Web系统的安全。
说是这么说,有些src平台根本不收这玩意。。。。。。you look look it 这是啥事。一般不单独使用,都是打组合拳用的。
代码审计中的思路:
- 检查是否校验Referer、
- 是否给cookie设置SameSite属性、
- 敏感操作是否会生成CSRF token
- 查看请求参数中是否存在不可被攻击者猜测的字段,比如验证码等参数。
修复方案:
- Referer校验,对HTTP请求的Referer校验,如果请求Referer的地址不在允许的列表中,则拦截请求。
- Token校验,服务端生成随机token,并保存在本次会话cookie中,用户发起请求时 附带token参数,服务端对该随机数进行校验。如果不正确则认为该请求为伪造请求 拒绝该请求。
- 对于高安全性操作则可使用验证码、短信、密码等二次校验措施
其实还是说到底,最先做的永远是去找过滤器,先看看这个过滤器有没有相应的操作,有的话基本没啥问题,尤其挂着CSRF—TOKEN这些字段的,基本都是做了防护的。
再会!
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022