我想将用户重定向到另一个页面以填写验证码,但我想保留发布数据,如果验证码通过“发回”并完成上一页操作。
当/如果用户成功,我想添加captchaPass = true并希望访问帖子数据并继续处理。现在我正在使用重定向,但ATM我不需要使用它。
是否可以随身携带帖子数据?请记住,我可能会让用户访问多个页面,因此需要分离数据而不需要混合。
一个想法是在验证码页面上获取并保存所有发布的数据 [1] ,然后使用此表单数据重新创建一个中间白页,并自动在上一页上发布新帖子。
这可以解决散列检查和安全性方面的任何问题吗?
这个白色重定向页面有更好的主意吗?
[1] 这里还有一个问题,如何使用重定向发送此发布的数据?而不是改变网址 - 或者让它太大而不能接受它。保持在我的服务器转移可能不是一个好主意,因为复杂的关于captach回发的想法。
这里的基本想法是如何捕获页面的完整帖子,显示不同的一页,然后将回发数据发送到原始的第一页。
原因是要阻止一个糟糕的用户,或者一个试图通过在短时间内从不同页面回发许多文件来关闭页面/服务器的攻击者机器人程序。所有这些都发生在javascript上,并且大多数攻击者使用自定义程序只是将数据发布到所有页面,试图打倒系统。
例如,如果一个页面有一个搜索框,那么大多数网站很容易通过开始使用通配符(使用SQL通配符调用和Dos攻击)进行数百次随机搜索来降低它们并使其成为sql server并且计算机花费他的时间和cpu来搜索和搜索思考。因此,为了防止这样的攻击,您需要从同一台计算机识别多个回发,然后下一步是将他重定向到验证码页面以阻止他,以防万一是计算机程序。
其他例子,很多页面都有电子邮件提交,非常容易你可以提交数百次电子邮件,并且可以在几百封电子邮件中提交他的邮箱,或者在商店中一次又一次地将所有商品放在购物车上并用这样的东西填满数据库。
所以ajax和javascript在这种情况下不起作用,我们需要一种方法在帖子后重定向到一个页面,可以检查是真实用户还是攻击者并阻止他 - 但如果是真实用户必须回到他的正常行动。
这一切都必须以一般方式完成,例如在BasePage上,或在Global.asax上或任何与任何页面内容无关的地方。因为我们试图阻止DoS攻击,或者在随机页面的任何随机位置随处提交多个。
是的,我知道如何在联系页面上放置验证码,但这不是首先要求的问题 - 这个问题询问如何将数据发送到一个不同的页面,将它们保存在那里然后重新发送回来原来的。
显而易见的解决方案是阅读所有回发帖子,并将其保存在表单上,然后将其读回并仅使用该数据制作表单并将帖子发回。在这里,我问的是否还有比这个解决方案更好的其他方法。
还有一种情况是用户在请求身份验证的页面内,但身份验证票证已过期,并且用户回发。在这种情况下,我们需要保留所有发布的返回数据,继续登录页面,然后将它们重新发送回请求身份验证的第一页。
答案 0 :(得分:2)
当然,只需将表单数据写入隐藏元素中的captcha页面,并将额外的验证码字段添加到表单中。让您的提交操作将整个内容发回原始内容。使用ASP.NET可能更容易将验证码写入隐藏表单字段的同一页面,但您可以像我上面所描述的那样进行跨页面回发。
答案 1 :(得分:1)
Cross Page Posting可能会对您有所帮助。
答案 2 :(得分:1)
为什么不用AJAX实现CAPTCHA?使用Javascript加载验证码对象和表格,或者显示灯箱样式,接受用户输入并将其发布到您的服务器进行验证,从而继续用户发布请求或保留它们直到他们正确(或取消)。
更具体的情况示例:
为表单提交按钮提供某个Javascript函数的onClientClick值。此函数决定此特定表单是否需要CAPTCHA。如果是这样,它会加载一个接口来获取CAPTCHA(您需要使用某些服务器端代码),并将CAPTCHA的input元素插入用户单击提交的表单。
一旦用户输入了CAPTCHA输入并单击某个按钮,其click事件将被绑定返回到您的第一个JS函数,Javascript就会拦截此操作并发布完整表单,原始表单中的所有数据以及CAPTCHA for验证。您的服务器脚本现在可以立即处理所有这些!
这是我能想到的最好的解决方案,它的工作方式类似于你的问题,但我无法想象你为什么要在不同的页面上执行CAPTCHA。
答案 3 :(得分:0)
Server.Transfer
与MultiViews, Panels like control
一起对你很好吗?通过这种方式,您无需担心Data Maintenance
和Postbacks
。您可以在javascript中进行验证。
您可以将两个功能保留在同一页面中,以避免将数据从一个页面移动到另一个页面/将数据恢复到原始页面。您可以使用Session
进行此中间操作。将其设置回Postback的相关控件。您可以在此类对象中创建class
,Instantiate
和Initialize the control values
。在Session
中保存类对象。在回发时,您可以将值重新分配给associated controls
。这肯定会使事情简单,没有太多复杂性。
怀疑?