2 回答
TA贡献1887条经验 获得超5个赞
要对 URL 中的保留实体(特殊字符)进行编码,请使用百分比编码。
例如,感叹号!
被编码为%21
。对于您提到的字符,您可以查阅 ASCII 表来了解其值应该是什么。
我在想,也许我不会给用户一个命名文件夹并直接使用 mkdir 创建的机会,而是将他们选择的文件夹名称上传到数据库并创建一个仅具有递增值的文件夹。
是的,您绝对不应该让用户选择磁盘上文件的名称。如果您这样做并且不非常小心,则可能会受到一系列攻击。最常见的情况是用户上传可执行内容,或使用相对路径写入其他位置。例如,他们可能会上传something-evil.php
,并且您的网络服务器可能配置错误,并且在访问 时实际上运行了他们的代码https://example.com/uploads/something-evil.php
。或者,也许他们上传类似内容../../../../etc/init.d/evil-script
并在您的服务器上运行。
正如您所提议的那样,通过不允许用户控制文件名来完全避免问题更容易。只需确保它们无法覆盖其他文件,或者根本无法命名这些文件,即使它们位于另一个文件夹中。
现在,让我们检查一下您的代码......
$chapterDir = scandir("series/" . $seriesGet . "/");
这很危险!用户指定要读取的路径。正如我上面所说,您实际上允许他们插入相对路径并读取 PHP 可以读取的任何内容。配置错误的 Web 服务器很常见,您不希望它们从存储中读取不应该读取的内容。
echo "<a href='testScript.php?series=". $seriesDir[$arrayStart] ."'>"...
切勿将任意数据连接到 HTML 上下文中!这里实际上存在多个问题。首先,您必须对 URL 中使用的任何内容进行 URL 编码。使用urlencode()
。其次,您的数据不会针对 HTML 进行转义,因此某些数据可能会在某些脚本标记或其他内容中泄漏,甚至只是使您的 HTML 无效。使用htmlspecialchars()
您注入到 HTML 中的任意数据,即使它是您自己的可信数据。您要将数据从一个上下文移动到另一个上下文,并且需要对其进行正确转义。
- 2 回答
- 0 关注
- 101 浏览
添加回答
举报