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;
}