PHP SHA256 散列用户提交的内容而不先获取是否安全?
Is it safe to PHP SHA256 hash user submited content without vetting first?
我想允许用户通过 textarea
表单提交来提交输入并对提交的文本执行 SHA256 哈希。哈希容易受到攻击吗?我应该 "clean" 散列之前的输入吗?如果是这样,解决这个问题的最佳方法是什么?使用 strip_tags
是否足够,或者我可以通过对字符串等执行 htmlspecialchars()
函数来转换输入
代码示例为
<html>
<head>
<title>SHA256 on user input</title>
</head>
<body>
<?
if ($_SERVER['REQUEST_METHOD'] != 'POST' || empty($_POST['hashThis']) ):
?>
<form name="user_data" method="POST" action="">
<textarea name="hashThis"></textarea>
<input type="submit" name="submit" value="submit" />
</form>
<?
else:
echo hash('sha256', $_POST['hashThis']);
endif;
?>
</body>
</html>
只要执行散列是 唯一 您对用户输入所做的事情,这是绝对安全的。您不需要对数据进行任何类型的预处理以使其安全散列,只要您没有打开原始输出(默认情况下关闭),输出就可以安全打印。
我想允许用户通过 textarea
表单提交来提交输入并对提交的文本执行 SHA256 哈希。哈希容易受到攻击吗?我应该 "clean" 散列之前的输入吗?如果是这样,解决这个问题的最佳方法是什么?使用 strip_tags
是否足够,或者我可以通过对字符串等执行 htmlspecialchars()
函数来转换输入
代码示例为
<html>
<head>
<title>SHA256 on user input</title>
</head>
<body>
<?
if ($_SERVER['REQUEST_METHOD'] != 'POST' || empty($_POST['hashThis']) ):
?>
<form name="user_data" method="POST" action="">
<textarea name="hashThis"></textarea>
<input type="submit" name="submit" value="submit" />
</form>
<?
else:
echo hash('sha256', $_POST['hashThis']);
endif;
?>
</body>
</html>
只要执行散列是 唯一 您对用户输入所做的事情,这是绝对安全的。您不需要对数据进行任何类型的预处理以使其安全散列,只要您没有打开原始输出(默认情况下关闭),输出就可以安全打印。