应用软件安全编程--16预防反射型 XSS

应用程序通过 Web 请求获取不可信赖的数据,在未检验数据是否存在恶意代码的情况下,便将其传 送 给 了Web用户,应用程序将易于受到反射型XSS攻击 。

对于预防反射型 XSS 的情况,示例给出了不规范用法(Java 语言)示例。

示例:下面JSP代码片段的功能是从 HTTP 请求中读取雇员的ID(eid),并将其显示给用户。

<% String name= request.getParameter("username");%>

姓名:<%= name%>

如果 name 里有包含恶意代码,那么 Web 浏览器就会像显示 HTTP 响应那样执行该代码,应用程序将受到反射型 XSS 攻击。

为了避免反射型 XSS 攻击,建议采用以下方式进行防御:

a)对用户的输入进行合理验证(如年龄只能是数字),对特殊字符(如〈、〉、、"以及

b)根据数据将要置于 HTML上下文中的不同位置(HTML标签、HTML 属性、JavaScript 脚本、CSS、URL), 对所有不可信数据进行恰当的输出编码。

例如:采用 OWASP ESAPI对数据输出 HTML 上下文中不同位置,编码方法如下。

//HTML encode

ESAPL.encoder(),encodeForHTML("inputData");

//HTML attribute encode

ESAPL.encoder().encodeForHTMLAttribute("inputData");

//JavaScript encode

ESAPI.encoder(),encodeForJavaScript("inputData");

//CSS encode

ESAPLencoder().encodeForCSS("inputData");

//URL encode

ESAPI,encoder(),encodeForURL("inputData");

c)设置 HttpOnly 属性,避免攻击者利用跨站脚本漏洞进行Cookie劫持攻击。在Java EE中,给Cookie 添加 HttpOnly 的代码如下:

response

response.setHeader("Set-Cookie"," cookiename = cookievalue; path=/; Domain = domainvaule; Max- age = seconds; HttpOnly");

.setHeader("Set-Cookie"," cookiename = cookievalue; path=/; Domain = domainvaule; Max- age = seconds; HttpOnly");

你可能感兴趣的:(应用软件安全编程,安全,xss,前端)