随着Web2.0、网络社交等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中,越来越多的应用都架设在Web平台上。Web业务的迅速发展吸引了黑客们的强烈关注,接踵而至的就是Web安全威胁的凸显。黑客利用网站操作系统的漏洞和Web服务程序的SQL注入漏洞等得到Web服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严重的则是在网页中植入恶意代码,使得网站访问者受到侵害。这使得越来越多的用户关注应用层的安全问题,Web应用安全的关注度也逐渐升温。

------本文目录------
SQL注入:
XSS跨站脚本攻击
CSRF跨站请求伪造
任意文件读取:
任意代码执行:
越权访问:
敏感信息泄露:
越权访问
不安全的会话管理漏洞
用户名/口令暴力爆破:
弱口令漏洞:
撞库攻击:
注册模块设计缺陷:
短信接口设计缺陷:
URL重定向漏洞:
DDOS拒绝服务漏洞
不足的日志记录和监控:
业务逻辑漏洞:
网络安全通信协议:
一、SQL注入:
SQL注入(SQL Injection),是一个常见的发生于应用程序和数据库之间的web安全漏洞,由于在开发过程中的设计不当导致程序中忽略了检查,没有有效的过滤用户的输入,是攻击者可以向服务器提交不正常的访问数据(即恶意的SQL命令代码),程序在接收后错误的将攻击者的输入作为代码语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者静态构造的恶意代码,从而绕过验证机制和权限检查,达到取得隐藏数据或覆盖关键的参值,甚至执行数据库主机操作系统命令的目的。
SQL注入危害
数据库信息泄露:数据库中存放的用户的隐私信息的泄露
网页篡改:通过操作数据库对特定网页进行篡改
网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网页链接,进行挂马攻击。
数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员账户被篡改。
服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
破坏硬盘数据,瘫痪全系统。
例子:

应对方案:
过滤特殊字符:单引号、双引号、斜杠、反斜杠、冒号、空字符等的字符
过滤的对象:用户的输入;提交的URL请求中的参数部分;从cookie中得到的数据;部署方SQL注入系统或脚本。
严格限制web应用的数据库的操作权限,给用户提供仅能满足需求的最低权限,从而最大限度的减少注入攻击对数据库的危害。
对进入数据的特殊字符(‘ “ \ <> & *)进行转义处理(或编码转换)
不要直接拼接SQL语句,所有的查询语句建议使用数据库提供的参数化查询接口,使用参数化的语句而不是将用户输入的变量嵌入SQL语句中。
在应用发布之前建议使用专业的SQL注入检测工具进行检测,及时修补被检测出的SQL注入漏洞。
避免网站打印SQL错误信息,比如类型错误、字段不匹配等,可对异常信息做封装,给出友好提示,不直接打印堆栈信息到前端。
二、XSS跨站脚本攻击:
跨站脚本漏洞(Cross-site scripting , xss),是一种常见的web安全漏洞,由于web应用未对用户提交的数据做充分的检查过滤,允许用户在提交的数据中掺入HTML代码(最主要的是”>”,”<”),并将未经转义的恶意代码输出到第三方用户的浏览器解释执行,从而导致XSS漏洞。攻击成功后,攻击者可以得到更高的权限、私密网页内容、会话和cookie等内容。

XSS类型包括:
(1)非持久型跨站:即反射型跨站脚本漏洞,是目前最普遍的跨站类型。跨站代码一般存在于链接中,请求这样的链接时,跨站代码经过服务端反射回来,这类跨站的代码不存储到服务端(比如数据库中)。
(2)持久型跨站:这是危害最直接的跨站类型,跨站代码存储于服务端(比如数据库中)。常见情况是某用户在论坛发贴,如果论坛没有过滤用户输入的Javascript代码数据,就会导致其他浏览此贴的用户的浏览器会执行发贴人所嵌入的Javascript代码。
(3)DOM跨站(DOM XSS):是一种发生在客户端DOM(Document Object Model文档对象模型)中的跨站漏洞,很大原因是因为客户端脚本处理逻辑导致的安全问题。

