当前位置: 首页 > 知识库问答 >
问题:

存储的 xss 安全威胁

晏兴发
2023-03-14

我们正在研究安全预防,并且在下面的代码中,缓冲区正在提供存储的XSS攻击……下面是我们从Checkmark工具获得的信息。

methodtest从数据库中获取缓冲区元素的数据。然后,该元素的值在没有正确过滤或编码的情况下流过代码,最终在methodtest中显示给用户。这可能会启用存储跨站点脚本攻击。

private void test(HttpServletResponse response, SessionInfo sessionInfo, String applicationName, String resourceName, String resourcePath, String domainAddress, String siteAddress, String fileNames) throws KatalystServletException, IOException, FSException
{
    InputStream in = resourceFile.getInputStream();
    ZipOutputStream zipOut = null;
    try {
        byte[] buffer = new byte[8 * 1024];
        int bytesRead = 0;
        while ((bytesRead = in.read(buffer)) != -1) {
            zipOut.write(buffer, 0, bytesRead);
        }
    } finally {
        in.close();
        zipOut.flush();
    }
}

共有1个答案

端木阳荣
2023-03-14

以下是该问题的解决方案,也是 Java 中由 Checkmarx 标记HRA_JAVA_CGI_STORED_XSS或存储的 XSS 漏洞的解决方案。

对于使用 byte[] 数组作为缓冲区的任何 Java 文件操作,检查marx 都会标记此问题。

在写入任何输出流之前,您需要消毒双手(悲伤的脸)以及字节数组。您可以使用 ESAPI 的验证程序函数来修复此问题。

将ESAPI jar添加到您的项目中

   <dependency>
        <groupId>org.owasp.esapi</groupId>
        <artifactId>esapi</artifactId>
        <version>2.2.2.0</version>
    </dependency>

import org.owasp.esapi.*;

在写入输出流之前,在你的情况下,一个Zip输出流,我们需要使用getValidFile内容(字符串上下文,字节[]输入,整数最大字节,布尔允许Null)过滤字节数组缓冲区

此方法检查是否存在任何文件结尾漏洞攻击、文件损坏攻击或其他入侵攻击(我找不到关于这些攻击的太多信息,如果找到更多信息,将进行更新。)

https://javadoc.io/doc/org.owasp.esapi/esapi/2.2.2.0/org/owasp/esapi/Validator.html#getValidFileContent-java.lang.String-byte:A-int-boolean-

private void test(HttpServletResponse response, SessionInfo sessionInfo, String applicationName, String resourceName, String resourcePath, String domainAddress, String siteAddress, String fileNames) throws KatalystServletException, IOException, FSException
{
    InputStream in = resourceFile.getInputStream();
    ZipOutputStream zipOut = null;
    try {
        byte[] buffer = new byte[8 * 1024];
        int bytesRead = 0;
        while ((bytesRead = in.read(buffer)) != -1) {

      // HERE IS THE MAGIC LINE
      buffer=ESAPI.validator().getValidFileContent("blah blah",buffer,8192,true);
      //TADA

            zipOut.write(buffer, 0, bytesRead);
        }
    } finally {
        in.close();
        zipOut.flush();
    }
}

我对Util方法也有类似的问题,它被标记在8个位置。修复后,所有问题都得到了解决。

我还建议使用try catch finally块并关闭“finally”部分中的InputStreams和OutputStreams,或者您可以使用“Try with Resources”。

不关闭这些流在另一个代码扫描中被标记为“资源匮乏”——未释放的资源可能会导致系统变慢,并使其他组件的内存不足。

 类似资料:
  • 允许访问简单的加密和解密字符串,以便存储在本地机器上。 进程:主进程 此模块保护磁盘上存储的数据不被其他应用程序或拥有完全磁盘访问权的用户访问。 请注意,在Mac上,需要访问系统Keychain,这些调用可以阻止当前线程来收集用户输入。 如果密码管理工具可用,Linux 亦是如此。 方法 safeStorage 模块包含以下方法: safeStorage.isEncryptionAvailable

  • 所以我想知道,如果我将一个UUID作为后修复添加到文件路径(我现在这样做是为了唯一性,),它是否可以作为一种通过模糊来实现安全的方法呢?(这将是非常困难的野蛮猜测,使某种“私人”文件)。 我知道这不是很理想,但至少在Firebase为这种场景实现更好的解决方案之前,这是暂时的事情,并且能够在晚上睡得更好:p 我的想法是设置如下内容: null

  • 问题内容: 我允许用户将文件上传到我的服务器。我将面对哪些可能的安全威胁,以及如何消除它们? 假设我允许用户从其系统或网络将图像上传到我的服务器。现在,要检查这些图像的大小,我必须将它们存储在文件夹中。有风险吗?如何将风险降到最低? 也可以说我正在从用户在我的表单中上传的链接中下载图像。首先,我必须将这些文件保存在服务器中,以检查它们是否实际上是图像。另外,如果一个恶作剧者给我一个URL,而我最终

  • 拒绝许可。无法访问存储桶..请访问Firebase控制台中的Storage选项卡,为您的存储桶启用Firebase存储,并确保您有足够的权限来正确提供资源 在谷歌搜索如何设置这些安全规则,我不确定什么是正确的答案。一些答案建议我在代码中编写方法来授予权限,但文档建议我需要在Firebase的端进行。 这是其中一个例子 我无法理解人们的回答 就像几个月前的这张 有人能解释一下当前的Firebase(

  • 问题内容: 攻击 在凭证存储的情况下,一种可能的威胁模型是攻击者,它具有以下能力: 检查任何(用户)进程内存 读取本地(用户)文件 AFAIK,这种攻击的共识是无法阻止(因为必须将凭据存储在内存中,程序才能实际使用它们),但是有两种技术可以缓解这种攻击: 最小化敏感数据在内存中的存储时间 一旦不再需要数据,将覆盖内存 通过模糊措施来处理内存中的数据,继续移动数据以及其他安全性 特别是Python

  • 前言 面试中的安全问题,明确来说,就两个方面: CSRF:基本概念、攻击方式、防御措施 XSS:基本概念、攻击方式、防御措施 这两个问题,一般不会问太难。 有人问:SQL注入算吗?答案:这个其实跟前端的关系不是很大。 CSRF 问的不难,一般问: CSRF的基本概念、缩写、全称 攻击原理 防御措施 如果把攻击原理和防御措施掌握好,基本没什么问题。 1、CSRF的基本概念、缩写、全称 CSRF(Cr