java - 在 RoR 中清理程序生成的 java 字符串

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

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

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

最佳答案

在 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代码和用户输入之间有一个清晰的界限,不能跨越。

关于java - 在 RoR 中清理程序生成的 java 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10165783/

相关文章:

ruby-on-rails - Rails - Rakefile

ruby-on-rails - 如何使用 mysql2 gem 配置 ActiveRecord 数据库连接

mysql - 加入有条件的两个表 - ruby​​ on rails

ruby-on-rails - 使用 Rails 的 Messenger 机器人 : setup for multiple pages

java - 取消 PendingIntent 会使应用程序崩溃

ruby - Rails 命令在 ANSICON 安装后不起作用

ruby-on-rails - Rspec 将 sql 记录到控制台以过滤/标记规范

java - 从 Java 获取毫秒分辨率的文件 mtime

JAVA在二维数组中添加随机值(数组索引越界异常)

java - Java/Android 中现有对象的短期引用的开销