java - JSF 中的转义 url 以防止 XSS

标签 java security jsf xss

我在一个 html 输入字段 ( <input type="text"> ) 中存在一个 XSS 漏洞,我想要处理该漏洞。 html 输入用于社交媒体 URL(例如 Facebook、Linkedin、Jabber、Skype 等),稍后显示为:<a href=link>link</a> .

没有验证,因此用户可以输入他们想要的任何内容。然后,当有人点击应用程序中的链接时,如果存在危险的javascript,它将被执行。我决定做的是在输出中转义这些 url,这样它们就不会在单击时执行任何 javascript。我使用 jsf 作为 View ,但找不到可以帮助我正确修复它的工具。

首先,我想在保存用户输入之前进行一些基本的网址验证,但由于网址的复杂性(链接可能不以协议(protocol)开头,并且可以是任何名称,因为某些社交媒体将具有默认地址前缀(方案)在系统中,对于 ex Skype:对于 Skype,因此网址可能类似于:linkedin.com/in/name 或 asdqwe)我不得不放弃这个想法。

我试图做的是使用方法 StringEscapeUtils.escapeJavaScript 转义这些网址来自apache.commons.lang ,但它并不能阻止所有类型的危险代码,例如它不会阻止输入: javascript:alert(0);所以我正在寻找一个可以让我转义这些网址以完全或几乎完全防止 xss 的工具。感谢您的帮助。

最佳答案

实际上,您应该通过 UrlValidator 验证 URL 格式的输入确保交互式内容(在您的情况下是超链接)与您的格式匹配并且可以安全地单击。下面的例子:

使用有效方案“http”和“https”构造一个 UrlValidator。

String[] schemes = {"http","https"}.
UrlValidator urlValidator = new UrlValidator(schemes);
if (urlValidator.isValid("https://facebook.com")) {
   System.out.println("url is valid");
} else {
   System.out.println("url is invalid");
}

打印出“url 有效”

关于java - JSF 中的转义 url 以防止 XSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59754900/

相关文章:

http - 黑客能否嗅探通过 WIFI 传输的 HTTP 数据包?

c++ - 无法实现密码过滤器

java - 在 JSF 2 中从同一命令调用不同的操作

java - 如何一次使用 5 个登录来执行登录功能的负载测试

ruby-on-rails - Ruby gem 是否有像木马一样运行的风险?

java - 输出 double 中的句点但输入 double 中的逗号?

java - 重定向到多个选项卡

java - 如何使用 ADF propertyListener 标记?

java - 重写 JTree 双击以防止节点扩展?

java - 我需要帮助在 Java 中复制一个对象