常见漏洞及其解决方案1、SQL注入漏洞漏洞描述:SQL注入被广泛用于非法入侵网站服务器,获取网站控制权。
它是应用层上的一种安全漏洞。
通常在设计存在缺陷的程序中,对用户输入的数据没有做好过滤,导致恶意用户可以构造一些SQL语句让服务器去执行,从而导致数据库中的数据被窃取,篡改,删除,以及进一步导致服务器被入侵等危害。
SQL注入的攻击方式多种多样,较常见的一种方式是提前终止原SQL语句,然后追加一个新的SQL命令。
为了使整个构造的字符串符合SQL语句语法,攻击者常用注释标记如“-- ”(注意空格)来终止后面的SQL字符串。
执行时,此后的文本将被忽略。
如某个网站的登录验证SQL查询代码为strSQL = "SELECT * FROM users WHERE name = ‘”+ userName + “’and pw =’”+ passWord +”’”,其中userName 和passWord是用户输入的参数值,用户可以输入任何的字符串。
如果用户输入的userName=admin’-- ,passWord为空,则整个SQL语句变为SELECT * FROM users WHERE name=’admin’-- ‘and pw=’’,等价于SELECT * FROM users WHERE name=’admin’,将绕过对密码的验证,直接获得以admin的身份登录系统。
漏洞危害:•数据库信息泄漏,例如个人机密数据,帐户数据,密码等。
•删除硬盘数据,破坏整个系统的运行。
•数据库服务器被攻击,系统管理员帐户被窜改(例如ALTER LOGIN sa WITH PASSWORD='xxxxxx')。
•取得系统较高权限后,可以篡改网页以及进行网站挂马。
•经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统,植入后门程序(例如xp_cmdshell "net stop iisadmin"可停止服务器的IIS服务)。
解决方案:•输入过滤,对于整数,判断变量是否符合[0-9]的值;其他限定值,也可以进行合法性校验;对于字符串,对SQL语句特殊字符进行转义(单引号转成两个单引号,双引号转成两个双引号)。
MySQL也有类似的转义函数mysql_escape_string和mysql_real_ escape_string。
Asp的过滤参考此页面/nazim/archive/ 2008/04 /28/ filtering-sql-injection-from-classic-asp.aspx•在设计应用程序时,完全使用参数化查询(Parameterized Query)来设计数据访问功能。
•使用其他更安全的方式连接SQL数据库。
例如已修正过SQL注入问题的数据库连接组件,例如的SqlDataSource对象或是LINQ to SQL,安全API库如ESAPI。
•使用SQL防注入系统。
•严格限制数据库操作的权限。
普通用户与系统管理员用户的权限要有严格的区分。
建立专门的账户,同时加以权限限制,满足应用的需求即可。
2、HTTPHOST头部攻击漏洞描述:一般通用web程序是如果想知道网站域名不是一件简单的事情,如果用在php里是_SERVER["HTTP_HOST"]),而这个header很多情况下是靠不住的。
而很多应用是直接把这个值不做html编码便输出到了页面中,比如:<linkhref="http://_SERVER['HOST']"(Joomla)还有的地方还包含有secretkey和token,<ahref="http://_SERVER['HOST']?token=topsecret">(Django,Gallery,others)这样处理问题一般会很容易遭遇到两种常见的攻击:缓存污染和密码重置。
缓存污染是指攻击者通过控制一个缓存系统来将一个恶意站点的页面返回给用户。
密码重置这种攻击主要是因为发送给用户的内容是可以污染的,也就是说可以间接的劫持邮件发送内容。
参考:/papers/13833、管理后台漏洞描述:由于http请求的特点,hostheader的值其实是不可信的。
唯一可信的只有SERVER_NAME,这个在Apache和Nginx里可以通过设置一个虚拟机来记录所有的非法hostheader。
在Nginx里还可以通过指定一个SERVER_NAME名单,Apache也可以通过指定一个SERVER_NAME名单并开启UseCanonicalName选项。
建议两种方法同时使用。
网站后台管理系统主要是用于对网站前台的信息管理,如文字、图片、影音、和其他日常使用文件的发布、更新、删除等操作,同时也包括会员信息、订单信息、访客信息的统计和管理。
将管理后台暴露在外网,存在一定的安全风险4、用户认证信息明文传输漏洞描述:尽量将管理后台放在内网。
并做好用户的访问权限控制,保证登录密码的复杂性。
用户认证信息不是通过https加密信道传输,导致用户名密码等敏感信息泄露。
解决方案:以https方式传输此检测误报可能性较大,需要人工验证。
5、可能存在CSRF攻击漏洞描述:CSRF是CrossSiteRequestForgery的缩写(也缩写为XSRF),直译过来就是跨站请求伪造的意思,也就是在用户会话下对某个CGI做一些GET/POST的事情——这些事情用户未必知道和愿意做,你可以把它想做HTTP会话劫持。
解决方案:在Web应用程序侧防御CSRF漏洞,一般都是利用referer、token或者验证码jQuery是一个兼容多浏览器的javascript库,经探测,被检测系统使用的jquery 版本存在XSS漏洞。
详情请参看:/jquery_xss//2011/09/01/jquery-1-6-3-released/6、jQueryXSS漏洞描述:jQuery是一个兼容多浏览器的javascript库,经探测,被检测系统使用的jquery版本存在XSS漏洞。
详情请参看:/jquery_xss//2011/09/01/jquery-1-6-3-released/解决方案:使用最新版本的jquery7、发现Web服务器默认页面解决方案:在Web应用程序侧防御CSRF漏洞,一般都是利用referer、token或者验证码发现Web服务器r默认页面,如果该web服务器不被使用,建议关闭。
8、服务器开启OPTIONS方法解决方案:如果该web服务器不被使用,建议关闭OPTIONS方法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。
通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。
开启该方法有可能泄漏一些敏感信息,为攻击者发起进一步攻击提供信息9、存在Web服务器默认欢迎页面漏洞描述:建议关闭该功能该Web服务器有一个默认的欢迎页面。
如果你不使用这台Web服务器,它应该被禁用,因为它可能会造成安全威胁。
解决方案:无影响,如此服务器无web应用,建议禁用或删除此页面。
10、跨站脚本漏洞(XSS/CSS,Cross Site Scripting)漏洞描述:Web程序没有对攻击者提交的含有可执行代码的输入进行有效验证,在某页面返回给访问该Web程序的任意用户,可能导致这些代码在用户的浏览器解释执行。
若验证后不能触发弹框,可能是测试用例的问题,请在ie、firefox、chrome下测试,并关闭浏览器自带的xss筛选器测试。
Web站点把用户的输入未做过滤就直接输出到页面,参数中的特殊字符打破了HTML 页面的原有逻辑,黑客可以利用该漏洞执行任意HTML/JS代码。
这里所说的用户输入包括用户提交的GET、POST参数,还包含HTTPReferrer头,甚至是用户的Cookie。
跨站脚本类型包括:1.非持久型XSS,也就是反射型XSS,是目前最普遍的跨站类型。
跨站代码一般存在于链接中,请求这样的链接时,跨站代码经过服务端反射回来,这类跨站的代码不存储到服务器段。
2.持久型XSS:这是危害最直接的跨站类型,跨站代码存储于服务端(如数据库中)。
常见情况是某用户在论坛发贴,如果论坛没有过滤用户输入的Javascript代码数据,就会导致其他浏览此贴的用户的浏览器会执行发贴人所嵌入的Javascript代码。
3.DOMXSS:是一种发生在客户端DOM(Document Object Model文档对象模型)DOM 是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。
DOM中有很多对象,其中一些是用户可以操纵的,如URI,location,referer等。
客户端的脚本程序可以通过DOM 动态地检查和修改页面内容,它不需要提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOMXSS漏洞。
4.UTF-7XSS,是指由于没有指定页面编码,导致浏览器将编码以UTF-7解析,形成XSS。
5.MHTMLXSS,漏洞原理参见:/webzine_0x05/0x05IE下MHTML 协议带来的跨域危害.html跨站脚本的危害:1.帐号劫持-攻击者可以在会话cookie过期之前劫持用户的会话,并以用户的权限执行操作,如发布数据库查询并查看结果。
2.恶意脚本执行-用户可能在不知情的情况下执行攻击者注入到动态生成页面中的JavaScript、VBScript、ActiveX、HTML甚至Flash内容。
3.蠕虫传播-通过Ajax应用,与CSRF漏洞结合,跨站脚本可以以类似于病毒的方式传播。
跨站脚本负载可以自动将其自身注入到页面中,并通过更多的跨站脚本轻易的重新注入同一主机,而所有这些都无需手动刷新页面。
因此,跨站脚本可以使用复杂的HTTP方式发送多个请求,并以用户不可视的方式自我传播。
4.信息窃取-攻击者可以通过重新定向和伪造站点将用户连接到攻击者所选择的恶意服务器并获得用户所输入的任何信息。
5.拒绝服务-通常攻击者通过在包含有跨站脚本漏洞的站点上使用畸形的显示请求,就可以导致主机站点反复的自我查询,出现拒绝服务的情况。
6.浏览器重新定向-在某些使用帧的站点上,用户可能在实际上已经被重新定向到恶意站点的情况下误导为仍处在原始站点上,因为浏览权地址栏中的URL仍保持不变。
这是由于没有重新定向整个页面,而只是执行JavaScript的帧。
7.控制用户设置-攻击者可以恶意更改用户设置。