网站如何防止漏洞攻击?这几个方法教你管用

CSRF(跨站请求伪造)概述

– Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也称为"one click"攻击。 很多人搞不清楚CSRF的概念,甚至有时候会将其和XSS混淆,更有甚者会将其和越权问题混为一谈,这都是对原理没搞清楚导致的。

– CSRF与XSS的区别:CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏。

– 因此,网站如果要防止CSRF攻击,则需要对敏感信息的操作实施对应的安全措施,防止这些操作出现被伪造的情况,从而导致CSRF。比如:

1. 对敏感信息的操作增加安全的token;

2. 对敏感信息的操作增加安全的验证码;

3. 对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等。

CSRF的实现过程:

接下来实际在靶场当中实践一下:

CSRF(get)

1.先点一下提示

找到有哪些用户

2.登录vince

3.修改个人信息,burp抓包

4.生成csrf poc

copy html放到网站目录下(先建txt,粘贴后改后缀为html)

5.登录kevin用户,然后访问csrf poc

访问后点击,发现kevin用户信息已经被更改

到这就实际体验了文章开头的csrf 流程

顺带提一下渗透测试中两个常见的名词:

POC:全称 ' Proof of Concept ',中文 ' 概念验证 ' ,常指一段漏洞证明的代码。

EXP:全称 ' Exploit ',中文 ' 利用 ',指利用系统漏洞进行攻击的动作。

CSRF(post)

先对比着看一下get和post的数据包区别:

get:

post:

可以看到:

GET请求参数是通过URL传递的,多个参数以&连接,POST请求放在request body中。

1.接着上面抓到的post数据包,生成csrf poc

2.copy html放到网站目录下

3.登录lili用户

初始用户信息

4.不退出用户,直接访问csrf poc

点击后发现用户信息已被修改

CSRF(token)

先抓包看看数据包有何不同

试试csrf能否实现

1.登录lili

原始用户信息

2.访问csrf poc

不能实现csrf,增加了token验证机制,无法绕过

总结:

CSRF广义上存在于任何增删改操作中,根据经验常见的有:

1)冒充身份:订阅/关注/转发/投票操作,删除文件,更改配置等

2)帐户接管:密码修改,邮箱绑定,第三方帐户关联

3)其他:登录/注册/注销/注册

4)安全设计原则:CSRF登录后令牌未更新、登出后未注销等

漏洞防御:

1) 验证header字段

常见的是Referer和Origin,Referer容易绕过,且会包含有一些敏感信息,可能会侵犯用户的隐私,而Origin字段代表最初请求,更建议使用。

2) Token令牌机制

当前最成熟的防御机制,但若存在验证逻辑及配置问题则存在绕过风险。Token的生成机制通常和session标识符挂钩,将用户的token与session标识符在服务端进行匹配。当下已经有很多开源库和中间件都可以实现token生成。

3) 验证自定义header

如基于cookie的csrf保护,验证cookie中的某些值和参数必须相等

更多漏洞挖掘原理复现学习可以在雨笋教育腾讯课堂

今晚7点雨笋教育院长白帽子大佬将在线和大家分享CTF竞赛案例

来源:freebuf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL注入是一种常见的安全漏洞,它利用用户输入的数据未经过正确过滤或转义,直接拼接到SQL语句中,从而导致恶意用户可以执行恶意的SQL语句。 防止SQL注入的方法包括以下几点: 1. 使用参数化查询或预编译语句:使用参数化查询(Prepared Statement)或者预编译语句可以防止用户输入被直接拼接到SQL语句中。具体来说,将用户输入的数据作为参数传递给SQL语句,而不是将其直接拼接到SQL语句中。 2. 输入验证和过滤:对用户输入进行验证和过滤,确保输入的数据符合预期的格式和范围。可以使用正则表达式、白名单、黑名单等方式进行输入验证和过滤。 3. 最小权限原则:数据库的访问权限应该尽量设置为最小权限,避免恶意用户通过注入攻击获取敏感数据。 4. 错误信息处理:不要将详细的错误信息直接暴露给用户,因为这会提供攻击者有用的信息。应该合理处理错误信息,只向用户展示必要的错误提示。 以下是一个示例说明: 假设有以下代码用于用户登录验证: ```java String username = request.getParameter("username"); String password = request.getParameter("password"); String query = "SELECT * FROM users WHERE username='" + username + "' AND password='" + password + "'"; ``` 上述代码存在SQL注入的风险,因为用户输入的username和password直接拼接到SQL语句中。攻击者可以通过在username或password中输入恶意的SQL语句,来执行非法操作。 防止SQL注入的方法是使用参数化查询或预编译语句,如下所示: ```java String query = "SELECT * FROM users WHERE username=? AND password=?"; PreparedStatement statement = connection.prepareStatement(query); statement.setString(1, username); statement.setString(2, password); ``` 通过使用参数化查询,将用户输入的数据作为参数传递给SQL语句,而不是直接拼接到SQL语句中,可以有效地防止SQL注入攻击

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值