php如何确保上传图⽚的安全
1、上传的时候不依靠Content-Type来做⽂档类型验证,可以参考我在这⾥的回答如何判断浏览器上传⽂件的真实类型?
如果是图⽚可以通过 getimagesize() 获取图⽚的 mime,这样便不依赖
普通⽂件可以通过:
1. finfo 扩展
2. mime_content_type()
3. 调⽤linux命令 exec("file -bi ".escapeshellarg($this->file_src_pathname))来检测
选择合适的⼀种检测⽂档类型已经够⽤了。
图⽚上传的安全性主要在下载展⽰的时候,如果它是⼀段脚本<script>alert(1)</script>伪造成image/jpg,浏览器会将其解释为html⽽不是图⽚,从⽽执⾏⾮法脚本。
以上检测⼿段可以避免这种情况
2、上传的图⽚⽂件放到web ⽬录外的地⽅,限定好权限,图⽚展⽰的时候,可以使⽤另⼀个域名。
3、强制服务器给静态⽂件发送正确的⽂件头,避免图⽚中的代码被执⾏
Apache的指令:
ForceType application/octet-stream
<FilesMatch "(?i)\.jpe?g$">
ForceType image/jpeg
</FilesMatch>
<FilesMatch "(?i)\.gif$">
ForceType image/gif
</FilesMatch>
<FilesMatch "(?i)\.png$">
ForceType image/png
</FilesMatch>
此代码放在.htaccess您的上传⽬录中的⽂件中,将仅允许将图像与其默认处理程序关联。其他所有内容将⽤作纯字节流,并且不会运⾏任何处理程序。
当然也可以“关闭PHP”解决⽅案(php_flag engine off),⾃⼰研究吧php如何运行代码
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论