互联网安全架构(2),文末有彩蛋

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

String referer = req.getHeader(“Referer”);

if (StringUtils.isEmpty(referer)) {

request.getRequestDispatcher(“/imgs/error.png”).forward(request, response);

return;

}

String domain = getDomain(referer);

if (!domain.equals(domainName)) {

request.getRequestDispatcher(“/imgs/error.png”).forward(request, response);

return;

}

chain.doFilter(request, response);

}

/**

  • 获取url对应的域名

  • @param url

  • @return

*/

public String getDomain(String url) {

String result = “”;

int j = 0, startIndex = 0, endIndex = 0;

for (int i = 0; i < url.length(); i++) {

if (url.charAt(i) == ‘/’) {

j++;

if (j == 2)

startIndex = i;

else if (j == 3)

endIndex = i;

}

}

result = url.substring(startIndex + 1, endIndex);

return result;

}

public void destroy() {

}

}

这里贴的只是示列代码具体优化还得你自己去优化。

四,什么是csrf模拟请求?


(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用也就是人们所知道的钓鱼网站。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

也就是通俗一点来说就是,大量请求你的接口,通过抓包工具请求分析,伪造token访问你的接口,攻击服务器降低服务器数据库性能。

如何解决防御?

1,MVCC方案

多版本并发控制,该策略主要使用 update with condition(更新带条件来防止)来保证多次外部请求调用对系统的影响是一致的。在系统设计的过程中,合理的使用乐观锁,通过 version 或者 updateTime(timestamp)等其他条件,来做乐观锁的判断条件,这样保证更新操作即使在并发的情况下,也不会有太大的问题。例如

select * from tablename where condition=#condition# // 取出要跟新的对象,带有版本 versoin

update tableName set name=#name#,version=version+1 where version=#version#

在更新的过程中利用 version 来防止,其他操作对对象的并发更新,导致更新丢失。为了避免失败,通常需要一定的重试机制。

2.去重表

在插入数据的时候,插入去重表,利用数据库的唯一索引特性,保证唯一的逻辑。

3,悲观锁

select for update,整个执行过程中锁定该订单对应的记录。注意:这种在 DB 读大于写的情况下尽量少用。

4,Token机制,防止页面重复提交

把token放在redis 里面通过限流方式,每个token只能使用一次,网络延迟或者重试机制解决这个问题。

public class TokenUtils {

private static Map<String, Object> tokenMap = new HashMap<String, Object>();

// 获取token

public static String getToken() {

// 1.生成令牌

String token = “token-” + System.currentTimeMillis();

// 2.存入tokenMap

tokenMap.put(token, token);

return token;

}

// 验证token,并且删除对应的token

public static Boolean exisToken(String token) {

// 1.从集合中获取token

Object result = tokenMap.get(token);

if (result == null) {

return false;

}

// 2.删除对应的token

tokenMap.remove(token);

return true;

}

}

五,文件上传漏洞


什么是文件上传漏洞?

上传漏洞这个顾名思义,就是攻击者通过上传木马文件,直接得到WEBSHELL,危害等级超级高,现在的入侵中上传漏洞也是常见的漏洞。 导致该漏洞的原因在于代码作者没有对访客提交的数据进行检验或者过滤不严,可以直接提交修改过的数据绕过扩展名的检验。

如何解决防御?

1)对文件格式限制,只允许某些格式上传

2)对文件格式进行校验,前端跟服务器都要进行校验(前端校验扩展名,服务器校验扩展名、Content_Type等)

3)将上传目录防止到项目工程目录之外,当做静态资源文件路径,并且对文件的权限进行设定,禁止文件下的执行权限。

4)通过文件流解析判断文件类型。

这里给一个图片的判断方式,其他的自行百度。

protected void doPost(HttpServletRequest request, HttpServletResponse response) {

String root = request.getServletContext().getRealPath(“/upload”);

DiskFileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload upload = new ServletFileUpload(factory);

try {

List list = upload.parseRequest(request);

for (FileItem it : list) {

// 如果是file文件类型

if (!it.isFormField()) {

FileType fileType = getFileType(it.getInputStream());

if (fileType == null) {

// 非图片格式

response.getWriter().write(“fail”);

return;

}

String imgValue = fileType.getValue();

// 是图片格式

it.write(new File(root + “/” + it.getName()));

response.getWriter().write(“success”);

}

}

} catch (Exception e) {

try {

response.getWriter().write(“exception”);

} catch (IOException e1) {

e1.printStackTrace();

}

e.printStackTrace();

}

}

// 判断文件是图片格式

public static FileType getFileType(InputStream is) throws IOException {

byte[] src = new byte[28];

is.read(src, 0, 28);

StringBuilder stringBuilder = new StringBuilder(“”);

if (src == null || src.length <= 0) {

return null;

}

for (int i = 0; i < src.length; i++) {

int v = src[i] & 0xFF;

String hv = Integer.toHexString(v).toUpperCase();

if (hv.length() < 2) {

stringBuilder.append(0);

}

stringBuilder.append(hv);

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

g(v).toUpperCase();

if (hv.length() < 2) {

stringBuilder.append(0);

}

stringBuilder.append(hv);

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-3ms858Up-1713214715587)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值