PHP表单 - 在编辑数据时使表单更安全

时间:2014-09-10 05:07:38

标签: php forms security

假设我有一个用户可以编辑个人资料的网站。

<form action="profile-processor.php?action=edit&id=888" method="POST">
    <input type="text" name="name"/>
    <input type="submit"/>
</form>

profile-processor.php包含:

if(!empty($_GET["action"])) {
    if($_GET["action"] == "edit") {
       $query = "UPDATE TABLE users SET name = ".$_POST["name"]." WHERE id = ".$_GET["id"];

    ... ... ... 
    }
}

如果与此Web应用程序无关的人创建HTML表单,并且在操作中他将“profile-processor.php?action = edit&amp; id = xx”并发送数据,该怎么办?它会编辑,就好像它是从它自己的网站发送的那样吗?

你可以做些什么来隐藏行动或至少是关键细节,如

<form action="process.php?action=SOMETHING_I_DONT_WANT_YOU_TO_SEE&id=THE_ID_YOU_SHOULD_NOT_KNOW">
</form>

我正在创建一个Web应用程序,它有很多可以编辑数据库信息的表单,我只是想确保我有一些关键的安全性。

修改:::::::

我知道如何完美地使用PDO和Prepared Statements,这个问题更多的是关于向服务器端控制器发送信息的客户端内容。

3 个答案:

答案 0 :(得分:1)

我找到的最好的方法是使用会话变量,为每个用户创建一个随机令牌,并验证用户是否真的在

中。

另一种方法是生成随机代码并将其发送到隐藏字段

<form action="profile-processor.php?action=edit&id=888">
    <input type="text" name="name"/>
    <input type="submit"/>
<input type="hidden" name="token" value="{generate random number here}" />
</form>

然后验证令牌是否真的存在于process.php

答案 1 :(得分:1)

首先,如果您的用户正在编辑他的个人资料,那么他已登录,对吧?那你为什么要允许id传入呢?您已经知道用户ID,最有可能来自会话。此示例中表单中您需要的唯一数据是要更新的信息。

其次,您发布的查询易受SQL注入攻击。关于SO的问题很多,以说明如何解决这个问题。

最后,为了解决其他问题,虽然在修改内容时应该使用POST数据,但它绝不比GET更安全。

答案 2 :(得分:0)

使用POST方法代替GET