web常见的攻击方式有哪些?如何防御

Web攻击(WebAttack)是针对用户上网行为或网站服务器等设备进行攻击的行为

如植入恶意代码,修改网站权限,获取网站用户隐私信息等等

Web应用程序的安全性是任何基于Web业务的重要组成部分

我们常见的Web攻击方式有

  • XSS (Cross Site Scripting) 跨站脚本攻击

XSS 即(Cross Site Scripting)中文名称为:跨站脚本攻击。XSS的重点不在于跨站点,而在于脚本的执行。
​
XSS的原理是:
    恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。
    XSS攻击最主要有如下分类:反射型、存储型、及 DOM-based型。 反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击
    
    (1)反射型XSS的攻击步骤如下:
    1. 攻击者在url后面的参数中加入恶意攻击代码。
    2. 当用户打开带有恶意代码的URL的时候,网站服务端将恶意代码从URL中取出,拼接在html中并且返回给浏览器端。
    3. 用户浏览器接收到响应后执行解析,其中的恶意代码也会被执行到。
    4. 攻击者通过恶意代码来窃取到用户数据并发送到攻击者的网站。攻击者会获取到比如cookie等信息,然后使用该信息来冒充合法用户的行为,调用目标网站接口执行攻击等操作。
    (2)存储型XSS的攻击步骤如下:
    1. 攻击者将恶意代码提交到目标网站数据库中。
    2. 用户打开目标网站时,网站服务器将恶意代码从数据库中取出,然后拼接到html中返回给浏览器中。
    3. 用户浏览器接收到响应后解析执行,那么其中的恶意代码也会被执行。
    4. 那么恶意代码执行后,就能获取到用户数据,比如上面的cookie等信息,那么把该cookie发送到攻击者网站中,那么攻击者拿到该cookie然后会冒充该用户的行为,调用目标网站接口等违法操作。
​
​
(3)DOM型XSS的攻击步骤如下:
    1. 攻击者构造出特殊的URL、在其中可能包含恶意代码。
    2. 用户打开带有恶意代码的URL。
    3. 用户浏览器收到响应后解析执行。前端使用js取出url中的恶意代码并执行。
    4. 执行时,恶意代码窃取用户数据并发送到攻击者的网站中,那么攻击者网站拿到这些数据去冒充用户的行为操作。调用目标网站接口执行攻击者一些操作。
​
    DOM XSS 是基于文档对象模型的XSS。一般有如下DOM操作:
    1. 使用document.write直接输出数据。
    2. 使用innerHTML直接输出数据。
    3. 使用location、location.href、location.replace、iframe.src、document.referer、window.name等这些。
  • CSRF(Cross-site request forgery)跨站请求伪造

    CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求

    利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目

    一个典型的CSRF攻击有着如下的流程:

    • 受害者登录a.com,并保留了登录凭证(Cookie)

    • 攻击者引诱受害者访问了b.com

    • b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie

    • a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求

    • a.com以受害者的名义执行了act=xx

    • 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作

    CSRF的特点

    • 攻击一般发起在第三方网站,而不是被攻击的网站。被攻击的网站无法防止攻击发生

    • 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作;而不是直接窃取数据

    • 整个过程攻击者并不能获取到受害者的登录凭证,仅仅是“冒用”

    • 跨站请求可以用各种方式:图片URL、超链接、CORS、Form提交等等。部分请求方式可以直接嵌入在第三方论坛、文章中,难以进行追踪

  • SQL注入攻击

SQL注入是通过客户端的输入把SQL命令注入到一个应用的数据库中,从而执行恶意的SQL语句。
什么意思呢?我们来打个比方:我们有一个登录框,需要输入用户名和密码对吧,然后我们的密码输入 'or '123' = '123 这样的。
我们在查询用户名和密码是否正确的时候,本来执行的sql语句是:select * from user where username = '' and password = ''. 这样的sql语句,现在我们输入密码是如上这样的,然后我们会通过参数进行拼接,拼接后的sql语句就是:
select * from user where username = '' and password = ' ' or '123' = '123 '; 这样的了,那么会有一个or语句,只要这两个有一个是正确的话,就条件成立,因此 123 = 123 是成立的。因此验证就会被跳过。这只是一个简单的列子,比如还有密码比如是这样的:'; drop table user;, 这样的话,那么sql命令就变成了:
select * from user where username = '' and password = ''; drop table user;' , 那么这个时候我们会把user表直接删除了。
​
sql被攻击的原因是:sql语句伪造参数,然后对参数进行拼接后形成xss攻击的sql语句。最后会导致数据库被攻击了。
​
防范的方法:
1. 我们可以使用预编译语句(PreparedStatement,这样的话即使我们使用sql语句伪造成参数,到了服务端的时候,这个伪造sql语句的参数也只是简单的字符,并不能起到攻击的作用。
2. 数据库中密码不应明文存储的,可以对密码使用md5进行加密
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
当然!以下是一些常见的测试面试问题及其可能的答案: 1. 什么是软件测试? 答:软件测试是评估软件质量和功能的过程,通过执行程序来发现潜在的缺陷和问题。它确保软件满足预期的要求和标准。 2. 你如何制定测试计划和测试策略? 答:制定测试计划和测试策略需要考虑项目的目标、需求、时间和资源限制。测试计划包括测试范围、资源分配、进度安排等。测试策略则确定测试方法、技术和工具的选择。 3. 你如何选择测试用例? 答:选择测试用例需要考虑功能覆盖、边界值、异常情况等因素。常用的方法包括等价类划分、边界值分析、决策表等。 4. 你如何执行手动测试? 答:手动测试包括理解需求、准备测试环境、执行测试用例、记录结果和缺陷等步骤。重点是确保按照规范和预期结果进行测试。 5. 你如何管理缺陷? 答:管理缺陷包括缺陷记录、分类、优先级评估、追踪和验证等。常用的工具包括缺陷管理系统,如JIRA、Bugzilla等。 6. 你如何进行性能测试? 答:性能测试包括负载测试、压力测试、稳定性测试等。需要设置性能指标、模拟用户行为、监测系统资源等来评估软件的性能。 这只是一些常见的测试面试问题和答案,具体的问题还取决于公司和职位要求。希望这些能帮到你!如有其他问题,请随时问我。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值