1.SQL(数据注入攻击)是什么
SQL注入就是在URL、表单域,或者数据包输入的参数中插入SQL命令,如果Web服务器在收到SQL语句之后不进行进一步校验直接传给数据库执行SQL命令,会导致插入的SQL被执行,获取数据库的信息,发生SQL注入攻击。
解决方案:
- 始终不相信用户的输入,对输入内容进行验证,通过限制长度或单引号、双引号进行转换。
- 始终不要使用动态拼接SQL,可使用参数化的SQL或者在存储过程中进行数据查询和存储。
- 不要使用管理员权限进行数据库的连接,为每个应用进行单独的连接和有权限的连接。
- 不要把机密信息进行明文存储,应通过加密或散扩列处理密码和敏感信息。
2.XSS(跨站脚本协议)是什么
通过某种方式向你的代码中注入js代码,最常见的是通过表单请求提交。因为注入的代码于用户提交的代码具有同等的权限,因此可以访问到用户的数据信息,也可以进行一些数据的上报。因此,危害是很大的。
解决方案:
-
将&替换为&,>替换为>,<替换为<,“替换为", ’替换为’,/替换为/
-
对cookie进行加强控制,设置http-only,这样js就无法获取到cookie的内容了。
-
对于富文本内容,可以通过建立白名单(CSP 本质上就是建立白名单),开发者明确告诉浏览器哪些外部资源可以加载和执行。我们只需要配置规则,如何拦截是由浏览器自己实现的。我们可以通过这种方式来尽量减少 XSS 攻击。
通常有两种方式来开启 CSP
一种是设置 HTTP 首部中的 Content-Security-Policy
一种是设置 meta 标签的方式
3.CSRF(跨站请求伪造)攻击是什么
攻击者通过诱导用户登入第三方网站,对受害者网站进行攻击,如果受害者网站有用户的登录状态,攻击者可以通过绕过服务器的登录验证直接对服务器的数据进行操作。
原理:通过cookie的同源策略,同域名的请求不需要进行用户验证。
解决方案:
- 将get请求替换为post请求,get只作为读操作。
- 对于需要验证的操作,增加其他验证操作,比如验证码,指纹,密码等。
- token时效性,在进行某个操作时,发送一个token时效,在后续操作时,验证token是否相同。
4.网页嵌套攻击
通过iframe嵌套网站的页面,然后设计嵌套透明化,当用户点击页面时,触发自己的事件。
解决方案:
- hander设置不可嵌套,X-FRAME-OPTIONS是一个HTTP响应头,可以预防iframe嵌套的点击劫持攻击。
- 通过js判断是否为顶层窗口即可
if(top.location != self.location){
top.location.href = window.location.href;
}else alert("是顶层窗口");
}
5.MITM(中间人攻击)
即受入侵者控制的一台计算机虚拟的放置在由网络连接的两台通信计算机之间,作为客户端与服务器之间的桥梁,处理双方的数据,整个会话的内容几乎都是被入侵者控制的。
中间人攻击过程:
服务器向客户端发送公钥
攻击者截取公钥,保留在自己手上
攻击者伪造一个自己的公钥,发送给客户端
客户端收到公钥后,生成加密哈希值发送给服务器
攻击者截获哈希值,用自己的私钥进行解密获得真密钥
同时生成假的哈希值发送给服务器
服务器用私钥解密获得假密钥
服务器用假密钥加密传递信息。
解决方案:升级HTTPS方案。