Javascript 安全性-如何防止Dropzone.js中的XSS文件名注入?

Javascript 安全性-如何防止Dropzone.js中的XSS文件名注入?,javascript,security,xss,dropzone.js,Javascript,Security,Xss,Dropzone.js,我正在使用dropzone.js扩展名进行一些安全测试,我发现Linux系统可以重命名合法文件名,并使用以下特殊字符执行: "><svg onload=alert(1)>.jpg “>.jpg 或 “>.png 这个脚本注入是无害的,但是其他一些脚本可能会造成很大的伤害 为了保护我的文件名,我可以通过PHP将其重命名为: public static function FileTitleSafe($string) { $str = $string;

我正在使用dropzone.js扩展名进行一些安全测试,我发现Linux系统可以重命名合法文件名,并使用以下特殊字符执行:

 "><svg onload=alert(1)>.jpg
“>.jpg

“>.png
这个脚本注入是无害的,但是其他一些脚本可能会造成很大的伤害

为了保护我的文件名,我可以通过PHP将其重命名为:

       public static function FileTitleSafe($string)  {
   $str = $string;

   // Trim white spaces at beginning and end of title
   $str = trim($str);

   // Remove any duplicate whitespace, and XSS protect
   $str = preg_replace('/([\s\s]|\<|\>\=|\#|\"|\?|\%|\!|\*|\:|\.)+/', ' ', $str);
   // Trim dashes at beginning and end of alias
   $str = trim($str, '-');

   return $str;
  }
公共静态函数FileTitleSafe($string){
$str=$string;
//修剪标题开头和结尾处的空白
$str=修剪($str);
//删除所有重复的空白,并使用XSS保护
$str=preg\u replace('/([\s\s]\\=\\\\\\\\\\\\\\\\\%\\\\\\\%\\\!\\\*\\:\\\.+/','$str);
//修剪alias开头和结尾的破折号
$str=修剪($str,'-');
返回$str;
}
但它不会阻止在缩略图描述中创建文件名


如何阻止通过Dropzone脚本上传未经授权的文件名,方法是阻止非合法字符,或者在文件名出现在缩略图描述中之前重命名文件名?

我认为您这样做是错误的。所有这些文件名都很好,尽管不完全正常。您应该做的是在发布前转义它们将它们写入“缩略图描述”。在PHP中,您可以使用
htmlspecialchars
执行此操作。如果缩略图描述是客户端的,请设置元素的
textContent
,而不是
innerHTML
,那么您也会受到保护。@RaphaelSchweikert对于PHP部分,您是对的,它可能会更好,也许
string\u tags
htmlspecia更好lchars
preg\u replace
在这种情况下,string
strip\u标记(string$str[,string$allowed\u标记])
你怎么看?
strip\u标记
因任何接近你试图保护的东西而被破坏(
onload
属性等等)。如果用户输入是HTML,请使用适当的消毒剂,如。如果用户输入是文本,请始终使用
htmlspecialchars
进行转义,这样,您就永远安全了。
       public static function FileTitleSafe($string)  {
   $str = $string;

   // Trim white spaces at beginning and end of title
   $str = trim($str);

   // Remove any duplicate whitespace, and XSS protect
   $str = preg_replace('/([\s\s]|\<|\>\=|\#|\"|\?|\%|\!|\*|\:|\.)+/', ' ', $str);
   // Trim dashes at beginning and end of alias
   $str = trim($str, '-');

   return $str;
  }