如果输入的密文不合法,类库则会抛出异常,这便是一种提示。攻击者可以不断地提供密文,让解密程序给出提示,不断修正,最终得到的所需要的结果。这里的一个关键在于,攻击者所需要的提示仅仅是“解密成功与否”这样一个二元信息,例如它在一个Web程序中可能只是“200 – OK”及“500 – Internal Server Error”这样的表现形式,而不需要其他任何详细信息。
标签存档: asp.net
C#中“回发或回调参数无效”的解决办法
asp.net中使用回发按钮时经常会遇到这样的错误: 回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用<%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 这是我们经常会犯的一个小错误,它的原因在于Page_Load方法中没有对页面是初次载入还是PostBack进行判断,导致回调事件触发前对控件进行了更改,此时,只要加入对是否PostBack的判断既可。如下例: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataBind(); } }
C#中dllimport用法
dllimport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息。
dllimport属性应用于方法,要求最少要提供包含入口点的dll的名称。
[AttributeUsage(AttributeTargets.Method)]
public class DllImportAttribute: System.Attribute
{
public DllImportAttribute(string dllName) {…} //定位参数为dllName
public CallingConvention CallingConvention; //入口点调用约定
public CharSet CharSet; //入口点采用的字符接
public string EntryPoint; //入口点名称
public bool ExactSpelling; //是否必须与指示的入口点拼写完全一致,默认false
public bool PreserveSig; //方法的签名是被保留还是被转换
public bool SetLastError; //FindLastError方法的返回值保存在这里
public string Value { get {…} }
}
访问Repeater的Footertemplate中控件的方法
Footertemplate在整个Repeater的Controls集合中是最后一个,因此访问它的途径之一是这样的: rpt是一个Repeater对象 Control ctl = rpt.Controls[rpt.Controls.Count-1]; 之后如果需要访问Footertemplate中的控件,则只需调用ctl的findcontrol方法即可。 需要注意的是,采用上述方法访问Footertemplate控件,必须在repeater进行databind之后,否则会出现null引用的错误。