PHP可能存在安全问题

时间:2011-08-01 09:45:42

标签: php javascript security

我正在开发一个提供导入/导出功能的Google Chrome扩展程序,在尝试实施另存为... 按钮时遇到了一些问题,因为我无法强制下载使用JavaScript动态创建的JSON字符串。

我最初想出了以下JavaScript解决方案;

$('#saveAsButton').live('click', function (event) {
    var str = JSON.stringify('{}');
    window.location = 'data:text/json;charset=utf8,' + encodeURIComponent(str);
});

但是,我无法建议用户将文件名或甚至扩展名保存为,并依赖于模拟MIME text/json始终需要下载。

为了解决这个问题,我计划在我的服务器上创建一个PHP脚本,当发布到该脚本时,只会强制下载所提供的字符串。但是,我的PHP知识(特别是关于安全性)并不是很棒,所以我想知道以下代码是否存在任何(至少是明显的)安全问题;

<?php

$category = strtolower(urldecode($_POST['category']));
$content = urldecode($_POST['content']);

switch ($category) {
    case 'json':
        $contentType = 'text/json; charset=utf-8';
        $fileExtension = 'json';
        break;
    default:
        $contentType = 'text/plain; charset=utf-8';
        $fileExtension = 'txt';
}

header('Cache-Control: public');
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename=export.' . $fileExtension);
header('Content-Type: ' . $contentType);

print $content;

?>

我已将另存为... 按钮包含在form元素中,该元素将调用此远程PHP代码,但我已修改原始侦听器以支持“离线”模式

$('#saveAsButton').live('click', function (event) {
    var str = JSON.stringify('{}'); // Simplified for purpose of example
    if (window.navigator.onLine) {
        $(this).parents('form').first().find('input[name="content"]').val(str);
    } else {
        // Fall back on "ugly" method
        window.location = 'data:text/json;charset=utf8,' + encodeURIComponent(str);
        event.preventDefault();
    }
});

所有PHP和JavaScript都能正常运行,我对结果很满意,所以如上所述,我只对PHP代码创建的任何可能的安全漏洞感兴趣。

提前致谢,如果需要,我会添加更多信息。

1 个答案:

答案 0 :(得分:1)

嗯,我可以看到的脚本唯一的“风险”是,如果有人不喜欢你,他们可能会一遍又一遍地请求带有大量“内容”的链接,从而耗尽带宽,

无论如何,你可以在某种程度上保护......但我确实怀疑这是不是一个问题。

为了使它变得更加困难,放气或gzip它。使用较小的包装可以加快速度。