通过get,php在url和security中传输数据

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了通过get,php在url和security中传输数据脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
这是第一个问题,我需要你的帮助.

我使用PHP中的头位置方法将表单数据从第一页传输到第二页.

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

在这里是第二页的网址,在数据发送后(即提交表格)

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

用户在第二页时,第二页上的数据将根据MysqL数据库中的id号显示.

现在的问题是,当用户在第二页上并且他改变了数字(例如123,比如78)时,数据库显示id = 78的数据,这是不好的.

我怎么能阻止它?

请注意:我不能使用帖子,也不能使用会话.

EDITE:

第一页上的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变量一样简单.您需要某种方式将请求“签名”为有效.

最简单的方法是使用“预共享密钥”,您可以使用单向哈希来验证请求.

重定向

$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');

脚本宝典总结

以上是脚本宝典为你收集整理的通过get,php在url和security中传输数据全部内容,希望文章能够帮你解决通过get,php在url和security中传输数据所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: