ASP.NET模拟指定帐号权限, 删除非本机图片文件
2009-11-04 16:50:37 来源:WEB开发网核心提示: 说明: 执行当前 Web 请求期间,出现未处理的异常,ASP.NET模拟指定帐号权限, 删除非本机图片文件,请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息, 异常详细信息: System.ArgumentException: 不支持 URI 格式,源错误: 行 30: PRotected vo
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.ArgumentException: 不支持 URI 格式。
源错误:
行 30: PRotected void BTNCLick(object sender, EventArgs e)
行 31: {
行 32: System.IO.File.Delete(path + "200911313360.jpg");
行 33: ScriptManager.RegisterStartupScript(Page, typeof(Page), "ok", "alert('删除成功');", true);
行 34: }
不支持 URI 格式。
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.xml.Linq;
public partial class _Default : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lbExist;
protected System.Web.UI.WebControls.Label Label2;
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;
WindowsImpersonationContext impersonationContext;
[DllImport("advapi32.dll", CharSet=CharSet.Auto)]
public static extern int LogonUser(String lpszUserName,String lpszDomain,
String lpszPassWord,int dwLogonType,int dwLogonProvider,
ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet=System.Runtime.InteropServices.CharSet.Auto,
SetLastError=true)]
public extern static int DuplicateToken(IntPtr hToken,int impersonationLevel, ref IntPtr hNewToken);
private void Page_Load(object sender, System.EventArgs e) {
//noImpersonate();
//ImpersonateIIS();
ImpersonateUser();
}
private void noImpersonate() {
try
{
if(File.Exists("c:\\Documents and Settings\\shaozhidong\\test.txt"))
lbExist.Text = "存在!";
else
lbExist.Text = "该文件不存在!";
}
catch(Exception) {
lbExist.Text = "没有权限!";
}
}
/// <summary>
/// 说明:.
/// 函数:ImpersonateIIS
/// 时间:2009-11-4
/// 作者:zmh_27@126.com
/// </summary>
private void ImpersonateIIS() {
// 在代码中模拟IIS认证帐号
System.Security.Principal.WindowsImpersonationContext impersonationContext;
impersonationContext = ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();
if(File.Exists("c:\\Documents and Settings\\shaozhidong\\test.txt"))
lbExist.Text = "存在!";
else
lbExist.Text = "该文件不存在!";
impersonationContext.Undo();
}
/// <summary>
/// 说明:.
/// 函数:ImpersonateUser
/// 时间:2009-11-4
/// 作者:zmh_27@126.com
/// </summary>
private void ImpersonateUser() {
//在代码中模拟指定账号
if(impersonateValidUser("shaozhidong", "shaozhd", "111")) {
if(File.Exists("c:\\Documents and Settings\\shaozhidong\\test.txt"))
lbExist.Text = "存在!";
else
lbExist.Text = "该文件不存在!";
undoImpersonation();
} else {
lbExist.Text = "权限不够!";
}
}
private bool impersonateValidUser(string userName, string domain, string password) {
WindowsIdentity tempWindowsIdentity;
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;
if(LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0) {
if(DuplicateToken(token, 2, ref tokenDuplicate) != 0) {
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
impersonationContext = tempWindowsIdentity.Impersonate();
if (impersonationContext != null)
return true;
else
return false;
} else
return false;
} else
return false;
}
private void undoImpersonation() {
impersonationContext.Undo();
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e) {
//
// CODEGEN:该调用是 asp.net Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent() {
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
异常详细信息: System.ArgumentException: 不支持 URI 格式。
源错误:
行 30: PRotected void BTNCLick(object sender, EventArgs e)
行 31: {
行 32: System.IO.File.Delete(path + "200911313360.jpg");
行 33: ScriptManager.RegisterStartupScript(Page, typeof(Page), "ok", "alert('删除成功');", true);
行 34: }
不支持 URI 格式。
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.xml.Linq;
public partial class _Default : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lbExist;
protected System.Web.UI.WebControls.Label Label2;
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;
WindowsImpersonationContext impersonationContext;
[DllImport("advapi32.dll", CharSet=CharSet.Auto)]
public static extern int LogonUser(String lpszUserName,String lpszDomain,
String lpszPassWord,int dwLogonType,int dwLogonProvider,
ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet=System.Runtime.InteropServices.CharSet.Auto,
SetLastError=true)]
public extern static int DuplicateToken(IntPtr hToken,int impersonationLevel, ref IntPtr hNewToken);
private void Page_Load(object sender, System.EventArgs e) {
//noImpersonate();
//ImpersonateIIS();
ImpersonateUser();
}
private void noImpersonate() {
try
{
if(File.Exists("c:\\Documents and Settings\\shaozhidong\\test.txt"))
lbExist.Text = "存在!";
else
lbExist.Text = "该文件不存在!";
}
catch(Exception) {
lbExist.Text = "没有权限!";
}
}
/// <summary>
/// 说明:.
/// 函数:ImpersonateIIS
/// 时间:2009-11-4
/// 作者:zmh_27@126.com
/// </summary>
private void ImpersonateIIS() {
// 在代码中模拟IIS认证帐号
System.Security.Principal.WindowsImpersonationContext impersonationContext;
impersonationContext = ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();
if(File.Exists("c:\\Documents and Settings\\shaozhidong\\test.txt"))
lbExist.Text = "存在!";
else
lbExist.Text = "该文件不存在!";
impersonationContext.Undo();
}
/// <summary>
/// 说明:.
/// 函数:ImpersonateUser
/// 时间:2009-11-4
/// 作者:zmh_27@126.com
/// </summary>
private void ImpersonateUser() {
//在代码中模拟指定账号
if(impersonateValidUser("shaozhidong", "shaozhd", "111")) {
if(File.Exists("c:\\Documents and Settings\\shaozhidong\\test.txt"))
lbExist.Text = "存在!";
else
lbExist.Text = "该文件不存在!";
undoImpersonation();
} else {
lbExist.Text = "权限不够!";
}
}
private bool impersonateValidUser(string userName, string domain, string password) {
WindowsIdentity tempWindowsIdentity;
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;
if(LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0) {
if(DuplicateToken(token, 2, ref tokenDuplicate) != 0) {
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
impersonationContext = tempWindowsIdentity.Impersonate();
if (impersonationContext != null)
return true;
else
return false;
} else
return false;
} else
return false;
}
private void undoImpersonation() {
impersonationContext.Undo();
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e) {
//
// CODEGEN:该调用是 asp.net Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent() {
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
- ››asp.net页面弄成伪静态页面
- ››Asp.net 中将汉字转换成拼音的方法
- ››ASP.NET及JS中的cookie基本用法
- ››ASP.NET获取MS SQL Server安装实例
- ››asp.net实现调用百度pai 在线翻译英文转中文
- ››ASP.NET页面选项进行提示判断
- ››Asp.net定时执行程序
- ››ASP.NET中利用DataList实现图片无缝滚动
- ››ASP.NET验证控件RequiredFieldValidator
- ››ASP.NET中使用System.Net.Mail发邮件
- ››ASP.NET中获取用户控件中控件的ID
- ››ASP.NET中FileBytes写成文件并存档
更多精彩
赞助商链接