如果可能的话我该怎么办 我尝试过但不起作用
需要测试它是如何工作的如果某些东西有效用户可以在更改我们使用的会话ID后登录 c# 页面,所以如果它是可更改的,我如何从客户端更改 asp 网站中的会话 id
您当然可以从客户端调用 Web 方法来设置或获取您拥有的任何会话值。
现在,这里需要注意一些,因为暴露一个 Web 方法来设置(或获取)任何 session[] 值可能会成为一个安全漏洞,所以,我建议 Web 方法仅设置您想要的一个会话值,并且您不要传递您想要更改的“会话”“密钥”值。
所以,你可以说有这个:
[WebMethod(EnableSession = true)]
public void SetSession(string sValue)
{
HttpContext.Current.Session["PKID"] = sValue;
}
现在,我想你可以允许客户端 JS 代码设置任何密钥,并传递会话密钥值,但如上所述,从安全角度来看,我不建议这样做。
因此你可以拥有这个:
[WebMethod(EnableSession = true)]
public void SetSession(string sValue, string sKey)
{
HttpContext.Current.Session[sKey] = sValue;
}
所以,现在你可以这样调用上面的内容
<script>
function mytest() {
var sValue = "134"
var sKey = "PKID"
$.ajax({
type: "POST",
url: "WebService1.asmx/SetSession",
data: JSON.stringify({ sValue : sValue, sKey : sKey }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
console.log("success");
},
error: function (error) {
console.log("AJAX Error: " + error);
}
});
}
因此,您可以设置启用会话的 WebMethod。如果您愿意,您甚至可以传递会话 sKey 值。
由于可以相对轻松地修改客户端代码,因此理论上这将允许某人更改任何 session[] 值。
因此,我建议 Web 方法对于任何此类方法仅使用一个硬编码“密钥”。
如果用户更改客户端 JavaScript 中的值(通过按 f12 即可轻松完成),那么实际上他们可以更改数据库 pk ID,并且很可能能够通过这样一个简单的 hack 来查看其他人的数据行值.
但是,如上所示,您可以构建一个从客户端更改 session[] 值的 Web 方法。