Php 防止多个SQL插入
我目前有一个JavaScript,如果页面刷新或用户提交后按下浏览器后退按钮,它会重置表单,但如果一个极度无聊的用户无视JavaScript,反复填写并提交表单,我的DB将被垃圾邮件Php 防止多个SQL插入,php,sql,insert,Php,Sql,Insert,我目前有一个JavaScript,如果页面刷新或用户提交后按下浏览器后退按钮,它会重置表单,但如果一个极度无聊的用户无视JavaScript,反复填写并提交表单,我的DB将被垃圾邮件 我想防止这种情况发生(可能是通过检查同一用户在一分钟左右的时间内是否插入了超过10行),但我不知道如何防止这种情况发生。通常这是通过会话id/令牌完成的 通过这种方式,您可以检查其是否已提交,并且只允许提交一次 这里有一个类似的问题: 在会话变量中保存帖子数量 每次用户提交内容时,您都可以执行以下操作: $_SES
我想防止这种情况发生(可能是通过检查同一用户在一分钟左右的时间内是否插入了超过10行),但我不知道如何防止这种情况发生。通常这是通过会话id/令牌完成的 通过这种方式,您可以检查其是否已提交,并且只允许提交一次 这里有一个类似的问题:
在会话变量中保存帖子数量 每次用户提交内容时,您都可以执行以下操作:
$_SESSION['postCount'] = $_SESSION['postCount'] + 1;
然后你把整个事情变成这样:
if($_SESSION['postCount'] > 2) {
// Your code that posts to the database
$_SESSION['postCount'] = $_SESSION['postCount'] + 1;
}
如果尚未使用会话,请确保使用会话_start()启动每个脚本;使用此代码,任何人都不能发布超过三次的内容。我会在表中添加一列,记录上次表单提交的时间戳。然后,当页面加载时,将其声明为javascript的全局变量
<?php include 'connect.php';
$sql = mysqli_fetch_assoc(mysqli_query($cxn, "SELECT lastFormSubmission FROM myTable WHERE login_id = '".mysqli_real_escape_string($cxn, $_SESSION['login_id'])."'"));
$lastFormTime = $sql['lastFormSubmission'];
?>
这仍然不能解决恶意用户重播提交数据的问题。我想我只是没有正确理解OP的问题…威尔edit@ChemistryBlob-只需确保您永远不会将任何安全性留给客户端(即JavaScript),因为它总是会被篡改。任何关键的安全机制都应该在服务器级别(即PHP)而不是客户端级别实现。在这种情况下,它可能意味着某种形式的递增会话变量。这非常好而且简单,对我来说非常适合。非常感谢。
<script type="text/javascript">
var lastTime = '<?= $lastFormTime ?>';
</script>
//Your script
var t = new Date().getTime() / 1000; //Need time in seconds to compare with timestamp
if (t - lastTime < yourThresholdTime) {
//don't submit form
}