安全编程-输出编码

Web应用中对HTTP请求的所有方面都必须进行验证,包含Web的输入和输出。开发人员应当保证不能允许攻击者利用你的应用程序发送攻击。跨站点执行脚本漏洞(XSS)是目前报道最为广泛的一种安全漏洞攻击,它允许攻击者将恶意脚本代码注入到网页上,当其他用户在浏览网页时,执行恶意脚本窃取重要的资源。

跨站点执行脚本攻击是将一个恶意内容注入到一个合法内容中。它可能直接来自攻击者,以一种特殊的URL形式发送到受害者,或者是引诱受害者点击一个有攻击内容的Web站点。XSS注入通常存在于HTML或者JavaScript/VBScript中。

跨站点执行脚本漏洞的预防

1)输入验证

对输入的内容和格式做严格的检查,如果不符合预先定义的格式或者有效范围,则拒绝此次请求。

但输入验证不能彻底解决问题,因为根据用户需求输入的内容会越来越多,如果限制过多会显得不是很友好。

2)输出编码

预防跨站点执行脚本意味着限制用户能够影响应用程序输出的方法。大体上,这意味着应用程序必须执行输出验证或者输出编码。

编码主要的作用就是确保不信任的数据不会被用于发动攻击,如果编码正确,浏览器就会正确地解析。编码就是让解析者知道数据不是用来执行的代码,从而可以避免遭受攻击。编码包含了URL编码、HTML编码和JavaScript编码。

使用ESAPI预防XSS

ESAPI根据XSS问题的特征和产生的原因,提供了不同的接口:

1)HTML编码

String ESAPI.encoder().encoderForHTML(String);

2)HTML属性编码

String ESAPI.encoder().encoderForHTMLAttribute(String);

3)JavaScript编码

String ESAPI.encoder().encoderForJavaScript(String);

4)CSS编码

String ESAPI.encoder().encoderForCSS(String);

5)URL编码

String ESAPI.encoder().encoderForURL(String);

6)VBScript编码

String ESAPI.encoder().encoderForVBScript(String);

 

 

你可能感兴趣的:(xss,安全漏洞)