【问题标题】:How to prevent users from entering a variable directly into the URL?如何防止用户直接在 URL 中输入变量?
【发布时间】:2015-02-08 16:38:42
【问题描述】:

Index.html

<a href='" . $_SERVER['PHP_SELF'] . "?file=" . $file . "' id="okok">

    <form action="do" method="post">
        <textarea class="source"><?php if(!empty($thesource))echo $thesource; ?>
    </textarea>
        </form>



<script>
$("#okok").click(function(e) {
            e.preventDefault();
            var url = $(this).val("href");
            $.get(url, function(data) {
                        $(".source").html(data); //or append }); });
</script>

基本上,这里发生的是当用户点击链接(a href="one.html")时,它会将“one.html”的内容显示到文本区域中。

一旦用户点击该链接,页面将刷新,URL 将重写为http://example.com?file=one.html

由于“one.html”包含在变量“file”中,它将收集文件“one.html”中包含的所有内容并显示在textarea中。简而言之,变量 'file' 中的任何内容都会显示在 textarea 中。

这样做的问题是任何人都可以从 URL 中将“one.html”重命名为“do.php”,所以现在“do.php”中的内容将显示在文本区域中,这意味着任何人都可以查看该文件的 PHP 代码。

如何防止用户在 URL 中输入变量,或在 URL 中输入任何 PHP 文件名?

我相信我可以使用 htaccess,但我不知道该放什么

【问题讨论】:

  • 不要将要包含的文件名放在 URL 中。它解决了这个问题并修复了您系统中的一个巨大安全漏洞。

标签: php .htaccess url url-rewriting


【解决方案1】:

您无法控制某人将向您的服务器发送什么请求。

您需要:

  1. 测试是否允许他们在执行请求之前发出请求(例如,有一个可接受的文件名列表或有这样的列表并将其与特定的用户名/密码组合相关联)
  2. 在服务器上硬编码值

【讨论】:

  • 存在第三种可能:在链接中添加控制码(校验和)
猜你喜欢
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多