asp.net 页面和弹出页面之间有哪些不同的通信方式?查询字符串等。哪个最安全?
5 回答
如果您正在谈论一个实际的弹出页面,您正在使用来自 javascript 的 window.open。您将查询字符串和 Javascript 作为在它们之间传递信息的唯一真正可用选项。
至于这个的“安全”。用户将能够通过查询字符串查看任何内容,JavaScript 可以移动值,但它们将存在于其他页面上。但是你可以传递一些像 excrypted 值这样的东西来使事情更安全。
您说的是弹出窗口和 ASP.NET 主页面之间的“通信”。首先,我假设弹出窗口也是一个 ASP.NET 页面,因此从主页到弹出窗口的通信与从一系列页面中的一个页面到下一个页面的通信没有什么不同。也就是说,您可以在会话中存储然后使用数据(如果加载主页时数据可用),通过查询字符串等。除非数据是敏感的,否则到目前为止最简单的方法是在其中包含一个变量对由适当参数替换的弹出窗口的调用。这是一个示例图片链接:
<img style='cursor:hand;' alt="Open Note" onclick="javascript:window.open('NoteEdit.aspx?T=3&UID=<%#NoteUID%>', 'Note', 'HEIGHT=400,WIDTH=420');" src="images/Note.gif" />
注意“NoteUID”替换参数。
更有趣的问题是如何将信息传递回弹出的窗口。为此,请从以下 javascript 开始:
<script type="text/javascript">
function OpenHRAResults()
{
opener.location.href="<%#DestName%>";
window.close();
}
</script>
这是从我重新打开特定页面的代码中获取的,但是您可以猜到,您可以使用“打开器”窗口(弹出窗口的窗口)执行各种操作。
希望这可以帮助...
几种方法
- 查询字符串(window.open('/users/123'..)
- Javascript (window.opener)
- HTTP POST(通过javascript打开一个弹出窗口,将表单目标设置为它的名称作为目标并发布)
- 会话或其他服务器端方法
在回答安全考虑时,我会说查询字符串与服务器端安全性相结合是要走的路。打开通过查询字符串传递信息的弹出窗口,然后验证登录用户是否有权访问该用户。一些特定的要求会要求对查询字符串数据进行加密。
对于删除操作,我可能会使用回发来避免“我的索引蜘蛛删除所有用户”之类的问题。
我们尽量避免使用查询字符串,因为有时它们太方便了。在这些情况下,我们总是加密查询字符串。有几种方法可以做到这一点 - 一种方法的示例:
http://www.codeproject.com/kb/web-security/querystringencryptionnet.aspx
您不需要将真实数据发送到弹出窗口。只需在开启页面上创建一个 GUID。在 asp.net 中创建一个类,它代表您需要在弹出页面和开启页面之间发送的所有数据。例如 popupdata 将序列化的类存储在 Session 中,GUID 为名称 Session[Guid] = class object Session[Guid] = popupdata;
使用 fi ~/popupwindow.aspx?PageID=Guid 打开弹出窗口再次调用 Session[Guid] 检索会话对象(Guid 来自 PageID 查询字符串。
所以在弹出页面调用popupdata data = (popupdata)Session[Guid];
然后对数据做任何你喜欢的事情。
如果弹出窗口上的数据发生更改,您可以再次将其存储在 Session 变量中并将其发送回开启者...
非常安全,因为没有数据发送到客户端。