web安全性之XSS,CSRF,SQL注入

web安全性主要侧重于对web服务器的攻击,这种攻击有 常见的sql注入,跨站脚本攻击(xss),跨站请求伪造(csrf)

sql注入

  • 基本概念

其本质就是,项目中把用户数据代码进行了拼接,形成了可执行的sql语句

攻击者把sql命令插入到web表单的输入或者页面请求的查询字符串(url),欺骗服务器执行恶意的sql命令

攻击者在web页面预先定义好的sql语句结尾加上额外的sql语句元素,欺骗数据库服务器执行非授权的查询,篡改命令

  • 原理

以把sql插入到web表单的输入为例:

假设的登录查询

  SELECT * FROM  users  WHERE login = 'victor' AND password = '123

  Sever端代码

  String sql = "SELECT * FROM users WHERE login = '" + formusr + "' AND password = '" + formpwd + "'";

  输入字符

  formusr = ' or 1=1

  formpwd = anything

  实际的查询代码

  SELECT * FROM users WHERE username = ' ' or 1=1  AND password = 'anything'  
  • 发现可以进行sql注入的特点:

如何知道某个网站是否能被sql注入是一个很关键的问题

在网上看到一个方法,主要是利用带有查询字符串的url,故意输错一个url中的参数,如果服务器返回的错误结果显示是sql服务器的参数没有被正确编码,则表示这个url是直接触及数据库服务器的,那么就可以进行sql注入了。

但我感觉,像这种直接把sql报错暴露出来的网站,那就是很低级的网站了,而且就是分明想让别人攻击。

  • 防范sql注入的方法
    首先,可能现在大部分的后台开发,在操作数据时都会使用ORM(ORM,Object-Relationship Mapping,即对象关系映射,是把对象模型表示的对象映射到基于sql的关系模型数据库结构里去),但ORM并不意味着就避免了sql注入危害,具体orm如何被sql注入所影响,我还没有深入的了解。
  • 参数化查询方法
    这个方法说白了就是利用占位符和参数,对在sql中需要填数据的位置进行限定。
    目前的主流ORM框架都支持并推荐这种方式进行持久层封装。

以以下的一条数据库查询语句为例

例:           SELECT * FROM myTable WHERE myID = @myID

    INSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4)或者INSERT INTO myTable (c1, c2, c3, c4) VALUES(?,?,?,?)

跨站脚本攻击(XSS,Cross Site Scripting,避免和css重名)

  • 特征

代码注入

就是恶意用户将代码注入到网页上,其他用户在观看网页时就会收到被注入代码的影响。

这类代码主要是html和js

  • 目的:

主要还是窃取用户数据信息或者破坏

  • 攻击举例:
    如果在论坛中发布一段恶意的js代码就是脚本注入,如果这个代码内容有请求外部服务器,就是xss
  • 操作验证:

我在segmenfault网站的一个页面上留言,内容是一段js脚本,如图所示,发表评论后的确可以看到效果
在这里插入图片描述
留言页面https://segmentfault.com/a/1190000007059639?utm_source=tag-newest

  • 防范方法:

输入过滤:

即对用户输入的数据进行过滤操作,过滤其中的“<”,">","/",“”script”等脚本关键字,或者对输入数据长度进行限制等等。着重对与用户交互的每一处都进行检测和xss过滤,以有效的阻止xss攻击
输出编码:
在用户输入数据到web应用程序中时,先对数据进行编码,利用htmlEncoder等工具进行编码,然后再把数据输出到页面中,一般可以把输入编码为普通文字,这样以来脚本语言就不会成为html代码的一部分
Cookie防盗
利用xss,攻击者可以窃取用户的cookie,所以可以对cookie中的重要信息进行MD5加密,以防止xss攻击。‘’

跨站请求伪造(Cross-site request forgery)

在用户不知情的情况下,冒充用户发送请求,伪造请求,在当前已登录的网站上执行恶意操作,比如恶意发帖、修改密码等

  • 防范方法:

验证码方式,
在一些关键操作上要求输入验证码,防止伪请求

token方式,
向服务器传参数时带上token,token是服务器和用户共同持有的一个随机值。用户提交表单时带上token值,服务器就可以验证表单和session中的token是否一致

XSS和CSRF比较

简单来讲

xss是在用户请求到的html中加入恶意代码,使得用户被恶意代码影响
csrf是盗用浏览器中的登录信息,冒充用户去执行操作

xss主要是对用户数据没有进行转义,使得用户数据影响到了项目代码
csrf主要是http接口在调用上没有进行防范,对于恶意的调用也给与了授权。

xss更侧重代码实现
csrf更侧重结果,即只要是恶意或者冒牌的http请求,就是csrf

通常利用xss实现csrf,具体而言就是利用xss获得用户的cookie,然后冒充用户进行登录,发起恶意的http请求,比如删帖,改密码等

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
XSS(跨站脚本攻击),CSRF(跨站请求伪造)和SQL注入是常见的Web安全漏洞。 XSS攻击是指攻击者通过在网页中注入恶意脚本,使得用户在浏览网页时执行这些脚本,从而获取用户的敏感信息或者进行其他恶意操作。为了防止XSS攻击,可以对用户输入的数据进行转义,比如将特殊字符进行转义,限制用户输入的数据类型,过滤掉可能包含恶意脚本的标签等措施。\[3\] CSRF攻击是指攻击者利用用户已经登录的身份,在用户不知情的情况下发送恶意请求,从而执行一些非法操作。为了防止CSRF攻击,可以使用CSRF令牌来验证请求的合法性,每次用户登录时都会轮换CSRF令牌,确保每个请求都携带有效的令牌。\[2\] SQL注入是指攻击者通过在Web表单递交或输入域名或页面请求的查询字符串中插入恶意的SQL命令,从而实现未授权访问数据库或者篡改数据库的操作。为了防止SQL注入,可以对用户输入的参数进行校验和过滤,使用参数化语句而不是拼接字符串的方式生成SQL语句,限制数据库连接的权限,检查数据存储类型等措施。\[1\] 综上所述,为了防止XSSCSRFSQL注入攻击,需要对用户输入的数据进行校验和过滤,使用安全的编程框架和技术,限制权限,加密重要信息等措施。 #### 引用[.reference_title] - *1* *3* [详解XSS攻击、SQL注入攻击、CSRF攻击](https://blog.csdn.net/zj420964597/article/details/110179161)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [XSSCSRF、以及SQL注入](https://blog.csdn.net/weixin_34226182/article/details/94047120)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值