嗯,我觉得这个问题有点奇怪,因为我不确定这个问题是否适合这个问题。
好的,进入问题..
我有这段代码
<script>
var session = "<%= Session["User"]%>";
</script>
所以,我在想,这样安全吗?让我告诉你我的意思..
我有一个web api,你可以通过他的Session得到名字,姓氏,年龄和用户的一切,我可以发送这个web api这个会话并使用它吗?
这样做是否安全?在安全问题上?如果没有,有没有更好的方法?
编辑1:
我想要完成什么?简单,我将UserId存储在会话中,UserId将Guid,当用户在javascript中发送时可以发送帖子到API服务器获取信息,API将从会话中发送UserId。
可以吗?
答案 0 :(得分:2)
您描述的工作流程看起来很好。对我来说,使用一些ID获取有关某些用户的更多信息似乎是安全的,特别是如果这应该是一个API,至少,Facebook API使用这样的原则而不是害怕一些黑客:)
我主要关注的是当您尝试混合代码和查看哪种不好时的编码风格。如果你真的需要在客户端和服务器端之间共享一些信息,那么我会选择其中一个选项。
选项#1 - Cookie
What is the difference between a Session and a Cookie?
您可以在Cookie中保留一些简单的信息并以此方式获取:
在这种情况下,没有必要弄乱你的客户端JS与C#代码和cookie将保存在用户PC上,这意味着没有人会看到他们除外。
选项#2 - 模板
直接回答:
一般情况下,如果您只担心安全性,那么可以使用此代码,它不应该破坏您网站的安全性。
虽然,我个人不喜欢这种方法,因为:
在我个人看来,我会用上面提到的选项之一替换它。
选项1 - MVC + JQuery + Cookie示例
public ActionResult Index()
{
string demo = Request.QueryString["MyNameSpace.ID"]; // get value from client
Response.Cookies["MyNameSpace.ID"].Value = "server"; // change value in response
return View();
}
然后在你的JS文件中:
$(document).ready(function() { // make sure server rendered page
var ID = $.cookie('MyNameSpace.ID'); // get cookie value from server
$.cookie('MyNameSpace.ID', 'client'); // update, on the next request server will get it
});
选项2 - MVC + JQuery +模板示例
public class OptionsModel // View Model
{
public string ID { get; set; }
public string User { get; set; }
}
public ActionResult Index() // Controller
{
OptionsModel options = new OptionsModel();
options.ID = "server";
return View(options);
}
您的观点:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<OptionsModel>" %>
<%=Html.HiddenFor(m => Model.ID, new { @class = "MyNameSpace:ID" })%>
<%=Html.HiddenFor(m => Model.User, new { @class = "MyNameSpace:User" })%>
然后在你的JS文件中:
$(document).ready(function() { // make sure server rendered page
var options = $('[class^=MyNameSpace]') // get values from hidden fields
options[0] = 'client'; // update data
$.ajax({ data : options }); // create handler to send data back to server
});
Web表单的示例没有显着差异。
答案 1 :(得分:-1)
您发布的代码将在页面上呈现,因为当它到达客户端时(假设您使用的是ASP.NET
<script>
var session = "John Smith";
</script>
这是因为使用了服务器端脚本标记&lt;%=%&gt; (https://technet.microsoft.com/en-us/library/cc961121.aspx)
作为一个注释,如果这是你的意图,那么将会话完全公开给javascript可能不是最好的事情。在一天结束时,它取决于你在那里存储和使用它(但ASP.NET也将它用于某些事情)但暴露它只是打开了另一个区域供攻击的人。
http://www.owasp.org是了解保护网站安全的好地方。