从Url发送数据的替代方式


Alternate way To send data From Url?

我正在开发一个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&名称在url上不应可见。请指导我,我知道这是PHP的基本功能,我只想找到替代或安全的解决方案。我知道我使用get发送数据,但有没有其他方法可以在不使用tag的情况下将数据发送到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>

和在项目上。php

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

它有效。。。!!

使用post变量。如果你试图从HTML发送,你唯一的办法就是更改这个:

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

对此:

<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>

如果你想让连接真正安全,最好的选择是使用HTTPS。

关于加密注意事项,请记住哈希是单向的。您不能使用哈希算法对名称进行"加密"并使其在行尾可读。但是,如果您希望以这种方式处理通过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=

默认情况下,在URL中发送的任何内容都可以让任何人看到、使用和滥用。

话虽如此,有时你只是以这种方式发送。你不能使URL中的数据安全,通过可以使你的代码以安全的方式处理它。

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

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

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

编辑:

您应该将代码更改为:

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

首先,为了让普通人更难在URL中伪造用户ID,请使用POST方法或使用bCrypt在URL中传递哈希。

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

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

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