Web安全
sql注入
sql注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,后台执行SQL语句时直接把前端传入的字段拿来做SQL查询。
防御:
- 永远不要信任用户的输入。
- 永远不要使用动态拼装sql
- 不要把机密信息直接存放
XSS 跨站脚本攻击
( Cross Site Scripting ) XSS 是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。 从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
防御:
- 转义字符 对用户输入数据进行HTML Entity编码(使用转义字符) "&<>空格
- CSP 内容安全策略 建立白名单,开发者明确告诉浏览器哪些外部资源可以加载和执行
XSS攻击的危害:
- 获取页面数据 cookie
- 劫持前端逻辑
- 发送请求
- 偷取网站任意数据 用户资料 用户密码和登陆态
- 欺骗用户
分类
1.反射型 通过url参数直接注入。
发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务端解析后返回,XSS代码随响应内容一起传回给浏览器,最后浏览器执行XSS代码。这个过程像一次反射,故叫做反射型XSS。
举个例子 一个链接,里面的query字段中包含一个script标签,这个标签的src就是恶意代码,用户点击了这个链接后会先向服务器发送请求,服务器返回时也携带了这个XSS代码,然后浏览器将查询的结果写入Html,这时恶意代码就被执行了。
并不是在url中没有包含script标签的网址都是安全的,可以使用短网址来让网址变得很短。
2.存储型 存储型XSS会被保存到数据库,在其他用户访问(前端)到这条数据时,这个代码会在访问用户的浏览器端执行。
举个例子 比如攻击者在一篇文章的评论中写入了script标签,这个评论被保存数据库,当其他用户看到这篇文章时就会执行这个脚本。
CSRF 跨站请求伪造
(Cross Site Request Forgy) 打开同一浏览器时其他的网站对本网站造成的影响。原理就是攻击者构造出一个后端请求地址,诱导用户点击或者通过某些途径自动发起请求。
如果用户是在登录状态下的话,后端就以为是用户在操作,从而进行相应的逻辑
举个例子,用户同时打开了A网站和钓鱼网站。 假设A网站中有一个通过 GET 请求提交用户评论的接口,那么攻击者就可以在钓鱼网站中加入一个图片,图片的地址就是评论接口。
CSRF攻击原理
用户登录A网站
A网站确认身份(给客户端cookie)
B网站页面向A网站发起请求(带上A网站身份)
CSRF防御
- Get 请求不对数据进行修改
- 不让第三方网站访问到用户 Cookie
- 阻止第三方网站请求接口
- 请求时附带验证信息,比如验证码或者 Token
点击劫持
点击劫持是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过 iframe 嵌套的方式嵌入自己的网页中,并将 iframe 设置为透明,在页面中透出一个按钮诱导用户点击。
防御
- X-FRAME-OPTIONS
- JS 防御
中间人攻击
中间人攻击是攻击方同时与服务端和客户端建立起了连接,并让对方认为连接是安全的,但是实际上整个通信过程都被攻击者控制了。攻击者不仅能获得双方的通信信息,还能修改通信信息。
通常来说不建议使用公共的 Wi-Fi,因为很可能就会发生中间人攻击的情况。如果你在通信的过程中涉及到了某些敏感信息,就完全暴露给攻击方了。
当然防御中间人攻击其实并不难,只需要增加一个安全通道来传输信息。HTTPS 就可以用来防御中间人攻击,但是并不是说使用了 HTTPS 就可以高枕无忧了,因为如果你没有完全关闭 HTTP 访问的话,攻击方可以通过某些方式将 HTTPS 降级为 HTTP 从而实现中间人攻击。
同源政策及其规避方法
- 同源要求
- 协议相同
- 域名相同
- 端口相同
限制范围
- cookie、localstorage和 indexDB无法读取
- DOM 无法获得
- Ajax 请求不能发送