gpt4 book ai didi

php - 保护隐藏字段

转载 作者:行者123 更新时间:2023-11-29 06:50:25 24 4
gpt4 key购买 nike

我正在使用这段代码来检查答案是否正确:

<?php
$con=mysqli_connect("localhost","root","","teachme");
//check connection
if (mysqli_connect_errno()) {
echo 'Failed to connect to MySQL: ' . mysqli_connect_error();
}

$query = "SELECT question, answer, explanation FROM grade8u1 WHERE id BETWEEN 1 AND 10 ORDER BY RAND()";
$result = mysqli_query($con, $query);
$row = mysqli_fetch_row($result);
echo ("<b>Question</b>: $row[0]<br>");
echo ("<b>Answer</b>: $row[1]<br>");
echo ("<b>Explanation</b>:<br> $row[2]<br>");

if (isset($_POST['answer'])) {
$answer = $_POST['realanswer'];
if ($_POST['answer'] == $answer) {
echo "<br>";
echo "Last answer was correct";
}
else {
echo "<br>";
echo "Last answer was incorrect";
}
}
?>
<form action="random.php" method="post">
<input type="hidden" name="realanswer" value="<?php echo $row[1]; ?>">
Answer: <input type="text" name="answer">
<input type="submit" value="Submit">
</form>

存在一个问题,因为任何人都可以检查或编辑隐藏字段的值。我尝试了其他方法,例如使用 session ,但每次用户按下提交时它们都会被替换。谢谢,汤姆。

最佳答案

您有 2 个选择。

  1. 使用加密。 ( secret )服务器端 key 意味着您可以将隐藏的输入设置为只能由服务器解密的加密字符串。
  2. 使用 session (更安全,尽管吹毛求疵的人会指出一些 super 奇怪的人和浏览器不支持它)。

如果之前 session 对您不起作用,那是您没有正确使用它们! (可能是一个被遗忘的 session_start() 调用;通常是这样)

此外,如果这是用于验证码或类似的,则不要选择选项 (1);黑客可以多次重复使用相同的隐藏答案/真实答案组合。您可以通过添加和检查时间戳或使值一次性使用来减少问题,但使用 session 会容易得多。

关于php - 保护隐藏字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15800475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com