我们有一个表单,如果一个人填写该表单,我们正在点击POST API。
当用户提交表单时,API的完整信息(请求网址,标题)是可见的,我在想是否有人通过服务器端代码开始点击这个POST API,我们的表格将填充垃圾值?
我们如何通过API直接命中C#客户端,POSTMAN或任何其他服务器端客户端来避免这些批量数据进入系统?
答案 0 :(得分:3)
这是一个非常开放的问题,但我认为没有办法完全按照你的要求做出(如果请求是否源自浏览器,则可以确定地检测到),如果可能,也不应该 - 用户可能有正当理由使用浏览器以外的东西,或者有人可能想要将您的API集成到更大的流程中等。
您应该通过身份验证处理此问题 - 要求用户通过您的API进行身份验证,然后如果他们行为不当,您可以禁用其用户帐户(手动或自动进行某种滥用检测)。
答案 1 :(得分:0)
有时,Web表单无法进行身份验证或不需要身份验证。在那些时候,我使用了我嵌入表单的服务器上生成的密钥。
表单会将密钥与其余数据一起发回,然后您可以根据密钥做出您需要做出的任何决定。就像限制提交的速度一样,只允许一次提交,然后使密钥等到期......
答案 2 :(得分:0)
使用验证码:向用户呈现挑战以证明是人,通常包含一些乱码文本的图像显示给填写表格的人,并且他需要转录文本内容。形式的图像。如果验证码解决方案错误或缺失,将丢弃对API的POST请求。
通常使用许多类型的挑战,例如音频/视觉/逻辑/迷你拼图。您还可以以最适合您表单的方式自定义您的挑战。例如,Google提供了ReCaptcha,一个带有js和服务器api的验证码服务。
这可以帮助您预防或减轻机器人,因为验证码是一项对计算机来说非常困难但对人类而言非常容易的挑战。
使用一次性验证码令牌也可以防止您担心的重播攻击。此外,检查接收到挑战的ip和解析它的ip是否相同有助于减轻其他技巧。
这仍然为一个坚定的人留下垃圾邮件的空间。因此,您还应该跟踪提交的数量并通过ip来限制它们。