Tag: xss

Autobean和XSS问题

我在后端有一个Spring应用程序,在前端有一个GWT应用程序。 当用户登录时,”index.jsp”将用户信息输出为javascript变量。 我使用AutoBeanFactory将用户信息编码和解码为json。 因为用户可以注册并且用户信息存储在数据库中,所以我尝试通过转义JSP页面中的用户信息来遵循OWASP XSS预防备忘单 。 我正在使用esapi库进行编码。 服务器端代码如下所示: public static String serializeUserToJson(CustomUser user) { String json; AppUserProxy appUserProxy = appUserFactory.appuser().as(); appUserProxy.setFirstname(encoder.encodeForHTML(user.getFirstname())); appUserProxy.setLastname(encoder.encodeForHTML(user.getLastname())); AutoBean bean = appUserFactory.appuser(appUserProxy); json = AutoBeanCodex.encode(bean).getPayload(); return json; } 我尝试使用encodeForHTML和encodeForJavaScript() 。 这适用于普通字符但是只要我使用Umlaute字符(ü,ä,ö)我遇到问题。 如果我使用encodeforHTML()函数,javascript变量看起来像这样(注意firstname有一个ü): var data = {‘user’:'{“email”:”john.doe@gmail.com”,”lastname”:”Doe”,”firstname”:”Über”}’}; 使用Autobean进行解码工作正常,但字符ü未正确显示但HTML转义了一个( Über )。 当我使用encodeForJavaScript()函数时,输出如下: var data = {‘user’:'{“email”:”john.doe@gmail.com”,”lastname”:”Doe”,”firstname”:”\\xDCber”}’}; 当我尝试解码JSON字符串时,我遇到了一个奇怪的问题。 在开发模式/托管模式下,解码工作正常,并且正确显示变音符号。 但是,只要我在生产模式下运行代码,我就会得到一个未被捕获的exception: java.lang.IllegalArgumentException: Error parsing JSON: […]

部署依赖于rest api的单页面应用程序有哪些技巧?

我正在构建一个单页面应用程序(使用AngularJS),该应用程序从对遗留系统进行的REST API调用中呈现数据。 这个遗留系统非常庞大,用Java编写并且需要几分钟才能完成部署,因此我们认为开发完全独立于遗留系统的单页应用程序会更高效。 一旦我们尝试与遗留系统的REST API进行通信,就会出现问题。 虽然这两个应用程序都本地部署到同一主机,但它们部署在不同的应用服务器上,因此我需要在通信时使用不同的端口。 但由于SPA正在与不同端口上的REST API进行通信,因此浏览器阻止了我的请求以防止跨站点脚本攻击。 我们发现这个构建工具名称lineman (利用grunt)使代理http请求变得容易。 这让我们了解了跨站点脚本限制,但这只适用于开发模式。 现在我们已经有了一个概念validation工作,我们想知道如何在没有代理的情况下将这些应用程序部署在一起。 我很难找到关于如何做到这一点的建议,因为Angular并不认为你首先有一个后端,并且大多数在前端使用Angular的人都没有在后端使用Java(如果这甚至很重要) 。 我们遇到的问题是,应用程序的上下文路径会根据它们是否在prod模式下与dev模式进行部署而发生变化,因此我们必须考虑采用巧妙的方法来避免两种模式都存在损坏的链接。 我想知道我是否在这里采取了错误的步骤。 我应该避免在与后端不同的服务器上开发SPA吗?

使用jsoup来转义不允许的标签

我正在评估jsoup的function,它将清理(但不删除!)非白名单标签。 假设只允许标签,所以输入如下 foo bar baz 必须产生以下结果: foo bar <script onLoad=’stealYourCookies();’>baz</script> 我用jsoup看到以下问题/问题: document.getAllElements()始终采用 , 和 。 是的,我可以调用document.body().getAllElements()但重点是我不知道我的源文件是完整的HTML文档还是只是正文 – 我希望结果的形状和forms与它进来了; 如何将…替换为<script>…</script> ? 我只想用转义实体替换括号,并且不想改变任何属性等Node.replaceWith听起来像是一种矫枉过正。 是否可以完全关闭漂亮的打印(例如插入新线等)? 或许我应该使用另一个框架? 到目前为止,我已经查看了htmlcleaner ,但是给出的示例并未建议我支持所需的function。

