Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何阻止其他人发帖请求我的php_Javascript_Php_Ajax - Fatal编程技术网

Javascript 如何阻止其他人发帖请求我的php

Javascript 如何阻止其他人发帖请求我的php,javascript,php,ajax,Javascript,Php,Ajax,我有一个名为index.php的页面。这包含用户提交的表单。提交后,它将验证verify input.php中的输入,并将一些关键信息返回到index.php。从那里,index.phppost请求scanner.php~100次。这一切都是在不刷新index.php的情况下完成的 我的问题是,如何阻止其他网站或其他人发布请求verify input.php和scanner.php?我只希望人们能够在我的网站上调用这些文件(基本上,我不希望其他人为了自己的利益而使用我的verify input.

我有一个名为
index.php
的页面。这包含用户提交的表单。提交后,它将验证
verify input.php
中的输入,并将一些关键信息返回到
index.php
。从那里,
index.php
post请求
scanner.php
~100次。这一切都是在不刷新
index.php
的情况下完成的

我的问题是,如何阻止其他网站或其他人发布请求
verify input.php
scanner.php
?我只希望人们能够在我的网站上调用这些文件(基本上,我不希望其他人为了自己的利益而使用我的
verify input.php
scanner.php
API)

我已经为这些文件添加了下面的代码,但我认为这并不重要。我在PHP方面相当不错,但在javascript方面很糟糕


index.php

水果(唯一正确的输入是:香蕉)

提交 $(文档).ready(函数(){ $(“#提交”)。单击(函数(e){ e、 预防默认值(); $(“#提交”).attr(“已禁用”,真); $(“#提交”).html(“验证用户名”); var fruitName=$(“#fruit name”).val(); $.ajax({ 类型:“POST”, url:“验证输入.php”, 数据类型:“json”, 数据:{ 果名:果名 }, 成功:功能(数据){ 如果(data.code==200){ $(“#提交”).html(“运行扫描”); (异步函数(){ var FROUTID=data.FROUTID; var min=1; 而(最小值<60){ 等待扫描(水果ID,最小值,最小值+30); 最小值=最小值+30; } $(“#提交”).html(“提交”); $(“#提交”).attr(“已禁用”,错误); })(); }否则{ $(“#提交”).html(“提交”); $(“#提交”).attr(“已禁用”,错误); $(“.display error”).html(“
    ”+data.msg+”
”); $(“.display error”).css(“display”、“block”); } } }); }); }); 功能扫描(vFruitId、最小值、最大值){ 返回$.ajax({ 类型:“POST”, url:“scanner.php”, 数据类型:“json”, 数据:{ vFruitId:vFruitId, 敏:敏,, 马克斯:马克斯 }, 成功:功能(数据){ data.forEach((项目,idx)=>{ $(“#结果”)。追加(` 卡路里:${item.sweetness} 甜度:${item.carries} 苦味:${item.sarress}
`); }) } }); }

verify-input.php
研究CSRFtokens@Phil我搜索了CSRF令牌,它字面上说你不应该只使用PHP会话,因为黑客可以操纵它?那么你链接的帖子中的答案就是只使用会话?你能提供那篇文章的链接吗?或者你看到它的地方吗?@Phil还有一个关于StackOverv的问题下面是您提供的链接。在验证CSRF令牌的
部分,它有一行
if(hash_等于($\u SESSION['Token',$\u POST['Token])
。这意味着
$\u POST['Token']
是HTML表单中的隐藏字段吗?正确,但您也可以将其添加为请求头。它只需以某种方式伴随任何请求。我通读了整篇文章,其中没有提到不使用会话。研究CSRFtokens@Phil我搜索了CSRF令牌,它字面上说您不应该只使用PHP会话b因为黑客可以操纵它?那么你链接的帖子中的答案就是使用会话?你能提供那篇文章的链接或你看到它的任何地方吗?@Phil还提出了另一个关于stackoverflow链接的问题。在
验证CSRF令牌
部分,它有这行
if(hash_equals($\u SESSION['token'],$\u POST['token'])
。这意味着
$\u POST['token']
在HTML表单中是一个隐藏字段?正确,但您也可以将其添加为请求头。它只需以某种方式伴随任何请求。我浏览了整篇文章,其中没有提到不使用会话。
<script type="text/javascript" src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<div class="display-error" style="display: none"></div>
<form>
  <label for="fname">Fruit (only correct input is: banana)</label><br>
  <input type="text" id="fruit-name" name="fruit" value="banana"><br>
  <button type="submit" id="submit" value="Submit">Submit</button>
</form>

<div id="results">
</div>

<script type="text/javascript">
$(document).ready(function() {


    $('#submit').click(function(e) {
        e.preventDefault();

        $("#submit").attr("disabled", true);
        $("#submit").html("Verifying Username");
        var fruitName = $("#fruit-name").val();

        $.ajax({
            type: "POST",
            url: "verify-input.php",
            dataType: "json",
            data: {
                fruitName: fruitName
            },
            success: function(data) {
                if (data.code == 200) {
                    $("#submit").html("Running Scan");
                    (async function() {
                        var fruitID = data.fruitId;
                        var min = 1;
                        while (min < 60) {
                            await scan(fruitID, min, min + 30);
                            min = min + 30;
                        }
                    $("#submit").html("Submit");
                    $("#submit").attr("disabled", false);
                    })();
                } else {
                    $("#submit").html("Submit");
                    $("#submit").attr("disabled", false);
                    $(".display-error").html("<ul>" + data.msg + "</ul>");
                    $(".display-error").css("display", "block");
                }
            }
        });


    });
});

function scan(vFruitId, min, max) {

    return $.ajax({
        type: "POST",
        url: "scanner.php",
        dataType: "json",
        data: {
            vFruitId: vFruitId,
            min: min,
            max: max
        },
        success: function(data) {
            data.forEach((item, idx) => {
                $("#results").append(`
                <div class="fruit-item" data-item="${idx}">
                    <div class="f-calories">calories: ${item.sweetness}</div>
                    <div class="f-sweetness">sweeteness: ${item.calories}</div>
                    <div class="f-bitterness">bitterness: ${item.bitterness}</div>
                </div><br>
              `);
            })
        }
    });

}

</script>
<?php

if (isset($_POST['fruitName'])) {
    echo(is_valid($_POST['fruitName']));
}

function is_valid($fruit) {
    // Verify post data is valid and correct
    $names = ['Banana cake', 'Banana pancake', 'Banana bread'];
    $colors = ['Yellow', 'Blue', 'Green', 'Purple', 'Black'];
    sleep(2);
    if ($fruit == "banana") {
        $result['code'] = 200;
        $result['fruitId'] = rand(1, 9999999);
        $result['msg'] = "YAY SUCCESS";
        $json = json_encode($result);
        return $json;
    }

    $result['code'] = 400;
    $result['msg'] = "ERROR! The correct fruit is banana";
    $json = json_encode($result);
    return $json;
}
<?php
ini_set('max_execution_time', '300');


define('MAX_SCAN', 30);

if (isset($_POST['vFruitId']) &&
    isset($_POST['min']) &&
    isset($_POST['max'])) {

    $result = roomscanner($_POST['vFruitId'], $_POST['min'], $_POST['max']);
    $json = json_encode($result);
    file_put_contents("result.txt", $json);
    echo($json);
}

function roomscanner($fruitId, $min, $max) {

    $result = [];

    $i = $min;
    while ($i < $max) {
        if ($i % 3 == 0) {
            $curr['sweetness'] = rand(20, 29);
            $curr['calories'] = rand(30, 39);
            $curr['bitterness'] = rand(30, 39);

            $result[] = $curr;
        }
        sleep(rand(0, 1));
        $i++;
    }

    return $result;

}