1

我正在开发一个 Web 应用程序,我想在其中进行一些安全限制,并想知道以安全方式从 URL 发送数据或 id 的替代方法。例如:

$id=$row=['id'];
$name=$row['name'];

<a href="projects.php?project_id=<?pho echo $id; ?>&name=<?php echo $name; ?>">

那么有没有其他方法可以安全地将这两个属性发送到 project.php ?我只希望 id & name 不应该在 url 上可见。请指导我,我知道这是 PHP 的非常基本的功能,我只想找到替代或安全的解决方案。我知道我正在使用 get 发送数据,但是有没有其他方法可以在不使用标签的情况下将数据发送到 project.php?

在所有评论和回答之后我尝试了这个,所以答案是:

<?php
$id="1";
$name="Harshal";
?>
<a href="projects.php?id=<?php echo base64_encode($id) ?>&name=<?php echo base64_encode($name) ?>">Send</a>

和projects.php

<?php
echo $idd=base64_decode($_GET['id']);
echo $namme=base64_decode($_GET['name']);
?>

有用...!!

4

5 回答 5

2

在加密说明中,请记住哈希是单向的。您不能使用散列算法“加密”名称并使其在行尾可读。但是,如果您想以这种方式处理通过 HTTP 传输的加密数据,您可以使用例如 mcrypt。然后面对以浏览器安全的方式输出生成的二进制数据的问题,您应该依赖 Base64 编码。

例如:

$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, 'passkeyhere', 'My name', MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND));
echo base64_encode($crypttext);

输出:

rLXuVMlI9DWgF96peQ5IREexDk4XBwCn+34SEuy5eH4=
于 2012-09-06T08:32:54.650 回答
2

Using post variables. If you're trying to send this from HTML, your only recourse is changing this:

<a href="projects.php?project_id=<?php echo $id; ?>&name=<?php echo $name; ?>">

To this:

<form action="projects.php" method="post"><input type="hidden" name="project_id" value="<?= $id ?>"/><input type="hidden" name="name" value="<?= $name ?>"/><input type="submit" value="Send name"/></form>

If you want to make the connection actually secure, your best option is using HTTPS.

于 2012-09-06T08:24:52.177 回答
1

默认情况下,在 URL 中发送的任何内容几乎都可供所有人查看、使用和滥用。

话虽如此,有时您只需这种方式发送即可。你不能使 URL 中的数据安全,你可以让你的代码以安全的方式对待它。

例如,如果您通过 URL 传递数据并简单地显示数据,那么任何人都可以更改 URL 位并查看他们不应该看到的信息。但是,如果您通过 URL 和您的代码发送数据,然后执行检查以查看用户是否能够看到它,这突然变得更加安全。

另一种快速方法是提供一个链接,将数据复制到会话中并将用户重定向到新页面 - 根据会话中的信息向他们显示他们想要的内容 - 并再次验证他们确实被允许查看它。

请记住,任何人都可以在几秒钟内编辑 URL。发布数据确实并没有太大的不同 - 尽管可能需要更多的努力来捏造。为了保护它,您需要确保您拥有的代码能够以安全的方式处理它。

编辑:

您应该将代码更改为:

<?php
$id="1";
$name="Harshal";
?>
<a href="projects.php?id=<?php echo base64_encode($id); ?>&name=<?php echo base64_encode($name); ?>">Send</a>
于 2012-09-06T08:25:55.143 回答
1

首先 - 让普通人更难在 URL 中伪造用户 ID 等,要么使用 POST 方法,要么使用bCrypt在 URL 中传递哈希值。

其次,您最好在您的 URL 中使用 SSL - https:// 以防止耳漏。

于 2012-09-06T08:26:01.083 回答
0

在网页(包括 PHP)之间传递数据的方法是通过 GET 和 POST。POST 隐藏它但不会将其从查看中删除,它仍然是请求中的纯文本。如果您强制使用 https 连接并使用 POST,则信息将隐藏在 post 请求中,并使用密钥为您加密和解密。

如果您只想在幕后完成,您可以使用 ajax 发送和接收数据而无需提交页面。

于 2012-09-06T08:26:01.197 回答