URLEncoder.encode(字符串,“UTF-8”)validation不好吗?

在我的J2EE / Java代码的一部分中,我对getRequestURI()的输出执行URLEncoding以清理它以防止XSS攻击,但Fortify SCA认为validation不良。 为什么?

如何使用filter执行输出编码以防止XSS?

我在servlet中使用以下代码: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out=response.getWriter(); response.setContentType(“text/html”); out.println(“”); out.println(“”); out.println(“alert(1)”); out.println(“”); out.println(“”); } 并遵循filter的代码: public class SampleFilter implements Filter { protected FilterConfig config; public void init(FilterConfig config) throws ServletException { this.config = config; } public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws […]

XSS攻击预防

我正在开发一个用户可以响应博客条目的Web应用程序。 这是一个安全问题,因为它们可以发送危险数据,这些数据将呈现给其他用户(并由javascript执行)。 他们无法格式化他们发送的文本。 没有“大胆”,没有颜色,没有任何东西。 只是简单的文字。 我想出了这个正则表达式来解决我的问题: [^\\w\\s.?!()] 所以任何不是单词字符(aZ,AZ,0-9),而不是空格,“。”,“?”,“!”,“(或”)“将被替换为空字符串。 每个quatation标记将被替换为:“&quot”。 我检查前端的数据,然后在服务器上查看。 有没有人可以绕过这个“解决方案”? 我想知道StackOverflow是如何做到这一点的? 这里有很多格式,所以他们必须做好工作。

在Java中转义html

我如何确保两次逃脱? 我听说它是​​一种很好的做法,可以在从表单中获取值时转义值,并在输出时转义。 这样你有两次抓住机会的机会。

再次保护jsp页面xss

我想保护我的网站formsxss,我想确保我的所有数据都是正确和一致的,所以我不想允许向我的数据库添加任何脚本,这是因为我的数据可能被其他Web服务使用,所以我想确保我的数据是正确的,不会给别人带来任何问题。 我想只在输入数据时进行validation,而不是在输出中进行validation,因此我只进行一次validation,并且我将确保我的数据库中不存在任何脚本。 编辑 :请检查我添加的最后一条评论。

HTML-Entity转义以防止XSS

我有一些用户输入。 在我的代码中,我确保以下符号被转义: & -> & < > -> > OWASP表示有更多的字符要被转义。 对于属性,我做了另一种转义: & -> & ” -> " 这确保所有属性都包含在“。这使我确定我的html属性,但不是HTML本身。 我想知道我的逃跑是否足够。 我读过这篇文章 ,但我仍然不确定我的担忧。 (使用OWASP-Library转义JavaScripts)

XSSfilter删除所有脚本

我正在为我的Web应用程序实现一个XSSfilter,并使用ESAPI编码器来清理输入。 我使用的模式如下所示, // Script fragments Pattern.compile(“(.*?)”, Pattern.CASE_INSENSITIVE), // src=’…’ Pattern.compile(“src[\r\n]*=[\r\n]*\\\'(.*?)\\\'”, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), Pattern.compile(“src[\r\n]*=[\r\n]*\\\”(.*?)\\\””, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), // lonely script tags Pattern.compile(“”, Pattern.CASE_INSENSITIVE), Pattern.compile(“”, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), // eval(…) Pattern.compile(“eval\\((.*?)\\)”, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), // expression(…) Pattern.compile(“expression\\((.*?)\\)”, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL), // javascript:… Pattern.compile(“javascript:”, Pattern.CASE_INSENSITIVE), // vbscript:… […]