是"文件夹/" .htmlentities($ _ GET [" location"])。" .filetype"安全?

时间:2014-06-10 12:36:24

标签: php

我试图通过查看我是否有用户所请求项目的图片来验证表单,因此我需要确保在检查图像/ 项目 .jpg时是否保留在images文件夹中存在。用户是否有任何方式可以从images目录向后搜索并选择一个无效的项目,或者这样可以验证我的表单?

<?php if(file_exists("images/".htmlentities($_GET["location"]).".jpg"): ?>

images文件夹中没有目录,所以我不必担心它们的项目名称中使用“/”。

2 个答案:

答案 0 :(得分:1)

即可。据我记忆所及,htmlentities()并未转义空字节\0,点.,斜杠/和反斜杠{{1} }。

空字节截断您的路径/文件名。点使得相对路径遍历(\ =当前目录,. =父目录,..(Windows)和\ =根目录。)

现在,请考虑将您插入的变量设为/,如果您计划甚至提供“&#39; image&#39;”,请担心。

答案 1 :(得分:0)

不,你应该总是使用pics /托管文件夹.htaccses来防止直接ACCSES:

我想补充一点:

 <FilesMatch "\.(htaccess|htpasswd|ini|php3|phps|fla|psd|log|sh|php|exe|asp|aspx|zip|html|js|htm|htpasswd|inc|bak|bmp)$">
 Order Allow,Deny
 Deny from all
</FilesMatch>

我还建议您使用HTMLPURIFIER要么更安全:

HTML Purifier

使用净化器,它看起来像:

<?php if(file_exists("images/".$purifier->purify($_GET["location"]).".jpg"): ?>