web常见六大安全问题

常见安全问题

  1. xss
  2. csrf
  3. 点击劫持
  4. URL跳转漏洞
  5. SQL注入
  6. OS命令注入攻击

一、xss 跨站脚本攻击

  • 原理:往web页面插入可执行的网页脚本代码
  • 防御方式:

1、设置白名单csp

  • 方式一:设置HTTP Header中的Content-Security-Policy
  • 方式二:设置meta标签

Content-Security-Policy: default-src “self” // 只允许加载本站资源
Content-Security-Policy: img-src https://* // 只允许加载https协议图片
Content-Security-Policy: child-src “none” // 允许加载任何来源框架

<meta http-equiv = "Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:"/>

2、用户输入值限制

  • 将输入输出的内容进行转义,对引号、尖括号、斜杠进行转义
  • 转义方法encode()方法

3、HttpOnly cookie

  • 设置cookie时,将其属性设为HttpOnly,可避免该网页cookie被恶意窃取,保护用户cookie信息

二、CSRF 跨站请求伪造

  • 原理:利用用户已登录的身份,在用户毫不知情的情况下,以用户名义完成非法操作
  • 防御方式
    1、可以对cookie设置,sameSite属性,表示cookie不随跨域请求发送(兼容性不好)
    2、通过Referer限制Referer信息,告诉服务器是从哪个页面链接过来的
    3、加一个token值用于验证,发请求时在http中加一个随机token
    4、验证码操作(体验不好)

三、点击劫持

  • 原理:通过iframe透明化,漏出一个按钮诱惑用户点击
  • 防御:
    1、设置http响应头 X-FRAME-OPTIONS 防御iframe点击劫持
    参数:
    DENY,表示页面不允许通过iframe的方式展示
    SAMEORIGIN,表示页面可以在相同域名下通过iframe展示
    ALLOW-FROM,表示页面可以在指定来源的iframe中展示
    2、通过js方法来判断,来隐藏iframe显示的页面
<script>
	if (self == top) {
		var style = document.getElementById('click-jack')
		document.body.remove(style)
	} else {
		top.location = self.location
	}
</script>

四、url跳转漏洞

  • 借助未验证的URL跳转,将应用程序引导到不安全的第三方区域,从而导致的安全问题
  • 防御方式
    1、referer的限制
    如果确定传递URL参数进入的来源,我们可以通过该方式实现安全限制,保证url的有效性,避免恶意用户自己生成跳转链接
    2、加入有效性验证token

五、SQL注入

  • 本质:数据和代码为未分离,即数据当做了代码来执行
  • 影响:获取数据库信息,管理员后台用户名和密码,读取服务器敏感文件等,甚至修改数据库内容
  • 防御:
    1、严格限制web应用的数据库操作权限,给此用户提供仅仅能够满足其工作的最低权限,从而最大限度减少注入攻击对数据库的危害
    2、后端代码检查输入的数据是否符合预期,严格限制变量类型,可以使用正则表达式进行一些匹配处理
    3、对进入数据库的特殊字符(’, ",空格, <, >, &, ;等)做转义处理或者编码转换,比如lodash escape
    4、查询语句建议使用数据库提供的参数化查询接口,参数化的语句使用参数,而不是将用户输入变量嵌入到SQL语句中,即不要直接拼接SQL语句
    例:nodejs中的mysqljs库的query方法中?占位参数

六、OS命令注入攻击

  • OS命令注入攻击指通过web应用,执行非法的操作系统命令达到攻击目的
  • 防御
    1、后端对前端提交内容进行规则限制,比如正则表达式
    2、在调用系统命令前,对所有传入参数进行命令行参数转义过滤
    3、不要直接拼接命令,借助工具拼接、转义预处理
    例:nodejs的shell-escape npm 包
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值