2

我开发了一个小型应用程序联系人管理器,并在更新联系人时,使用 GET 方法发送联系人 ID。但是用户可以更改 ID 并编辑任何联系人,我该如何为其添加安全性?

<td>
    <a href="home.php?action=update&amp;contactid=<?php echo $contact->contact_id; ?>">Update</a>
</td>

http://localhost/contmanager/home.php?action=update& contactid=1

如果我将 id 更改为其他号码,则会出现另一个联系人。

4

3 回答 3

4

You can't control what the client asks the server to do.

If you want to add restrictions on who can modify particular contacts then you need to Authenticate (username + password, client SSL cert, OpenID, etc) users and then check if they are Authorized (this will depend on the business logic you decide on) to modify the entry in question.

于 2013-09-12T13:03:42.073 回答
2

As Quentin pointed out, your logic is going wrong here, data like these should be stored inside sessions and shouldn't be passed using $_GET or $_POST, unless and until required, if you still need to pass for some reason, than you can read my answer ahead for a solution.

Store the user id in a session, so when the user updates, just compare the session id and $_GET id, if it matches, update the entry else throw an error.

When the user logs in

$_SESSION['user_id'] = $db_data['col_name'];

Now, before the entry is updated...

if(!empty($_GET['user_id'])) {
  //First validate, you can check whether the id is only numeric, is valid db entry etc
  $user_id = $_GET['user_id']; //Store the id in a variable
} else {
  //Invalid
}


if($_SESSION['user_id'] == $user_id) { //Compare the ids
  //Process
} else {
  //Not Valid
}

Note: Make sure you use session_start() at the very top of the page, before you start writing anything.

于 2013-09-12T13:03:27.593 回答
2

您需要使用会话并将数据存储在其中,如下所示:

<?php
    session_start();
    $_SESSION['contact_id']=$contact->contact_id; 
    <td><a href=home.php?action=update&amp;">Update</a></td>
?>

像这样使用它:

http://localhost/contmanager/home.php?action=update

当您需要使用contact_id(在GET之后)时:

session_start();
if(isset($_SESSION['contact_id']) && !empty($_SESSION['contact_id'])){
   $contact_id=$_SESSION['contact_id'];
  
}

PHP 会话变量用于存储有关用户会话的信息或更改用户会话的设置。会话变量保存有关单个用户的信息,并且可用于一个应用程序中的所有页面。

PHP 会话变量

当您使用应用程序时,您打开它,进行一些更改,然后关闭它。这很像一个会话。电脑知道你是谁。它知道您何时启动应用程序以及何时结束。但是在互联网上存在一个问题:Web 服务器不知道您是谁以及您在做什么,因为 HTTP 地址不保持状态。

PHP 会话通过允许您将用户信息存储在服务器上供以后使用(即用户名、购物项目等)来解决这个问题。但是,会话信息是临时的,将在用户离开网站后被删除。如果您需要永久存储,您可能希望将数据存储在数据库中。

会话通过为每个访问者创建唯一 ID (UID) 并基于此 UID 存储变量来工作。UID 要么存储在 cookie 中,要么在 URL 中传播。

于 2013-09-12T13:12:04.823 回答