网站安全
包括常见的xss攻击、CSRF攻击等等
1 sql注入:窃取数据库内容
2 XSS攻击:窃取前端的cookie内容
3 密码加密:保障用户信息安全
1 sql注入攻击:
比如登陆接口,执行的命令是:
select username,realname from users where username='zhangsan' and password=123
sql注入攻击,在username中输入了注释的命令
select username,realname from users where username='zhangsan' -- ' and password=123
所以后面的密码部分就被注释掉了
使用mysql的 escape 提供的转义:会在输入的内容中对引号增加/转义
select username,realname from users where username='zhangsan/' -- ' and password=123
网站如:
root ‘ — ‘
具体步骤:
1 db/mysql.js
module.exports = { exec, escape: mysql.escape }
const { exec,escape } = require('../db/mysql'); //登陆 const confirmLogin = async(username,blogpassword)=>{ username = escape(username); //增加这里 blogpassword = escape(blogpassword); //增加这里 try{ let sql = `select * from users where userName=${username} and blogpassword=${blogpassword}`; //这里删除单引号 let data = await exec(sql); if(data.length>0){ return data[0]; }else{ return false; } }catch(err){ return false; } }
XSS攻击
根据攻击的来源,XSS 攻击可分为存储型、反射型和 DOM 型三种。
反射型 XSS 跟存储型 XSS 的区别是:存储型 XSS 的恶意代码存在数据库里,反射型 XSS 的恶意代码存在 URL 里。
- 示例1:
请求url:http://xxx/search?keyword="><script>alert('XSS');</script>
如果代码中会把url后的keyword放在页面中渲染,则会执行<script>alert('XSS');</script>
解决办法:
使用转义字符:
- 示例2:
http://xxx/?redirect_to=javascript:alert('XSS')
如果代码中有用到 redirect_to 来渲染跳转链接:
<a href="<%=%20escapeHTML(getParameter("redirect_to")) %>">跳转...</a>
则会变成:
<a href="javascript:alert('XSS')">跳转...</a>
在点击跳转链接的时候,执行恶意代码。
// 根据项目情况进行过滤,禁止掉 "javascript:" 链接、非法 scheme 等 // 也就是说,url必须是以http协议头开始,这样才能是链接进行跳转,避免了是恶意代码。 allowSchemes = ["http", "https"]; valid = isValid(getParameter("redirect_to"), allowSchemes);
做了 HTML 转义,并不等于高枕无忧。
对于链接跳转,如 <a href="xxx" 或 location.href="xxx",要检验其内容,禁止以 javascript: 开头的链接,和其他非法的 scheme
。
DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。
安装专业的转义库
npm i xss -S
const xss = require('xss'); //... const title = xss(blogData.title)
这样 <script>alert(1)</script>
转成 <script>alert(1)</script>
CSRF攻击
CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
CSRF 主要的两个特点:
- CSRF(通常)发生在第三方域名。
- CSRF攻击者不能获取到Cookie等信息,只是使用。
预防方法:
同源验证是一个相对简单的防范方法,能够防范绝大多数的CSRF攻击。
Origin Header
Referer Header
而CSRF攻击之所以能够成功,是因为服务器误把攻击者发送的请求当成了用户自己的请求。那么我们可以要求所有的用户请求都携带一个CSRF攻击者无法获取到的Token。服务器通过校验请求是否携带正确的Token,来把正常的请求和攻击的请求区分开,也可以防范CSRF的攻击。
原文链接:https://www.cnblogs.com/xiaozhumaopao/p/12813214.html
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/17615