关于asp和asp.net防止外部提交的提问

minhua1983 2008-07-28 10:29:33
以前总是觉得用
在asp中用Request.ServerVariables("HTTP_REFERER")
在asp.net中用Request.UrlReferer
都能判断是否是外部提交的数据。
但是发现http的header竟然能伪造。于是上面的方法就没什么效果了。

于是想到要用网站的一个私钥以某种算法结合一个随机的变量得出一个token,在form里面传这个token值给接收页面来交验。这种方法在asp和asp.net估计都行的通。

后来又觉得每个接收参数的页面都要这样太麻烦了。

于是想到了asp.net的逻辑通常是写在某个button的OnClick事件中的,也就是说是基于事件来触发逻辑的,这样一来也就是说只要把逻辑写进事件中,asp.net页面就不存在外部提交的可能了,也就不用生成token来比对,再判断是否是外部提交了,但是asp不是基于事件来的,所以要避免外部提交的话,还是要用token来比对。

所以我觉得asp.net只要把逻辑写进某个button的OnClick事件的话,就可以避免该页面被外部提交了,也就是不用像asp那样来比对token了。

我这样理解可以吗?
...全文
407 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
waveback 2010-03-28
  • 打赏
  • 举报
回复
针对一般的浏览者:不要刻意去把前台页面做得完美,不可能、也没必要
针对刻意的攻击者:最好的防范不是检测从哪里提交数据,而是做好后台的各项数据检测程序,如果真是有必要,可以考虑用session做一个自定义的暗验证,但不要用cookies,为什么只能用session这个道理我相信也不用多说了!
minhua1983 2008-07-28
  • 打赏
  • 举报
回复
既然通过web控件的OnClick事件都能被伪造了,那么像CSDN这样的网站是怎么防止外部提交的?
类似我说的用私钥生成一个token值,在接受页面来验证。
我猜想CSDN用的是NEWID()
我测试发帖的链接是https://forum.csdn.net/PointForum/Forum/PostTopic.aspx?forumID=3036657c-277c-476c-982d-75f154e09050
如果我确认提交了,就生成了3036657c-277c-476c-982d-75f154e09050.html。

那么我猜想CSDN验证外部提交的方法就是用一个私钥结合这个NEWID,经过某种算法,得出一个值在form里面提交,然后在接受页面来交验。
zld_baggio 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kbryant 的回复:]
友情up
[/Quote]
color2002 2008-07-28
  • 打赏
  • 举报
回复
我是在表中建个模拟字段,定期删除非正常页面提交的数据
xhan2000 2008-07-28
  • 打赏
  • 举报
回复
用webbrowser+mshtml可以模仿任何操作
minhua1983 2008-07-28
  • 打赏
  • 举报
回复
说真的~我真不知道web控件Button的服务器端的OnClick事件都能伪造.
much0726 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kbryant 的回复:]
友情up
[/Quote]
xhan2000 2008-07-28
  • 打赏
  • 举报
回复
我做个很多网站的数据抓取,基本上不好防

httpwebrequest不好用还有webbrowser控件
xyzvalue 2008-07-28
  • 打赏
  • 举报
回复
看看有没有新鲜的回答,关注
suyiming 2008-07-28
  • 打赏
  • 举报
回复
没试过 顶顶木白
shoushii 2008-07-28
  • 打赏
  • 举报
回复
学习中……
家鸣 2008-07-28
  • 打赏
  • 举报
回复
既然你能认识到http的header能伪造,那么也应该知道button的OnClick事件也可以伪造。 有防就有攻,也就这样才推动着软件技术的进步,所以不必太刻意追求完美了。
kbryant 2008-07-28
  • 打赏
  • 举报
回复
友情up
cpp2017 2008-07-28
  • 打赏
  • 举报
回复
外部提交是没办法避免的.关键是在服务器端做好相应的控制.
用户可先请求你的数据,取得viewsate,修改某些提交数据,然后再提交给你.后台一样认为是浏览器正常发送.
minhua1983 2008-07-28
  • 打赏
  • 举报
回复
我自己up
免费Spire.PDF for .NET 是一款由e-iceblue公司开发的专业性的PDF文档创建组件。它能够使用户在不用Adobe Acrobat和其他外部控件的情况下,运用.NET 应用程序阅读,编写和操纵PDF 文档。Spire.PDF for .NET不仅可以运用在服端比如:ASP.NET 或者其他环境,还可以应用在Windows Forms 应用程序中。Spire.PDF for .NET 适合应用于所有常见的坏境中,比如:创建好的PDF文档可以存到磁盘中, 还可以在Windows Forms应用程序,ASP.NET 应用程序客户端浏览器中保存为数据流。 Spire.PDF for .NET 功能丰富。 除了基本的功能比如:绘制多种图形,图片,创建窗体字段,插入页眉页脚,输入数据表,自动对大型表格进行分页外,Spire.PDF for .NET还支持PDF数字签名,将HTML转换成PDF格式,提取PDF文档中的文本信息和图片,存为文本格式和各种图片格式,甚至可以将PDF中的附件提取出来。 主要功能 支持嵌入式字体,Truetype 字体和CJK字体。 支持绘图。比如:矩形,环形,弧形,椭圆形,也可以自定笔刷将其填充。 可以将图片从数据流,磁盘文件中载入到PDF 文档中。 在PDF 文档中既可以绘制梯状图形和矢量图像,还支持掩模和水印图像。 可以在PDF 文档中载入数据表。可以设置表中的行和列的格式,还可以在表内加入图形元素。 自动对PDF 中的大型表格进行分页。 创建窗体字段。比如在PDF 文档中创建按钮,文本框,列表框,复选框等等。 在PDF 中插入页眉页脚。 通过设置所有者密码和用户密码来加密PDF文档。 通过作者的签名来保护PDF文档。 读取当前PDF文档的表格并且填充表格。 HTML网页在转换到PDF文档时会拆分为多个大型页面,这些页面可以原原本本的展现在PDF文档中,而且在PDF文档的分页处没有任何文字的截断。用户还可以将这些网页在不需要临时文件的情况下,直接转换为数据流来创建PDF文档。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