如何防止用户更改javascript按钮disable()函数?

如何防止用户更改javascript按钮disable()函数?,javascript,php,Javascript,Php,在本地主机上创建论坛。当用户点击按钮发布问题时,我的javascript函数会禁用它(当问题被提出时),以防止问题垃圾邮件。一切正常,但是: 下面是/scripts/scriptname.js中的代码 function disable() { document.getElementById("submit-img").disabled = true; } disable(); 如果用户将上述代码更改为false,则用户可以发布各种问题,因为他可以将其更改为:.disabled=false

在本地主机上创建论坛。当用户点击按钮发布问题时,我的javascript函数会禁用它(当问题被提出时),以防止问题垃圾邮件。一切正常,但是:

下面是/scripts/scriptname.js中的代码

function disable() {
   document.getElementById("submit-img").disabled = true;
}
disable();

如果用户将上述代码更改为false,则用户可以发布各种问题,因为他可以将其更改为:.disabled=false

不幸的是,您不能。任何形式的前端验证都不会保护您的服务器或数据库免受垃圾邮件发送者的攻击,因此需要进行后端验证。根据您使用的后端语言和框架,您需要跟踪用户的IP地址(假设没有任何形式的身份验证)并在数据库中设置一个时间戳,以防止特定IP地址向您试图保护的端点发送请求。

您使用的方式是错误的。您应该只允许已注册和验证的用户访问并将内容发布到您的论坛。您的实现是基于javascript的,因此可以对其进行黑客攻击

它应该在服务器端完成。至少,您应该创建一个数据库,在该数据库中,您应该通过用户的登录会话数据、ip地址、电子邮件等来跟踪所有用户的活动。您可以设置一个计数器,统计用户在特定时间发布的内容数,然后禁止或阻止任何违规用户

虽然用户的双重注册不容易避免,但您可以通过要求每个注册用户在注册时通过发送给他们的链接验证其电子邮件来限制双重注册

您还可以设置验证码,例如Google recaptcha,以限制机器人的访问

事实上,从安全角度来看,您试图实现的内容太广泛了

如果您对安全性不太感兴趣,可以尝试下面的这个小示例代码。跟踪基于会话请记住,如果用户清除会话cookie,他仍然可以绕过

根据你的要求。您可以使用会话跟踪用户提交计数。正如我前面所说,这不是安全性证明,但它将让您深入了解如何构建自己的应用程序。然而,在javascript中使用它要好得多,因为您的用户/客户端很容易被滥用

如果用户提交超过2次,下面的代码将隐藏提交按钮

<form action="" method="post">
Enter name<input type="text" name="uname">

<?php

error_reporting(0);
session_start();

if($_SESSION['att'] >=2){
// hide submit button
}else{
echo '<input type="submit" value="submit">';
}
?>
</form>


<?php
//session_start();

// set up session counter
echo $_SESSION['att'] = $_SESSION['attempts']++; //increment
$name='';
$uname='';

$name = $_POST["uname"];
echo $_SESSION['uname'] = $name; 

?>

输入名称

您无法从客户端强制执行此操作,您必须设置服务器端检查以防止此类滥用。即使您设法禁用了该按钮,也有人可以重播API请求并创建多个问题,这正是您想要的。是否要筛选网站上重复的问题?否,当用户提出问题时,“我的代码”会打开一个新选项卡并在那里显示问题。然后,包含询问问题表单的选项卡将保留,但询问问题的按钮将变为禁用状态,因此用户除非刷新,否则无法提问。但是,用户也可以通过使document.getElementById(“submit img”).disabled=false来更改源代码并发布它;这是我的问题,我在问如何防止这种情况。实际上,感谢您的回复,但正如您所说,只有注册用户才能提问。是的,我通过使用php解决了这个问题,就像reddit中的一样,用户可以在每10分钟内提出问题,这样可以防止垃圾邮件。我很高兴你喜欢它