SQL 注入,通常是经过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。前端
在登陆界面,后端会根据用户输入的用户(username)和密码(password),到 MySQL 数据库中去验证用户的身份。mysql
用户输入用户名【cedric】 , 密码【123456】,在后端处理时,会进行以下 sql 语句拼接,当验证用户名和密码成功后,即成功登陆。web
// 用户名为 cedric , 密码为 123456 select username from users where username='cedric' and password='123456';
可是,若是用户在输入框恶意输入用户名【cedric' -- 】(注意最后面有个空格)和随意一个错误的密码【111】,在后端处理时,会进行以下 sql 语句拼接,也会成功登陆。sql
// 符号 ‘--’ 后面的语句至关于被注释了 select username from users where username='cedric -- ' and password='111';
或者,若是用户在输入框恶意输入用户名【cedric';delete from users; -- 】和随意一个错误的密码【111】,在后端处理时,会进行以下 sql 语句拼接,则结果会致使数据库中全部用户被删除。数据库
// 符号 ‘--’ 后面的语句至关于被注释了 select username from users where username='cedric';delete from users; -- ' and password='111';
Node 环境下,使用 mysql 的 escape 函数处理输入内容,就能将参数中的特殊字符进行转义。npm
在全部输入 sql 语句的地方,用 escape 函数处理一下便可, 例如:后端
const login = (username, password) => { // 预防 sql 注入 username = escape(username) password = escape(password) const sql = ` select username from users where username=${username} and password=${password}; ` // 而后按上面语句执行 sql 查询 ··· }
XSS 是一种在web应用中的计算机安全漏洞,它容许恶意web用户将代码(代码包括HTML代码和客户端脚本)植入到提供给其它用户使用的页面中。安全
xss攻击主要是针对表单的 input/textarea 文本框发起的,好比在文本框中输入:服务器
<script> alert(1) </script>
若是前端不进行过滤直接提交到后端(好比Node ),而服务端也没有进行过滤直接写入数据库库,那么在下一次(或其余用户)进入页面时,就会执行alert(1)
, 页面弹出 1 。cookie
或者,文本框中恶意输入:
<script> alert(document.cookie) </script>
就能够获取用户 cookie 了。
文本框中恶意输入:
<script>window.location.href="www.abc.com";</script>
致使,所访问的网站就会自动跳转到 www.abc.com 了。
对用户输入的数据进行HTML Entity编码, 也就是对<script>
、<a>
等标签的< >
进行转换,而后再保存到后台数据库。
Node环境下,安装:
$ npm install xss
而后修改:
const xss = require('xss') const inputValue = content // 未进行 xss 防护 const inputValue = xss(content) // 已进行 xss 防护
而后若是在 input 输入框 恶意输入 <script> alert(1) </script>
, 就会被转换为下面的语句并存入数据库:
<script> alert(1) </script>
,已达到没法执行 <script>
的目的。