常见的web漏洞

一、XSS漏洞

XSS是跨站脚本攻击(Cross Site Scripting)的缩写,分为存储型,反射型漏洞两种

1.存储型xss漏洞(风险等级:高)

漏洞危害

存储XSS把用户输入的数据存储到数据库,显示到前端页面。攻击者可进行身份验证盗取和蠕虫攻击。存储型XSS也叫做“持久型XSS”

漏洞验证

 

2.反射型XSS漏洞(风险等级:中)

漏洞危害

反射型XSS把用户输入的数据“反射”给浏览器。攻击者往往需要诱使用户“点击”一个恶意链接,才能攻击成功,反射型XSS也叫做“非持久型XSS”

漏洞验证

 

修复办法

1、使用HttpOnly有助于缓解XSS攻击,但是在部署时需要注意,如果业务复杂,则需要在所有Set-Cookie的地方,给关键Cookie都加上HttpOnly。漏掉了一个地方,都可能使得这个方案失效

2、在服务器端对输入进行格式检查,如在网站注册时填写的用户名只能为字母、数字的组合,手机号应该是不长于16位的数字;检查输入中是否包含一些特殊字符,如<、>、'、"、/等,如果发现,则进行过滤或编码;对输入进行XSS特征的匹配,如查找数据中是否包含“script”、“javascript”、“prompt”、“confirm”等敏感字符

3、一般来说,除了富文本的输出外,在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。针对HTML代码的编码方式是HtmlEncode,在PHP中,有htmlentities()和htmlspecialchars()两个函数可以满足安全要求。相应的,JavaScript的编码方式可以使用JavascriptEncode,JavascriptEncode与HtmlEncode的编码方式不同,它需要使用“\”对特殊字符进行转义。在对抗XSS时,还要求输出的变量必须在引号内部,以避免造成安全问题;除了HtmlEncode、JavascriptEncode外,还有很多用于各种情况的编码函数,比如XMLEncode、JSONEncode等

二、SQL注入漏洞(风险等级:高)

漏洞危害

SQL注入被广泛用于非法入侵网站服务器,获取网站控制权。它是应用层上的一种安全漏洞。通常在设计存在缺陷的程序中,对用户输入的数据没有做好过滤,导致恶意用户可以构造一些SQL语句让服务器去执行,从而导致数据库中的数据被窃取、篡改或删除甚至最终导致服务器被入侵等危害

漏洞验证

 

正常用户输入“admin”,密码为“password”

最终执行的SQL语句为:

select count(*) from admin where username = ' admin ' and password = ' password '

输入特殊用户" 'or 1=1-- "

最终执行SQL语句为:

select count(*) from admin where username = ''or 1=1--' and password = ''

 

 修复办法

对所有输入/输出的参数在进入数据库调用之前,进行严格过滤和检测,要解决SQL注入漏洞,建议采取以下方式:

1、传入的参数明确类型,如果参数是数字,应检查参数输入的内容是否是数字,如果检查到其它类型,则应进行错误处理,避免进入数据库调用

2、对传入的参数中含有特殊字符,应进行转义处理,比如单引号;对数据库关键字如“select”、“update”、“insert”、“and”等进行过滤处理,同时应该具备严格匹配策略,防止攻击者通过大小写、编码等方式绕过限制

3、对传入的参数的检测,都应该在服务器端进行

4、进行异常处理,避免出错时暴露敏感信息

5、合理配置数据库连接用户的权限,应实现权限最小化原则

6、建议使用参数化查询或预编译的方式进行数据库查询

三、CSRF跨站请求伪造漏洞(风险等级:高)

 漏洞危害

 攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的

 漏洞验证

一个典型的CSRF攻击有着如下的流程:


*受害者登录a.com,并保留了登录凭证(Cookie)

*攻击者引诱受害者访问了b.com

*b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie

*a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求

*a.com以受害者的名义执行了act=xx

*攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作

 修复办法

CSRF漏洞防御主要可以从三个层面进行,即服务端的防御、用户端的防御和安全设备的防御

1.给每个HTTP请求添加一个不可预测的令牌,并保证该令牌对每个用户会话来说是唯一性。最好的办法是将独有的令牌包含在隐藏字段中,通过HTTP请求发送,避免在URL中暴露出来

2.设定短暂的可信用户会话时间

 

猜你喜欢

转载自www.cnblogs.com/qiguaideta/p/11512154.html