检查是否从正确的页面调用表单

时间:2012-12-27 18:12:28

标签: php forms

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

调用的表单

如何检查?

亲切的问候!

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

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

Deposit.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%;">

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

5 个答案:

答案 0 :(得分:3)

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

表格旨在由客户方填写。所以,你不能指望任何变量都不会被触及。无论您采取何种措施,来自客户端的一切都可能会被欺骗。

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

答案 1 :(得分: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

答案 2 :(得分:0)

我认为 Adam D 的反应太弱了(任何人都可以使用firebug来改变它)。您要阻止的是用户跳过某个步骤或避免XSRF

在这种情况下,我会说使用sessions

  • 创建会话
  • 保存当前步骤
  • 检索并验证当前步骤,并根据值
  • 停止或继续

答案 3 :(得分:-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
}

?>

答案 4 :(得分:-3)

没有理由过度复杂化,PHP中有一个全局变量告诉你你当前脚本的请求来自:

echo $_SERVER["HTTP_REFERER"];