关于web应用程序安全的思考(序)
2008-11-26 13:36:02 来源:WEB开发网其中TextBox1后面的%E5%B0%8F%E7%94%9F就是“小生”(encodeURI函数编码的结果),修改此行数据,并对Content-Length作适当调整,就完全可以模仿按下”送出“按钮的动作。
实际上,不管是直接在地址栏输入url,还是在网页上单击链接,提交窗体,Ajax请求,web service呼叫等等,客户端都需要向web server发送相关的Request。因此对于管控比较全面的安全方案,必须对每一次Request都进行验证。而且这个验证最好在所有的被请求程序执行之前就完成,就好比您的web应用程序是一个大型游乐场,而您的安全管控就是这个游乐场唯一入口的检票处,凡进入游乐场的人员,都是买了票的,至于游乐场里面一些还要买票的项目,那就不属于入口检票处的责任了。
可以对比一下手上的系统,看是否每次Request都有进行管控?对没有管控到的Request会不会发生问题?安全隐患的机率有多大?值不值得再加一次管控?
您的系统有多安全?
权限本质探讨
所谓安全管控,其实就是权限判断,即对用户能否访问某一权限对象进行判断,并且在无权访问时的相应处理。
权限,实际上就是使用者与权限对象的一种多对多的关系。
如一个权限厂别的数据如下:
UserID FactID
-------------------------
1 1
1 2
2 3
表示UserID为1的用户拥有FactID为1和2的权限,UserID为2的用户拥有厂别ID为3的权限。
权限的本质在于对权限的使用方式进行抽象
以下为常见的权限接口,主要包括判断权限和获取权限列表:
/// <summary>
/// 权限接口
/// </summary>
interface IRightProvider
{
/// <summary>
/// 判断权限
/// </summary>
/// <param name="userID">用户ID</param>
/// <param name="objectID">权限对象ID</param>
/// <returns>true:有权限 false无权限</returns>
bool HasRight(string userID, string objectID);
/// <summary>
/// 获取权限列表
/// </summary>
/// <param name="userID">用户ID</param>
/// <returns>objectID列表</returns>
List<string> GetRights(string userID);
}
更多精彩
赞助商链接