【问题标题】:How to require a form filled out correctly to access data?如何要求正确填写表格才能访问数据?
【发布时间】:2018-08-12 08:03:25
【问题描述】:

好的,所以我搜索了一下,似乎找不到任何我正在寻找的东西。

我正在努力完成的背景: 我有一个不需要登录信息的网站,因为它是一个机密网站,我不希望发布任何链接到任何 ONE 帐户的内容。所以我计划这项工作的方式是每当有人创建帖子时,您必须填写表格,例如...标题 - 信息 - 密码(简单的单词) - 密码(5位数字)从 10000 - 99999).

现在可以稍后访问的原因是,他们可以在创建帖子后编辑或删除帖子,而无需如上所述链接帐户来识别他们。

我有简单的以下代码来编辑代码,但我如何让它说 (passPhrase 和 passCode) 必须匹配以提取相关数据?在我进入编辑页面输入正确信息之前,我会有一个表格。

进入编辑页面的表单

<div id="form-holder">
        <form action="function/example.php" method="post"> 
            <h3>Pass ID:</h3>
            <input type="text" name="ID" id="ID">
            <h3>Passcode:<br /></h3>
            <input type="text" name="passcode" id="passcode">
            <p><input class="button" type="submit" value="Edit"></p>
        </form>
    </div>

编辑页面:

<?php
$server = "*****";
$user = "*****";
$pass = "*****";
$dbname = "*****";

//Creating connection for mysqli

$conn = new mysqli($server, $user, $pass, $dbname);

//Checking connection

if($conn->connect_error){
 die("Connection failed:" . $conn->connect_error);
}

$article_id = $_GET['id'];

if( ! is_numeric($article_id) )
  die("Looks like you are lost!  <a href='#'>Back to Home</a> ");

$query = "SELECT * FROM `DBname` WHERE `ID` =$article_id LIMIT 0 , 30";

$comments = mysqli_query($conn,$query);

while($row = mysqli_fetch_array($comments, MYSQL_ASSOC))
{

    $title = $titleHere['title'];
    $info = $infoHere['info'];

    $title = htmlspecialchars($row['title'],ENT_QUOTES);
    $info = htmlspecialchars($row['info'],ENT_QUOTES);

echo "<form action='function/update-post.php?id=$article_id' method='post'>";
echo "<h3>Title:</h3>";
echo "<input type='text' name='title' id='title' value='$title'>";
echo "<h3>info:</h3>";
echo "<textarea name='info' id='info'>$info</textarea>";
echo "<p><input class='button' type='submit' value='Update'></p>";  
echo "</form>";
}
?>

我找到了许多关于基于帐户的解决方案的指南,我想这就是这个请求不同的原因,因为没有帐户。而且用户确实没有能力知道帖子的Key ID。

我们将不胜感激,希望其他人能从中受益。

【问题讨论】:

  • 只需在包含帖子数据的行上保存密码的hash?在更新表格之前首先检查密码和/或密码是否正确。
  • 假设您的用户将发布文章 - 只是一个示例,.为用户创建一个表单以编写文章并附加自动凭据生成器,例如用户 ID 和密码,但您需要向用户询问您将发送访问密钥的电子邮件地址。要访问那里的作品,一个简单的链接将起作用并使用登录表单限制页面,以便该作品的所有者可以编辑它或做任何事情。我想你明白了。
  • 除了我不希望以任何方式将用户链接到他们创建的帖子之外,这将起作用。

标签: php mysql forms account


【解决方案1】:

您使用数据库进行登录并存储用户名和密码。我会更进一步并在数据库中加密密码,然后在登录时加密密码。然后使用 count 语句查看是否有一行包含带有用户名的哈希样式密码。最好的方法是使用准备好的语句pdo,哦,关闭php中的错误报告,这样它就不会在浏览器中输出,只是日志文件应该记录错误。为了保密起见,您只是没有在他们的表格中提供该信息。您必须做的最后一项任务是设置一个 cron 作业以清除网站访问日志。这是记录 IP 地址的地方。

我也会将您的表单更改为所有帖子类型,这样编辑过程就不能被标记并打开以进行攻击。所以我会从 url 中删除 id 并将其带入如下形式:

   echo '<input type="hidden" name="id" value="'.$article_id.'" >';

您还应该在闲置的 php 页面中清理用户的帖子变量,例如:

         $var1=htmlentities($_POST['var1'], ENT_QUOTES);

【讨论】:

  • 加密数据库中的密码我希望你的意思是 HASH 而不是加密
  • 简单哈希,不是 mcrypt
  • 那么也许你应该修改你的答案
  • 密码短语和密码与帖子标题和信息存储在同一行。我只想在密码和密码匹配时才能访问。
  • 是的,但你仍然使用两点,否则如果有人重复使用相同的密码会混淆。否则,您将不得不做一些事情,例如存储 unix 时间(所有数字,没有空格)将其添加到密码中,对其进行哈希处理,然后将该 unix 时间存储在单独的列中,以便可以将其添加到表单中发布的密码中,然后哈希和比较。如果您只比较一个登录变量,则您的密码或密码短语应该是唯一的。
猜你喜欢
  • 2014-10-09
  • 2017-10-18
  • 1970-01-01
  • 1970-01-01
  • 2017-11-08
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多