【问题标题】:Script security search box of application应用程序的脚本安全搜索框
【发布时间】:2015-05-28 15:59:32
【问题描述】:

我正在使用 Java MVC 做一个 Web 项目,它有一个搜索框。我从这个文本框中获取搜索字符串,然后调用 Javascript 搜索脚本方法。它反过来调用 Web 服务进行搜索。现在,如果我搜索如下脚本:

<script>alert("helllooooo")<\script >

然后它会提醒 hellooo 以及使用服务的搜索。在这种情况下如何避免评估脚本。

【问题讨论】:

  • "避免使用脚本"??什么意思?
  • 是的,为此类安全措施做一些平常的事情
  • @αƞjiβ,我猜你想要做的是阻止用户执行输入到搜索框中的 javascript?
  • 是的,还有 CSS 或 HTML

标签: javascript java security


【解决方案1】:

您必须在将输入发送到您的网络服务或对其进行搜索之前对其进行清理。

清理意味着从输入字符串中转义所有 HTML 和 Javascript 标记。

检查Apache StringEscapeUtils 类中的escapeJavaescapeJavascript 等方法。您必须在Web 服务端执行此操作。 如果您希望这发生在 javascript 端本身,您将必须编写一个 Javascript 函数,该函数将显式转义 HTML 和 JS 特殊字符(尤其是标签)

【讨论】:

  • 主要是如果我输入一个脚本它应该不起作用,例如如果我搜索 alert(hello ) 这不应该在客户端执行,并且没有脚本的搜索字符串应该传递给服务跨度>
  • 没有。这是一个安全问题。您不能依赖客户端验证,因为它可以被绕过。
【解决方案2】:

您在此处存在跨站点脚本 (XSS) 漏洞。您需要进行服务器端转义以防止被利用。这个question 有几个潜在的解决方案。也可以参考OWASP XSS Cheat Sheet

客户端转义是不够的,因为攻击者在执行攻击时会绕过您的客户端代码。

【讨论】:

  • 如果我给出一个警报脚本,我会得到警报。实际上当它工作时,在获得 Web 服务结果之后或之前或当我点击搜索按钮时它是自我的?
  • 您想在将数据返回给客户端之前进行转义
【解决方案3】:

您可以像这样替换 :

var html = document.getElementById("searchboxid").value;
html = html.replace(/</g, "&lt;").replace(/>/g, "&gt;");

【讨论】:

  • 这是不够的。您应该转义更多字符,例如"
猜你喜欢
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多