Php 保护ajax帖子?

Php 保护ajax帖子?,php,ajax,Php,Ajax,我有一个表单,用户可以使用该表单添加他们的电子邮件地址和姓名以注册新闻稿 提交时,ajax请求将数据传输到我的数据库 我是否应该使用任何类型的保护来阻止其他人向数据库添加条目,例如,如果另一个站点将其表单链接到我的ajax请求url,那么他们将向我的数据库添加数据 我怎样才能阻止这一切呢?如果你真的很认真: 为每个页面生成一个随机数,并将其作为隐藏字段添加到表单中(在$\u会话中) 提交时,检查数字是否匹配 更妙的是,只需创建一个随机字符串,并只发送其哈希值——如果您将从表单获得的哈希值与从

我有一个表单,用户可以使用该表单添加他们的电子邮件地址和姓名以注册新闻稿

提交时,ajax请求将数据传输到我的数据库

我是否应该使用任何类型的保护来阻止其他人向数据库添加条目,例如,如果另一个站点将其表单链接到我的ajax请求url,那么他们将向我的数据库添加数据


我怎样才能阻止这一切呢?

如果你真的很认真:

  • 为每个页面生成一个随机数,并将其作为隐藏字段添加到表单中(在
    $\u会话中
  • 提交时,检查数字是否匹配
更妙的是,只需创建一个随机字符串,并只发送其哈希值——如果您将从表单获得的哈希值与从原始字符串生成的哈希值相匹配,则您有一个有效的请求


不过,这会扼杀缓存,因此我不能真正推荐它作为“只需执行此操作”的解决方案,这取决于您的容量。

这就是开始使用的时候。默认情况下,其他主机名不能向您的站点发送Ajax请求。只有设置了特定的标题
Access Control Allow Origin
,才能通过Ajax post轻松使用表单并将该值存储在数据库中。您可能需要检查与跨域Ajax、JSONP、CORS相关的主题。您仍然可以通过检查表单是否仅在授权域中使用来保护表单。请在表单中放置一个令牌,并将其保存在会话服务器端。然后,只有具有该表单/脚本调用的正确标记的表单才能(正确地)提交表单。至少这会阻止你仅仅发布到你的ajax url。六票赞成?真的吗?+1这种技术的正式名称是。无需担心缓存,因为它是POST,无论如何都不应该缓存。@amartynov:缓存问题不是在处理请求时,而是在生成表单作为页面的一部分时-为了有效地使用上述技术,每个用户都应该获得自己打印的哈希/数字,这会破坏页面缓存。显然,有一些方法可以缓解这种情况(在页面完成后通过AJAX加载表单“block”,在X分钟内对所有请求使用相同的哈希,等等)。但是,您很可能希望保护具有动态内容的表单,因此也不应缓存。您所说的是一个随机字符串,而随机字符串的散列并不比仅使用随机字符串更好。散列实际上没有任何价值。我在自己的网站上做过这种保护。此外,您可以将“csrf_timer=time()+30//(现在是+30秒)”添加到会话中,然后检查剩余的csrf和csrf_时间,以便在您担心潜在的破解者可能试图获取生成的UID并将其发送到服务器时使用。