我们最近在我们的应用程序上完成了App Scan。根据App Scan的修复,我们不允许\r`\n
以及许多其他字符。为什么这些字符很危险?如果我有文本框,用户可以输入他们想要的内容怎么办?如何处理这种情况?
答案 0 :(得分:1)
阻止常见字符而不知道阻止它们的原因是cargo-cult programming。如果你有一个工具告诉你“这些字符是坏的,永远不应该被允许”,找到一个更好的工具,或者至少试着更好地理解为什么它会告诉你。
在某些情况下,阻止某些字符是合适的,但您在此处所做的事情实际上只是针对程序中其他位置可能存在的问题的一种(不良)解决方法,例如SQL injection。这些问题可以通过其他方式更好地解决,不涉及限制用户可以键入的字符。
在SQL注入的情况下:使用带有绑定参数的预准备语句来保持用户输入超出实际的SQL字符串,这样用户输入中的“特殊字符”就没有特殊含义,也无法更改查询。
// User's input might contain special characters like quotes
String userInput = "'); drop all tables; select ('";
// SQL statement just has a '?' placeholder where the user input should go
String sql = "insert into comments values (?)";
try (PreparedStatement statement = connection.prepareStatement(sql)) {
statement.setString(1, userInput); // Value for the first '?' in the query
statement.executeUpdate(); // Perfectly safe!
}
答案 1 :(得分:-2)
您正在寻找逃生序列。检查apache API StringEscapeUtils