2

我创建了一个网站(纯粹的爱好)。我基本上在做的是使用 jquery 在后台调用所有 ajax。是的,它不会受到 SQL 注入的影响,因此不会造成任何伤害,但是我不希望用户检查 firebug/developer 工具并尝试使用 URI 并在 URL 工具栏中手动输入它并获得结果。我怎么去阻止呢?

例如,用户在 URL 框中输入:www.something.com/datapull.php?get=Data&Person=Sean

我有类似的东西:

if(strpos($_SERVER['REQUEST_URI'],'/datapull.php') !== false) { header('Location: /'); }

但是当我这样做时,我的网络陷入了无限循环。我基本上希望网络始终处于:www.something.com

我如何在没有用户手动输入的情况下将其保存在该地址?

4

2 回答 2

2

要详细说明我的评论,你可以试试这个..

在 ajax 请求文件中,您可以检查是否$_SERVER['HTTP_REFERER']已设置,并包含您自己的域名..

这是一个简单的例子..

索引.php

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Ajax Test</title>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
    </head>
    <body>
        <div class="ajax_receiver">

        </div>
        <script>

            $('.ajax_receiver').load('data.php');

        </script>
    </body>
</html>

数据.php

<?php

    print_r($_SERVER);

如果您按原样运行它,您将看到$_SERVERHTTP_REFERER 的内容并且应该看到它。

我们现在需要做的就是向 ajax 请求页面(在本例中为 data.php)添加一个条件,以在未设置或不是来自我们域的请求时退出。

data.php(更新)

<?php
    if ( ! isset($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) === false)
    {
        exit;
        // or take whatever exit action you want here
    }
    print_r($_SERVER);

希望您可以使用它来帮助您入门。

于 2013-06-05T06:38:58.120 回答
0

我基本上在做的是使用 jquery 在后台调用所有 ajax。是的,它不会受到 SQL 注入的影响,所以不会造成任何伤害

对不起,如果我说它无助于防止 SQL 注入。

但是,我不希望用户检查 firebug/developer 工具并尝试使用 URI 并在 URL 工具栏中手动输入它并获得结果。

如果 Web 浏览器无法访问链接,那么您的 AJAX 也是如此。

于 2013-06-05T06:14:24.267 回答