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