恶意用户可以在javascript中做什么?

恶意用户可以在javascript中做什么?,javascript,ajax,Javascript,Ajax,嗯,我对我的项目的安全性有点着迷,我有一个问题没有离开我的头脑 我有一个恢复密码的页面,用户除了执行recaptcha测试外,还需要用有效数据填写表单 为了方便用户体验,我通过ajax进行检查,如果不返回任何错误,我将释放页面 $.ajax(configAjax).done(data => { if(data.result !== "success") { sendErrorMessage(data.message); greca

嗯,我对我的项目的安全性有点着迷,我有一个问题没有离开我的头脑

我有一个恢复密码的页面,用户除了执行recaptcha测试外,还需要用有效数据填写表单

为了方便用户体验,我通过ajax进行检查,如果不返回任何错误,我将释放页面

$.ajax(configAjax).done(data => {

       if(data.result !== "success") {
           sendErrorMessage(data.message);
           grecaptcha.reset();
           event.preventDefault();
       }
       else {
           done = true;
       }

       toggleLoading();

})
好的,一切正常。。但我一直听说,不依赖客户端的任何数据

如果他们能够改变,例如,来自!==到==,用户将能够执行搜索,而无需执行recaptcha

我曾想过做两次recaptcha检查,一次是在ajax中,另一次是在页面用POST请求更新时,但API返回了一个错误,因为两个请求是在很短的时间间隔内发出的


我的问题是,有人可以这样做吗?

如果应用程序实现正确,这不应该允许用户绕过验证码检查

AJAX请求在服务器上验证验证码响应。如果成功,服务器应安排将来验证API调用。它可能返回必须包含在未来API调用中的令牌,设置cookie,或者设置服务器端会话变量。当应用程序对API进行额外调用时,服务器应检查此数据;如果无效,呼叫将被拒绝

如果您更改
==
==
,用户将不会收到错误消息。但他们仍然无法使用该应用程序,因为上面的身份验证信息尚未设置。服务器仍然知道您没有给出正确的验证码响应


结果是,您永远无法完全在客户端上进行身份验证。您可以通过客户端验证来改善用户体验,但必须在服务器上进行复制。服务器必须在每次请求时都这样做;您不能假设客户机将遵循应用程序页面的正常路径。例如,即使您仅从
login.php
链接到
application.php
application.php
也不能假设用户实际上已经通过了登录检查——没有任何东西可以阻止用户将
application.php
URL放入浏览器的地址栏
login.php
必须执行客户端无法欺骗的操作,
application.php
必须验证此操作是否已在当前会话中完成。

如果您将此翻译为英语,以便更多人可以帮助您,那就太好了。对不起,我翻译了。您不能信任客户端的任何数据。客户端可以完全跳过JS并发送任何类型的请求。您在客户端上所做的任何事情都只是为了方便用户。服务器必须自己进行验证,如果验证失败,则不应向客户端发送任何数据。好的,我将通过ajax删除recaptcha检查。谢谢你的回答,谢谢你的回答。我会把它当作学徒。在本例中,我将仅在刷新页面时执行recaptcha验证。通过客户端,我只需检查“g-recaptcha-response”值是否未定义