2016-07-13 262 views
0

我创造了这个功能。防止表单提交

function blacklisted_ip() { 
    $('form').remove(); 
    $('.wrapper').removeClass('form-success'); 
    $(".login_text").html("Your IP has been blacklisted"); 
} 

,去除HTML表单 - 我删除的形式停止与列入黑名单的IP记录用户

我有一个PHP在张贴表单时处理登录的同一页面顶部的脚本。

是否还有一种方法可以阻止其他页面发布到此页面?

php的开始是这样的:

if($_POST) { 

} 

我想过加入一个隐藏字段的值,但后来以为有人将能够查看源代码,只是复制吗?

+1

我建议,如果黑名单对业务至关重要,那么在将HTML发送到浏览器之前,请先删除PHP代码中的表单。做它的客户端使得重新启用表单变得微不足道。 –

回答

0

最好的方法是使用CSRF令牌。如果你起诉任何框架,他们已经开箱即用,如果不是,如果你想自己实现它,你可以做到这一点。


CSRF代表跨站请求伪造,这是当一个恶意网站,电子邮件,博客,即时消息或程序,使用户的网络浏览器来执行中出现的攻击类型用户当前通过认证的受信任站点上的不需要的操作。

参考:https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet


解决方案来防止这是有一个独特CSRF令牌针对每个用户为各形式。当用户打开页面并加载表单时,您将一个令牌/密钥指定给该页(页面+表单),并将其保存到您选择的展开的会话中。

添加此令牌与形式隐藏字段和后沿,随着其他DATAS,现在当你处理表单比较来自客户端一起接收到的令牌与你会话的令牌。如果它们匹配,则认证它们,否则不处理表单。

您可以使用任何方法来生成CSRF令牌,你的情况,他们将只是唯一为每个页面+形式。

+0

非常感谢。这是我第一次做这样的事情 - 你能提供一个例子吗? – charlie

+0

我没有具体的例子,但是这很简单,就像我写的一样。 –