0

在 page1.php 上,我有一个通过 POST 将变量发送到 page2.php 的表单。但是,我只想处理从 page1.php 调用的表单。

我该如何检查?

亲切的问候!

编辑:这是一种安全措施。如果我是一名黑客并且我从页面源复制表单代码并运行它,我可以更改关键变量。

EDIT2:
好的,这是实际问题:
用户可以编辑他们帐户的信用。他们可以选择从 5EUR 到 50EUR 的值。
最终他们来到一个页面'deposit.php',最终表单被发送到页面'payments.php',然后将var发送到Paypal。

存款.php:

<form class="paypal" action="paypal/payments.php" method="post" id="paypal_form" target="_blank">    
<input type="hidden" name="cmd" value="_xclick" /> 
<input type="hidden" name="no_note" value="1" />
<input type="hidden" name="lc" value="BE" />
<input type="hidden" name="currency_code" value="EUR" />
<input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynow_LG.gif:NonHostedGuest" />
<input type="hidden" name="item_number" value="50" / >
<input type="hidden" name="price" value="47.50" / >
<input type="submit" class="uibutton " value="Betaal met Paypal" style="width: 100%; font-size:120%;">

(顺便说一句,如果他们加 50 欧元,他们会得到折扣)

4

5 回答 5

3

嗯,首先你必须明白,没有你所说的安全措施。当然,其他参与者提供的任何方法都无法保护您的“关键变量”。他们实际上是在回答另一个问题,一个他们更熟悉的问题。

表格旨在由客户方填写。因此,您不能期望任何变量都不会受到影响。无论您采取什么措施,来自客户端的所有内容都可能被欺骗。

因此,任何“关键变量”都应该保留在服务器上。
虽然来自表单的所有数据都应被视为不安全并进行相应处理。

于 2012-12-27T18:28:35.360 回答
1

根据应用程序,您可以使用$_SERVER['HTTP_REFERER']并进行检查,但问题是并非所有浏览器都发送它,并且用户可以修改它。因此,如果这仅适用于您认识的少数人,那可能不会有问题。如果这是针对世界的,则不推荐。

我通常做的是在第 1 页设置会话,然后在第 2 页检查该会话。每次第 1 页加载时,您都需要重置会话。

page1.php

<?php
session_start();
$hash = $_SESSION['hash'] = md5(time().rand(0,100));
?>
<form action="page2.php" meethod="post">
    <input type="hidden" name="h" value="<?php echo $hash; ?>" />
    Your Name: <input type="text" name="name" />
</form>

page2.php

<?php
session_start();
if($_SESSION['hash'] != $_POST['h']){
    header("Location: page1.php");
    exit;
}

// process data
于 2012-12-27T18:20:40.143 回答
0

我认为亚当 D的反应太弱了(任何人都可以使用萤火虫来改变)。您要防止的是用户跳过某些步骤或避免XSRF

在那种情况下,我会说使用会话

  • 创建会话
  • 保存当前步骤
  • 检索并验证当前步骤并根据该值暂停或继续
于 2012-12-27T18:21:02.553 回答
-2

在您的表单中,包含一个隐藏字段,然后您会在 上进行检查page2.php。见下文:

<form action="post.php" method="POST">
  <input type="text" name="fname" id="fname" />
  <input type="hidden" name="cameFromPageOne" value="true" />
</form>

然后,在顶部page2.php,检查是否设置了隐藏变量,如果没有,则重定向回page1.php

<?php

if(!isset($_POST['cameFromPageOne']) || $_POST['cameFromPageOne'] != 'true') {
  header('location: http://www.example.com/page1.php');
  exit();
} else {
    // ... code to process if they DID come from page1.php
}

?>
于 2012-12-27T18:17:03.393 回答
-3

没有理由让它过于复杂,PHP 中有一个全局变量,它告诉你当前脚本的请求地址:

echo $_SERVER["HTTP_REFERER"];
于 2012-12-27T18:22:40.037 回答