为什么双句点(“..”)在WordPress图像文件名中无效?

时间:2014-01-23 作者:rinogo

ms-files.php 包含以下代码片段:

$file = rtrim( BLOGUPLOADDIR, \'/\' ) . \'/\' . str_replace( \'..\', \'\', $_GET[ \'file\' ] );
if ( !is_file( $file ) ) {
    status_header( 404 );
    die( \'404 — File not found.\' );
}
此代码确定是否可以找到该文件。然而,我发现它做了一些事情。。。古怪的删除所有双句点(“…”)从字符串。通常情况下,这并不重要,但我们已经让用户上传了连续两个句点的文件(叹气),导致这部分代码错误地报告代码404(未找到)。

我很想删除这段代码奇怪的双周期删除特性,但我担心我会无意中破坏其他内容。为什么在编码时会出现此功能?

谢谢!:)

编辑:要清楚的是,双句点在Wordpress中似乎不是无效的,但它们不能由这段代码提供。。。所以,它们不是无效的,但当通过该机制访问时,404被错误地报告。

1 个回复
SO网友:rinogo

看起来这是一个缺陷。伊什。

正如@s\\u ha\\u dum所提到的,这是为了防止目录遍历攻击。然而,Wordpress的媒体库很乐意让你上传一个连续有两个或更多句点的文件,即使是ms文件。php将拒绝提供它。

因此,从技术上讲,没有什么是“坏的”,但这肯定不是理想的。有一个补丁可以防止出现这种情况,但它似乎从未实际添加到核心:

https://core.trac.wordpress.org/attachment/ticket/16189/check%20for%20double%20periods.diff

有关此缺陷的详细信息:https://core.trac.wordpress.org/ticket/12756

结束

相关推荐

How to debug a blank page?

我无法加载this page, 虽然我可以轻松加载所有其他加载相同内容的帖子custom post type template (请查找“/”,从现在起,WP将在该模板上弹出一个空白页“以确定发生这种情况的确切位置)。打开调试时,我只得到:Notice: wpdb::escape is deprecated since version 3.6! Use wpdb::prepare() or esc_sql() instead. in /nfs/c01/h04/mnt/38315/domains/joao.