应对方案:
1、与SQL注入防护的建议一样,假定所有输入都是可疑的,必须对所有输入中的script、iframe等字样进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。
2、不仅要验证数据的类型,还要验证其格式、长度、范围和内容。
3、针对请求参数以及用户可控数据进行防御,对输出进行编码处理。
4、在服务端对每一个输入进行合法性验证,只允许输入常见符号,字母以及数字。
5、对Cookie添加HttpOnly标识。
三、CSRF跨站请求伪造:
跨站请求伪造(Cross-site request forgery , CSRF),是一种常见的web安全漏洞,由于在web请求中重要操作的所有参数可被猜测到,攻击者可通过一些技术手段欺骗用户的浏览器去访问一个用户曾经认证过的网站,遂使攻击者可冒用用户的身份,进行恶意操作。

应对方案:
1、在表单中添加一个随机的数字或字母验证码,通过强制用户和应用进行交互,来有效地遏制CSRF攻击。
2、如果检查发现是非正常页面提交的请求(根据Referer进行判断),则极有可能是CSRF攻击。
3、在请求的参数里增加一个随机的token参数,且不可被猜测。
4、敏感的操作应该使用POST,而不是GET,以form表单的形式提交,可以避免token泄露。
四、任意文件读取:
任意文件读取漏洞(Unrestricted File Upload),是一种常见的web安全漏洞,因web程序提供的文件查看下载、附件下载等功能存在安全缺陷,导致通过修改该文件路径就能够查看和下载任意文件,这些文件包括:源代码文件、系统文件(/etc/passwd , C:/boot.ini等)、配置文件(config.php , /WEB-INF/web.xml , web.config等),造成网站敏感信息泄露,严重危害网站安全。
应对方案:
1、服务端过滤特殊字符。(…./、 ….\、 ….\)
2、判断用户输入的参数的格式是否合法。
3、指定文件类型白名单(如:jpg\gif\png\rar\zip\pdf\doc\xls\ppt等),禁止用户读取、下载白名单以外的文件。
4、指定下载路径,禁止用户读取、下载指定目录以外的文件。
五、任意代码执行:
任意代码执行漏洞(Unrestrcted Code Execution),是一种常见的web安全漏洞,由于web程序没有针对执行函数做过滤,当web程序应用在调用一些能将字符串转化成命令的函数(如PHP中的eval(),system(),exec())时,没有考虑做一些安全限制,导致可以通过构造特殊代码,执行操作系统命令,致使攻击者获取到网站服务器权限。
应对方案:
1、如果因使用的框架或中间件造成远程代码执行漏洞,需及时升级框架和中间件。
2、针对代码中可执行的特殊函数入口进行过滤,尝试对所有提交的可能执行命令的语句进行严格的检查或者对外部输入进行控制,系统命令执行函数,不允许传递外部参数。
3、所有的过滤步骤要在服务器进行,不仅要验证数据的类型,还要验证期格式、长度、范围和内容。
六、任意文件上传:
任意文件上传(Unrestricted File Upload),是一种常见的web安全漏洞,由于web应用程序在实现文件上传功能是对上传的文件缺少必要的检查,使得攻击者可上传任意文件。利用该漏洞,攻击者可以直接上传webshell(webShell 就是以asp\php\jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称之为一种网页后门)、病毒、恶意脚本等各种危险文件,可能导致服务器权限被直接获取,从而危及整个系统的安全运行。
应对方案:
1、对用户上传的文件后缀采用白名单进行限制,且重命名文件名。
2、限定文件上传目录,且该目录不允许解析动态脚本文件。
七、敏感信息泄露:
在最近几年,这是最常见的、最具影响力的攻击。这个领域最常见的漏洞是不对敏感信息进行加密。在数据加密过程中,常见的问题是不安全的密钥生成和管理以及使用弱加密算法、弱协议和弱密码。特别是使用弱的哈希算法来保护密码。

