我想问一下,如果Windows允许的文件名对于SQL(Oracle和一般),JS,xml等注入是安全的。
检查并替换以下字符:/:*?“<> |(还有它们的ascii值等)。 长度也不能超过180个字符
在客户端(仅用于可用性)和服务器端(用于安全性)中安全地进行检查
文件名保存到oracle DB,它有一个类似oracle-> java-> xml-> xslt->浏览器的流程。
编辑:@Bohemian的答案指出了SQL注入的不安全部分(使用预准备语句可能会被禁止)。 JS或xml注入怎么样?(这可能导致XSS或通过xslt访问hdd)答案 0 :(得分:5)
不,这不安全。因为Windows允许在文件名中使用单引号'
和半冒号;
注入SQL只需要这个组合:
SQL注入示例(在java中):
int userid = 999;
String filename = "foo';delete from users;update users set name = 'bar";
String sql = "update users set avatar = '" + filename + "' where id = " + userid;
System.out.println(sql);
输出:
update users set avatar = 'foo';delete from users;update users set name = 'bar' where id = 999
这是有效且有害的SQL。
Windows还允许文件名中的卷曲{}
和方括号[]
括号。我现在想不出一个例子,但似乎也可以注入javascript,也许如果传递给eval()
。 (也许有人可以提供一个工作示例 - 随意在这里编辑一个)