我需要实现一个安全的 PHP 文件上传脚本。您当前使用哪些方法来确保您的脚本是安全的?
我会将允许的扩展列入白名单,并确保 Apache 以用户身份运行,以避免默认情况下需要 777 权限。
上传的文件将是图像,我有 MySQL 访问权限。上传后,用户需要能够看到他们的文件。
谢谢!
有关避免上传恶意文件的一些建议,请参阅如何阻止人们上传带有注射的 GIF?.
另一个重要的事情是避免 SQL 注入。任何可以被攻击者修改的数据(cookies、用户代理、查询字符串、POST 数据(包括上传的文件名)、标题、动态路径名等)都不应在未通过mysql_real_escape_string
或MySQLi 等效项之前使用。如果是整数,请使用该intval()
函数。
按照您所说的检查文件扩展名,但要验证具有正确扩展名的上传文件实际上是它所说的内容,请尝试使用 verify 命令通过 imagemagick 运行它。这是一个简单的解决方案,似乎是为数不多的方法之一,可以毫无疑问地保证图像与它声称的一样。
此外,使用 PHP 函数is_uploaded_file来增加额外的安全级别。
希望这是不言而喻的,但 PDO 应该用于 PHP 各个方面的数据库事务。
最后,请记住,如果您使用 javascript 进行任何验证,它很容易被半熟练的网络用户覆盖。客户端验证对用户的响应速度更快,但始终通过适当的服务器端检查来支持它。