在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,他们会得到折扣)
答案 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"];