【问题标题】:Sanitizing strings for procedually generated java in RoR在 RoR 中为程序生成的 java 清理字符串
【发布时间】:2012-04-27 06:58:21
【问题描述】:

我正在编写一个 Ruby on Rails 应用程序,它通过用户输入将生成一些 Java 代码,然后服务器将编译并执行这些代码。 (不要问为什么;)

问题是用户可以输入需要在 Java 中用作字符串文字的字符串。我以前将字符列入白名单,但这种方法为用户提供的灵活性不足。如何清理 RoR 中的字符串,以防止用户终止字符串,从而能够在服务器上执行任意代码。

【问题讨论】:

    标签: java ruby ruby-on-rails-3 sanitization input-sanitization


    【解决方案1】:

    在 java 中终止字符串的唯一方法是 ",但您还需要检查 Unicode 文字 \u...,因为用户可以输入非法字符的 Unicode 字符(java 编译做的第一件事就是搜索对于 Unicode 文字并用正确的字符替换它们)。如果你同时禁止"\,你应该不能终止java 字符串。

    您没有提到您使用此输入的目的,但更安全的方法是将用户输入保存到您的 java 类旁边的单独文件中,而不是执行以下操作:

    String input = "#USER_INPUT#";
    

    您可以从您保存的用户输入文件中读取文本:

    String input = readUserInputFile();
    

    readUserInputFile() 类似于:

    public String readUserInputFile() {
        InputStream is = this.class.getClassloader.getResourceAsStream("user-input.txt");
        StringBuffer text = new StringBuffer();
        // read input stream into text
        return text.toString();
    }
    

    这样用户可以输入任何他们想要的内容,并且生成的java代码和用户输入之间有一个明确的界限,不能跨越。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 2015-02-22
      • 1970-01-01
      • 2021-12-26
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多