是否可以在ASP.NET控件ID中存储ID?

时间:2010-04-22 20:27:37

标签: asp.net security viewstate dynamic-controls

我在ASP.NET页面中自动生成表单。这已经过测试和运作。我想知道是否:

  1. 如果将数据库ID存储为控件ID的一部分存在任何安全问题?我可以看到2个问题:在页面源中可以看到id(在这种情况下不是很重要),有人可能会以某种方式更改控件的名称吗?第二种可能性更严重。这是一个潜在的问题以及如何取消它?

  2. 如果有更好的首选方式将唯一数据与任何类型的控件相关联?是否可以在控件的视图状态中存储自定义项目?

5 个答案:

答案 0 :(得分:0)

例如,您可以创建自己的自定义控件,继承自TextBox。创建在ViewState中存储数据的属性。这是我实现你所需要的最快最简单的方法。

答案 1 :(得分:0)

只需将它们保存在视图状态

viewstate["DB_ID"] = datarow("ID")

答案 2 :(得分:0)

您可以使用hiddenfield。或者最好的方法是将您的ID存储在Session中。会话非常安全。

答案 3 :(得分:0)

不要在页面中存储任何与数据库相关的内容。您正在向人们介绍您应该隐藏的系统知识。

如果必须存储数据库ID,请将其存储在会话中或将其放入web.config文件中。

答案 4 :(得分:0)

在页面中使用数据库ID没有任何问题。只需查看此页面的URL或几乎任何其他MVC风格的站点。除非您的系统容易受到SQL注入攻击,否则它本身并不存在安全风险 - 如果是,那么您需要担心更大的问题。