windows允许的文件名对注入是否安全?(SQL、JavaScript等)

windows允许的文件名对注入是否安全?(SQL、JavaScript等),windows,security,sql-injection,filenames,code-injection,Windows,Security,Sql Injection,Filenames,Code Injection,我想问一下,对于SQL(Oracle和general)、JS、xml等注入,windows允许的文件名是否安全 将检查并替换以下字符:/:*?“|”(还包括其ascii值等)。 而且长度不能超过180个字符 在客户端(仅用于可用性)和服务器端(用于安全性)安全地进行检查 文件名保存到oracle数据库中,并显示一个类似oracle->java->xml->xslt->browser的流 编辑:@Bohemian的回答指出了SQL注入的不安全部分(这可以通过使用预先准备好的语句来禁止)。JS或xm

我想问一下,对于SQL(Oracle和general)、JS、xml等注入,windows允许的文件名是否安全

将检查并替换以下字符:/:*?“|”(还包括其ascii值等)。 而且长度不能超过180个字符

在客户端(仅用于可用性)和服务器端(用于安全性)安全地进行检查

文件名保存到oracle数据库中,并显示一个类似oracle->java->xml->xslt->browser的流


编辑:@Bohemian的回答指出了SQL注入的不安全部分(这可以通过使用预先准备好的语句来禁止)。JS或xml注入如何?(这可能导致XSS或通过xslt访问hdd)不,这不安全。因为windows允许在文件名中使用单引号
和分号

这种组合就是注入SQL所需的全部:

SQL注入示例(在java中):

输出:

update users set avatar = 'foo';delete from users;update users set name = 'bar' where id = 999
这是有效的、有害的SQL



Windows还允许在文件名中使用卷曲的
{}
和方形的
[]
括号。我现在想不出一个例子,但似乎javascript注入也是可能的,如果传递给
eval()
(也许有人可以提供一个工作示例-可以在这里随意编辑)

简单而完整的答案。谢谢:)关于缺少的东西,假设使用了prepare语句(因此系统不受sql注入的影响),您能找到JS注入吗?相同的逻辑不适用于JS注入吗?例如,如果您通过
eval()传递文件名
你几乎可以做任何需要做的事情,例如:,所以从我的角度来看,这似乎是安全的,这就是为什么我问..文件名当然不是从eval()传递过来的..但它可能在html属性中(其他漏洞所在的位置)我已经更新了问题,添加了
{}[]
也可以在文件名中使用,这可以允许一种方式进入。我想不出一个例子,尽管-JS不是我的强项。如果你不屏蔽双引号,我可以想到一个例子,因为这将允许json对象以类似于SQL示例的方式被破坏。
update users set avatar = 'foo';delete from users;update users set name = 'bar' where id = 999