在 url 中发送用户的用户名和电子邮件是否不安全


Is it unsafe to send a user's username and email in the url?

我正在开发一个网站,用户可以在主页上输入他们的用户名、电子邮件和密码来创建他们的帐户,然后他们点击"创建帐户",它会进入一个 php 脚本,该脚本检查是否有任何空白,是否使用了用户名,等等,非常标准的东西。如果在创建帐户时出现错误,将用户重定向回主页并在 url 中使用他们的用户名和电子邮件以重新填充输入是否不安全?

对于您的具体情况,会话效果最好:

session_start();
...
//if username or email taken, save in session
$_SESSION['taken_name'] = $username;
$_SESSION['taken_email'] = $email;
//redirect user
header('Location: home.php');

然后在家检索值.php

session_start();
... 
$username = $_SESSION['taken_name']? : null;
$email = $_SESSION['email']? : null;

然后,您可以在主页上需要它们的任何位置使用$username$email

一般来说,只要这是您网站上的公开信息,就可以在URL中包含用户名。在大多数情况下,这是向公众显示的信息(这是用户如何看待彼此)。 许多最大的网站,包括facebooktwitter,甚至允许用户使用他们的名字创建自定义URL。 如果您正在运行的网站甚至用户名都是私有的(用户看不到彼此),那么不要将其放在URL中。

电子邮件是另一回事。电子邮件地址通常被认为是私有的,所以我不会将它们包含在 URL 中。它使用户面临更多的垃圾邮件,因为URL链接一直在报废。

您的 URL 永远不应该包含用户名和电子邮件等数据。我建议你改用会话。

您要重定向的页面(假设它是 check.php),请确保将数据和状态存储在会话中。

检查页面:

// check.php
/* If sign up fails */
$_SESSION['reg_fail'] = array(
    'username' => ....,
    'email'    => '....
);
header(Location:.....); // Redirecting to the home page

主页:

session_start();    // Write this on top of the page.
 /* Other code */
<input name="username" value=<?php echo @$_SESSION['reg_fail']['username'] ?>>
<input name="email" value=<?php echo @$_SESSION['reg_fail']['email'] ?>>
执行此操作

的理想方法是在提交表单后使用 $_GET 方法。使用输入标签上的value属性。在 URL 中包含任何敏感信息是不安全的。

<input type="text" value="<?php if(isset($_POST['submit'])) { echo $_GET['input_name']; } ?>"

这是假设您的 PHP 脚本在验证后重定向回来以显示任何错误。