检查URL是否已被篡改

时间:2011-11-22 00:38:42

标签: php

我正在尝试通过确保用户点击页面上的提交按钮来确保来自第2页的GET方法的参数(显示结果)不会被URL中的其他人(问号后面的变量)更改1(包含表格)。

教授要求我们使用isset()来实现这一要求

这是登录页面:(page1.php)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional   ...> <html
 xmlns="http://www.w3.org/1999/xhtml"> <head>   <title>Login
 Page</title> </head>

 <body> 

     <label>User ID:</label>
     <input type="text" name="uid">
     <br />
     <input type="submit" value="SubmitCredentials" name="SubmitCredentials"/>
      <br />
     </form> </body> </html>

这是第二页:(page2.php)

<?php
    // get the data from the form
    $uid = $_GET['uid'];

    if(!isset($_GET['SubmitCredentials'])){
        include('error.html');
        exit(); 
      }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional
    ...>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>HELLO</title>
</head>
<body>
        <label>Hello,</label>
        <span><?php echo $uid; ?></span><br />

</body>
</html>

但是,if语句似乎不起作用。当我更改网址中的变量error.html时(例如,当我将网址更改为uid时),我们应该将网页转发至http://localhost/1/page2.php?uid=admin,但事实并非如此。我该如何解决?

PS:我在google&gt;&gt;&gt;上找到的相关教程 http://www.homeandlearn.co.uk/php/php4p7.html

3 个答案:

答案 0 :(得分:1)

尝试:

if(!isset($_GET['SubmitCredentials'])){
        header('Location: error.html');
      }

答案 1 :(得分:0)

阵列上的Isset不安全。请尝试与===运算符进行比较:

if(!($_GET['SubmitCredentials'] === 'SubmitCredentials')) {
  include('error.html');
  exit(); 
}

答案 2 :(得分:-1)

页面#1:

<form method="GET" action="...">
    <input>
    <input>
    <input>
</form>

提交网址:

http://localhost/1/page2.php?SubmitCredentials=SubmitCredentials&uid=admin&i_like_php=yes&...