我知道这个问题有很多相关的提问,但是没有一个能涵盖我想要了解的所有内容。
我想让我的网页用户通过表单上传图片。我希望这个过程是安全的,或者至少尽可能安全。
我对深入了解安全方面并不太了解,但我知道一个不安全的网页会产生的后果。我不能安心地想着我的网页是不安全的,或者因为没有足够的访问量而没有人进入我的网页(我是现实主义者)。
在这一点上,我知道所有关于安全性的检查都必须在服务器端进行,而不是客户端(或两者都可以)。
我知道一个文件可以被欺骗成图像并运行恶意代码,所以我搜索了一些方法来避免这种情况。这是我在将图像存储到服务器之前找到的检查方法:
从$_FILES
中:
$_FILES['file']['name']
:检查我上传的文件是否有名称。以此来知道该文件是否存在。$_FILES['file']['error']
:检查图像是否有错误。$_FILES['file']['size']
:检查图像的大小是否大于0。$_FILES['file']['type']
:检查文件类型是否为图像,但不建议使用,因为PHP
不会对其进行检查。
通用函数:
检查
魔数
以验证图像类型。exif_imagetype()
:检查图像类型。getimagesize()
:检查是否返回0,表示文件不是图像。imagecreatefromstring()
:创建一个新的图像字符串。如果无法创建,则不是图像。imagepng
:创建一个PNG
图像,以删除所有元数据(使用imagecreatetruecolor()
和imagecopy()
)。
但我遇到的问题是我不知道是否应该使用所有这些方法,还是避免或添加其中一些方法(因为其中一些似乎是多余的)。
我的问题是:
- 我应该使用所有这些方法吗?
- 我是否需要添加另一种方法以更安全?
- 过滤文件的顺序是否关键?我的意思是,使用一个过滤器比另一个更好,反之亦然吗?如果是这样的话,应该是什么顺序,为什么?
注意:我不是在寻找个人意见。我尝试收集了我可以得到的所有信息,但是在安全方面谈论其是否正确或不正确我不能确定。如果您可以提供被遗漏的内容的示例,那将是很棒的。
提前致谢!