gpt4 book ai didi

php - 通过 get 传输数据,url 中的 php 和安全性

转载 作者:可可西里 更新时间:2023-11-01 07:52:52 26 4
gpt4 key购买 nike

这是第一个问题,我需要你的帮助。

我使用 php 中的 header 定位方法将表单数据从第一页传输到第二页。

在第二页上,我使用 get 接受数据。

现在这里是第二页的 url,数据发送后(即提交表单)

http://mydomain.com/site1/form1_conf.php?id=123

当用户在第二页时,第二页的数据根据​​mysql数据库中的id号显示。

现在的问题是,当用户在第二个页面上并且他更改了数字(例如 123 说 78)时,会显示数据库中 id=78 的数据,这是不好的。

我怎样才能阻止它?

请注意:我不能使用 post,也不能使用 session。

编辑:

第一页的php代码,转移到第二页:

// after all validations are okay
$insert = //insert into database
$result = mysql_query($insert);
if($result)
{
echo("<br>Input data is succeed");
$lastInsertedId = mysql_insert_id();
header('Location:form1_conf.php?id='.$lastInsertedId); //THIS IS THE IMPORTANT LINE
}
else
{
$message = "The data cannot be inserted.";
$message .= "<br />" . mysql_error();
}

最佳答案

您的问题不在于 URL:对于高级用户而言,更改 cookie 或 POST 变量与为普通用户编辑 GET 变量一样微不足道。您需要某种方式来“签署”有效的请求。

最简单的方法是使用“预共享 key ”,您可以将其与单向哈希一起使用以验证请求。

重定向器:

$newURL = '/newpage?id='.$id.'&hash='.sha1('mypresharedkey'.$id);
header('HTTP/1.1 303 See other');
header('Location: '.$newURL);
die;

其他页面:

$idToShow = $_GET['id'];
$hash = sha1('mypresharedkey'.$id);
if($hash != $_GET['hash'])
die("Tssss, don't play with the address bar!");
else
RenderThePage();

这确保最终用户只能访问提交允许他们访问的页面。


对于您的特定代码:

...all prior code
$lastInsertedId = mysql_insert_id();
$timestamp = time();
header('Location:form1_conf.php?'.http_build_query([
'id' => $lastInsertedId,
'time' => $timestamp,
'hash' => sha1('some-generated-key'.$timestamp.$lastInsertedId)
]);

在另一页中,如果需要,可以包括一个定时炸弹(否则只需将其注释掉):

$id = $_GET['id'];
$time = $_GET['time'];
if($_GET['hash'] != sha1('some-generated-key'.$time.$id))
die('URL was tampered with');
if(time() - $time > 300)
die('URL was only valid for 5 minutes');

关于php - 通过 get 传输数据,url 中的 php 和安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17950257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com