sha1什么都没有哈希,怎么阻止它这样做呢?

时间:2012-05-01 06:24:22

标签: php sql sha1

这是代码:

<html>
<body>

<?php
$valid = true;



//Check for first name value
if (empty($_POST['texts'])) {
    echo 'You forgot to type something in<br />';
    $valid = false;
}

if ($valid == true) {
    $conn1 = mysqli_connect('xxx') or die('Error connecting to MySQL server.');

    $name=   $_POST['name'];
    $title=  sha1($_POST['title']);
    $texts= $_POST['texts'];
    $forum_id = $_POST['forum_id'];




        $name = str_replace("'","''",$name);
        $title = str_replace("'","''",$title);
        $title = str_replace("b074acd521","STREAMER",$title);

        $texts = str_replace("'","''",$texts);


        $title = substr($title,0,8);


        $sql = "INSERT INTO post (name,title, texts, forum_id) VALUES ('$name', '$title', '$texts', '$forum_id')";
        mysqli_query($conn1, $sql) or die('Error inserting to database.');
        mysqli_close($conn1);

        header('Location: requests.php');
        }
else {
    echo 'Click <a href="javascript:history.go(-1)">HERE</a> to go back and adjust your entry.';
}

?>

</body>
</html>

当我在网站上发帖并将id字段留空时仍会生成ID,我该如何解决?另外,如果名称字段为空,我怎么能将其默认为某个东西?

1 个答案:

答案 0 :(得分:2)

大多数(如果不是全部)散列算法将散列空字符串。如果他们没有,他们就不会真的是“诚实”的哈希。这个想法是你不应该将哈希解密到原始输入。例如,如果以下内容:

All good boys deserve fudge!

All good boys deserve  fudge!

使用散列算法将空白空间视为不可用,然后它们将获得相同的散列,这将使其更容易破解。

如果您不希望对空字符串进行哈希处理,则需要在对字符串进行哈希处理之前检查该字符串。类似的东西:

 if(!empty($_POST['user_input']) {
      $user_hash = sha1($_POST['user_input']);
 } else {
      echo "No input given, wiseguy!";
 }