Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP表单-使表单在编辑数据时更安全_Php_Forms_Security - Fatal编程技术网

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

PHP表单-使表单在编辑数据时更安全,php,forms,security,Php,Forms,Security,假设我有一个网站,用户可以编辑他的个人资料 <form action="profile-processor.php?action=edit&id=888" method="POST"> <input type="text" name="name"/> <input type="submit"/> </form> 如果某个与此web应用程序无关的人创建了一个HTML表单,并在操作中输入“profile processor.p

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

<form action="profile-processor.php?action=edit&id=888" method="POST">
    <input type="text" name="name"/>
    <input type="submit"/>
</form>
如果某个与此web应用程序无关的人创建了一个HTML表单,并在操作中输入“profile processor.php?action=edit&id=xx”并发送数据,该怎么办?它会像从自己的网站发送一样进行编辑吗

你能做些什么来隐藏动作或至少是关键的细节,比如

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

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

编辑:


我知道如何完美地使用PDO和准备好的语句,这个问题更多的是关于客户端人员向服务器端控制器发送信息。

使用POST方法而不是GET

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

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

<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中是否存在令牌realy,如果您的用户正在编辑其配置文件,则他已登录,对吗?那你为什么要允许这个id被传入呢?您已经知道用户id,很可能是从会话中知道的。在本例中,您需要从表单中获取的唯一数据是要更新的信息

其次,您发布的查询容易受到SQL注入的攻击。有很多问题,所以,以显示如何解决这一问题


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

使用POST而不是GET?隐藏的输入实际上会隐藏所发送元素的名称和值吗。你可以在看到源代码时看到它们谢谢你的回答。。。目标脚本是否仅从其工作的web应用程序接收POST数据?或者它可能从外部web表单接收POST数据。是的。使用POST方法提交表单时,它只接受POST数据,如果(!empty($\u POST[“submit”]){}$\u GET有不同的用途,则可以使用
签入脚本。为了更安全,请使用POSTmethod@RobertDeanPantino您可以将数据发布到另一个域。应该在此处使用post,因为您正在修改资源,但从get更改为post并不能保证此表单的安全。谢谢。是的,正如我在问题编辑中所说的,我已经知道了关于查询安全性的一切,我只是想确保我也能更好地了解客户端的东西,从而使我的应用程序更安全。谢谢你的回答!将来我不会在您的问题中发布sql注入问题的代码。如果你把它作为你的例子,我们怎么知道你知道要避免呢。我甚至会编辑这个问题来显示你在做什么。
<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>