【发布时间】:2015-07-24 04:53:10
【问题描述】:
我目前在验证用户上传到文件输入的文件名时遇到问题。我已经对文件扩展名进行了验证,但是当用户尝试上传文件名示例 1.hello.jpg 时,对于我的 JavaScript 验证代码,它看起来不错,因为它是 jpg 扩展名。但在我的 PHP 部分,我对文件扩展名的验证无法识别它,因为我正在使用explode 函数来验证文件扩展名。
在提交到我的服务器端之前,是否有在客户端验证文件的特殊字符?谢谢
这是我在客户端的验证:
<script type='text/javascript'>
function checkDisabled(yourSubmitButton){
//No 1 file input validation
var res_field = document.getElementById('uploaded_file').value;
var extension = res_field.substr(res_field.lastIndexOf('.') + 1).toLowerCase();
var allowedExtensions = ['jpg','JPG','bmp','BMP','png','PNG','jpeg','JPEG'];
if(document.getElementById('bannerName').value.length !=0){
//File input extension validation
if (res_field.length > 0)
{
if (allowedExtensions.indexOf(extension) !== -1)
{
yourSubmitButton.disabled = false;
return;
}
}
}
// If we have made it here, disable it
yourSubmitButton.disabled = true;
};
</script>
这是我用于验证扩展的 php 代码:
$valid_formats = array("jpg", "JPEG","png","PNG","bmp","BMP",'JPG','jpeg');
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST")
{
$name = $_FILES['uploaded_file']['name'];
$size = $_FILES['uploaded_file']['size'];
$bName = $_POST['bannerName'];
$bDescription = $_POST['bannerDescription'];
$bK = $_POST['bannerK'];
$bKe = $_POST['bannerKe'];
$bS= $_POST['bannerS'];
if(strlen($name))
{
list($txt, $ext) = explode(".", $name);
if(in_array($ext,$valid_formats))
{
...........
}
}
【问题讨论】:
-
1.hello.jpg 有两个点,你试图通过它来爆炸,所以在爆炸时 $ext 的值 hello 是无效的。
-
如果我上传一个文件
something.jpg.php从我正在阅读的内容中上传,然后我可以在您的服务器上执行我自己的服务器端代码,让我可以访问几乎所有内容。 .. -
@newtojs 从您的陈述中我了解到,php 文件无法将其提交到我的服务器,因为我的 java 脚本验证只允许使用图像文件
-
@sanjay 根据您的知识,验证文件名和扩展名的最佳解决方案是什么?谢谢
-
@MarcusTan Javascript 是客户端的,可以使用浏览器控制台进行更改。示例
allowedExtensions.push('php');
标签: javascript php validation