攻击者不是直接攻击密码,而是在传输过程中或从客户端(例如:浏览器)窃取密钥、发起中间人攻击,或从服务器端窃取明文数据。
应对方案:
1.应对敏感信息进行强加密再传输的操作,禁止一切敏感信息的明文传输,如:密码明文传输等。
2.对于配置文件的明文存储,可以使用 jasypt 进行密钥加密存储,增强安全性。
八、越权访问:
越权访问(Broken Access Control , BAC),是一种常见的web安全漏洞,这类漏洞是指应用在检查授权(Authorization)时存在纰漏,使得攻击者可以利用一些方式绕过权限检查,访问或者操作到原本无权访问的界面。在实际的代码安全审查中,这类漏洞往往很难通过工具进行自动化检测,因此在实际应用中危害很大。
应对方案:
1、将用户身份标识存在session中并验证,不能把用户身份标识以参数形式置于HTTP请求中,应该放在session中,并且仅通过session验证用户身份。
2、禁止从Cookie参数中去判断用户所属用户组,应该通过读取session会话来判断用户所属用户组。
3、文件下载时,禁止采用可被猜测的连续ID为参数进行文件下载,下载文件时也应判断当前用户是否有权限下载目标文件。
4、非普通用户操作页面严格做好权限管理,增删改查操作需要验证当前用户权限。
九、不安全的会话管理漏洞:
token值信息直接在GET请求的URL上,造成token值的直接暴露,容易被日志记录、搜索引擎等缓存,影响客户会话安全。
应对方案:
禁止token以GET方式传递,可从header中获取。
十、用户名/口令暴力爆破:
用户名/口令爆破(Brute-force attack),是一种常见的web安全漏洞,由于用户登录模块缺少必要的防护机制,使用网站的注册或登录接口,攻击者通过系统地组合所有可能性(例如登录时用到的账户名、密码等),并以穷举法尝试所有可能性破解用户的账户名、密码等敏感信息。
应对方案:
1、增强验证码机制,为防止验证码被破解,可以适当怎加验证码生成的强度,例如中文图形验证码。
2、用户名或密码输入错误均提示“用户名或密码错误”,防止黑客获取到注册用户的信息。
3、限制用户登录失败次数。
4、限制一定时间内IP登录失败次数。
5、限制一系列验证码的使用次数,用完即失效。
十一、弱口令漏洞:
弱口令(weak password),没有严格和准确的定义,通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令,如:生日、名字、简单的顺序数字or字符。

应对方案:
增强口令复杂度,验证码类可增加生成强度;密码类可增加密码的复杂度。
1、不使用空口令或系统缺省的口令,这些口令众所周之,为典型的弱口令。
2、口令长度不小于8个字符。
3、口令应该为以下四类字符的组合,大写字母(A-Z)、小写字母(a-z)、数字(0-9)和特殊字符。每类字符至少包含一个。如果某类字符只包含一个,那么该字符不应为首字符或尾字符。
十二、撞库攻击:
撞库攻击(Information Leakage Thinking Library Collision),是一种常见的针对web应用的攻击方式,为了方便记忆很多用户在不同网站使用的同一账号和密码,黑客通过收集网络已泄露的拖库信息,特别是注册用户和密码信息,生成对应的字典表,尝试批量自动登陆其它网站验证后,得到一系列可以登录的真实账户。
应对方案:
1、增强验证码机制,为防止验证码被破解,可以适当增加验证码生成的强度,例如中文图形验证码。
2、自动识别异常IP,对于异常IP,整理一个非常严格的恶意IP库,甚至禁止这些IP访问网站。
3、用户账户被撞开后的保护,对用户行为进行分析,如判断用户的登录IP是否在常用地区,如果不是则直接锁定账号,让用户通过收集、邮箱等手段来解锁。
十三、注册模块设计缺陷:
注册模块设计缺陷(Registration module design flaws),是一种常见的web安全漏洞,网站注册模块的设计缺陷将导致一下几点安全漏洞:

