ASP.net如何防止跨站post提交数据?

sd797994 2011-04-29 10:56:23
是这样的,我有一个网站 正式挂在网上的。上面有ashx通过post的方式接受网站传递的id,更新num列写入数据库
今天试了试 在本机运行一个页面

<form name=form1 runat="server" action="http://www.xxx-xxx.com/ashx/edit_num.ashx" method="post">
<input type=test name="id" value="201542">
<input type=submit name="num" value="111">
</form>

貌似在本机运行这个页面点击submit也能更改数据库。
我希望是除了网站本身发出的post请求外来自其他地址的请求一律忽略 请问该如何做呢
PS:小弟接触.net不深,望个位大大不吝赐教,在此感谢了
...全文
363 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjx398 2011-04-30
  • 打赏
  • 举报
回复
ashx页面判断一下cookies或者session等保存的数据表明提交者的身份
hwbox 2011-04-29
  • 打赏
  • 举报
回复
RSA也一样有相同明文,相同密文的问题,速度还慢,所以用双重DES就足够了。
hwbox 2011-04-29
  • 打赏
  • 举报
回复
三种方法俺都用了,最后确定用的是加强方案三
hwbox 2011-04-29
  • 打赏
  • 举报
回复
你表达的意思不太清楚啊。
如果你的网站为A
传来参数的为B

请问B网站用什么传参来的?
方式一、是后台用 WebClient
方式二、还是B网站有一个页面,用户浏览这个页面点击提交(或ajax提交)后提交到A网站?
此方法,的验证基本上就是js的范围了。我就不多说了。

方式一正好和我的一个应用中的情况一样我来说说吧。

方式一的互信方式很多种,最简单的双方约定对称密钥和暗语。传递的数据 s 。
首先 sa = 暗语 + s
然后 sb = 随机密钥加密(sa)
然后 sc = 随机密钥 + sb
然后 sd = 约定密钥加密(sc)
发送sd

接收方 收到 sd
sc = 约定密钥解密
得到 sc 分解为 随机密钥 + sb
sa = 随机密钥解密(sb)
sa 分解为 暗语 + s
检查 暗语
通过
入库 s

双重加密是可以有效的混淆加密结果。
缺点,攻击方可以反复发送同样的串攻击。

加强方案一,增加受信回访步骤。

A在发送前生成 一个随机 guid,放入本机 Dictionary <guid,datatime>中。
将guid和数据一同发送。
B收到后访问A上的页面Achack.ashx提交得到的guid,A检查发现后返回B true 同时删除 指定的 Guid 项。B确认后 数据 s 入库

缺点,多次确认,比较费时。

加强方案二,增加唯一标识窗标识。
A在发送时同时发送生成 一个随机 guid,和当前系统时间(两者相加确保不重)
B端库中确保用 guid + datatim + id 做主键。这样反复发送的数据就入不了库了。

缺点,受攻击时还是会进行入库操作。

加强方案三,在方案二的基础上在B端本地维持一个缓冲对象,记录一分钟内提交的所有信息。有重复提交的就忽略。
可以用SortedDictionary 加自定义比较器的方法实现 既支持 key 值直接定位,又支持按 value 中的某项排序。


  • 打赏
  • 举报
回复
建议你还是用传统的登录身份验证方式做。
因为任何获得url的方式,都可以使用伪造,例如在访问者的机器上做一个host文件就绕过了你一切基于url的防范机制
vrhero 2011-04-29
  • 打赏
  • 举报
回复
是啊...要安全至少也要有个时间戳哈希值之类的令牌...
ltcszk 2011-04-29
  • 打赏
  • 举报
回复
你接收时不进行身份验证吗?
post的所有信息都是可以伪造的啊,判断来源页又有什么用
  • 打赏
  • 举报
回复
可以啊,你把地址前几位截取出来瞅瞅不是公司的就干掉。。。。
vrhero 2011-04-29
  • 打赏
  • 举报
回复
判断context.Request,如context.Request.RawUrl...
sd797994 2011-04-29
  • 打赏
  • 举报
回复
除了过滤地址的软件有没有直接在代码方面防范的方法?
  • 打赏
  • 举报
回复
囧了炯, 看错了,你可以过滤地址用软件。
  • 打赏
  • 举报
回复
跨网站 WebService吧。。。它能跨语言,跨平台,跨国界,跨时空,跨思维,跨XX……

62,046

社区成员

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

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

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

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