我想让我的网站防黑客,所以这就是我做的原因:
Text: mysql_real_escape_string($myVar);
Number: (int)$myVar;
我应该使用类似于$myVar = $_FILE['myFile'];
提供的文件数组吗?
答案 0 :(得分:1)
清理文件名非常重要。
您可能还想要涵盖一些问题,例如,* nix中不允许Windows中允许的所有字符,反之亦然。文件名也可能包含相对路径,可能会覆盖其他未上载的文件。
此上传功能取自here
function Upload($source, $destination, $chmod = null)
{
$result = array();
$destination = self::Path($destination);
if ((is_dir($destination) === true) && (array_key_exists($source, $_FILES) === true))
{
if (count($_FILES[$source], COUNT_RECURSIVE) == 5)
{
foreach ($_FILES[$source] as $key => $value)
{
$_FILES[$source][$key] = array($value);
}
}
foreach (array_map('basename', $_FILES[$source]['name']) as $key => $value)
{
$result[$value] = false;
if ($_FILES[$source]['error'][$key] == UPLOAD_ERR_OK)
{
$file = ph()->Text->Slug($value, '_', '.');
if (file_exists($destination . $file) === true)
{
$file = substr_replace($file, '_' . md5_file($_FILES[$source]['tmp_name'][$key]), strrpos($value, '.'), 0);
}
if (move_uploaded_file($_FILES[$source]['tmp_name'][$key], $destination . $file) === true)
{
if (self::Chmod($destination . $file, $chmod) === true)
{
$result[$value] = $destination . $file;
}
}
}
}
}
return $result;
}
重要的部分是:
1)确保该文件不包含任何相对路径。
2)ph()->Text->Slug()
,这确保文件名中只允许使用.0-9a-zA-Z,所有其他字符都被下划线替换(_)
3)md5_file()
,如果已存在同名的另一个文件,则将其添加到文件名中
答案 1 :(得分:0)
取决于用例。例如,如果将文件名保存到DB,则应将其作为字符串进行转义。此外,您应该防止上传和执行PHP脚本。