我刚刚完成了一个当前项目,添加了必要的代码来防止SQL注入、XSS等。然而,我想知道通过文件上传执行SQL注入有多容易?
有人知道这方面的知识吗?
您应该清除任何用户提供的输入。这包括$_FILES。例如,如果将上载的文件名存储在数据库中,则攻击者可能会利用此漏洞。
qbert220已经正确回答了这个问题,但我想添加一个额外的注释。
你应该确保文件是正确的MIME类型,否则,如果你希望上传一个图像然后显示,如果"讨厌的用户"上传了一个php脚本,它可以在你的服务器上运行,并对脚本做任何你能做的事情。
这取决于您的应用程序需求。如果您正在创建图像库并希望标记上传的图像,则可能需要将图像的数据添加到数据库中。为此,您可能需要将$_FILES['image']['name']
的内容放入数据库中,然后如果不转义其值,则可以进行SQL注入。
例如,如果您要将文件名插入数据库,则可以执行此操作。
mysql_query("INSERT INTO images VALUES ('".$_FILES['upload']['name']."');"); //this is injectable
如果给定的输入可以用于SQL注入,请转义发送到数据库的任何变量。当您输出变量时,XSS也是如此。不要信任$_SERVER或任何其他超全局。也不要信任您的变量(那些在代码中初始化的变量)。