1.SQL 注入

SQL 注入,一般是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。

SQL 注入示例

在登录界面,后端会根据用户输入的用户(username)和密码(password),到 MySQL 数据库中去验证用户的身份。

用户输入用户名【cedric】 , 密码【123456】,在后端处理时,会进行如下 sql 语句拼接,当验证用户名和密码成功后,即成功登录。

// 用户名为 cedric , 密码为 123456
select username from users where username='cedric' and password='123456';

但是,如果用户在输入框恶意输入用户名【cedric' -- 】(注意最后面有个空格)和随意一个错误的密码【111】,在后端处理时,会进行如下 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';

SQL 注入预防

Node 环境下,使用 mysql 的 escape 函数处理输入内容,就能将参数中的特殊字符进行转义。

在所有输入 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 查询
···
}

2. XSS 攻击

XSS 是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码(代码包括HTML代码和客户端脚本)植入到提供给其它用户使用的页面中。

XSS 攻击示例

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 了。

XSS 攻击预防

对用户输入的数据进行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>, 就会被转换为下面的语句并存入数据库:

&lt;script&gt; alert(1) &lt;/script&gt;,已达到无法执行 <script> 的目的。

最新文章

  1. Android中开发工具Android Studio修改created用户(windows环境)
  2. Android动态加载学习笔记(一)
  3. 微信内置浏览器的JS API
  4. 高级Java研发工程师面试题总结
  5. 移动H5页面,keyup事件不好使用处理解决
  6. JSP 九个隐含JSP对象
  7. NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX
  8. [HDOJ2795]Billboard(线段树,单点更新)
  9. android 中 系统日期时间的获取
  10. 2016022610 - redis列表命令集合
  11. cobbler常见问题
  12. java.util.Random 类的 nextInt(int num )
  13. unity3d脚本
  14. shell文字过滤程序(十一):paste命令
  15. style.left offsetLeft offsetwidth clientLeft clientWidth scrollLeft scrollWidth
  16. 团队Scrum冲刺阶段-Day 6
  17. UDF、UDAF、UDTF函数编写
  18. jvm理论-字节码指令
  19. poj1860
  20. EClipse for PHP 中文乱码问题

热门文章

  1. android细节之android.intent.category.DEFAULT的使用
  2. 对数损失函数logloss详解和python代码
  3. 【C++】C++中重载运算符和类型转换
  4. WebRTC搭建前端视频聊天室——信令篇
  5. redis 链接
  6. Python3基础 __file__ 查询模块的完整路径
  7. spring与springMVC的父子容器关系
  8. (十)redis源码解读
  9. ASP.NET Core DotNetCore 开源GitServer 实现自己的GitHub
  10. [数据结构 - 第3章] 线性表之顺序表(C++实现)