var competitive=new {technique,business}

2007/5/28

加密Web.Config[zz]

原文
1、打开记事本,然后将下面的代码复制到一个新文件中。
保存 my.aspx 到你的web目录 ,运行一下窗体显示 “ NT AUTHORITY\NETWORK SERVICE ”。成功!
2、(关键一步)运行cmd,执行以下 aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE" 说明:注册默认的 RsaProtectedConfigurationProvider 的RSA 密钥容器, NetFrameworkConfigurationKey 是 RsaProtectedConfigurationProvider 的默认provider。 成功!
3、现在,可以加密web.config ,运行: 加密:aspnet_regiis -pe "connectionStrings" -app "/Myweb" 说明:"connectionStrings" 是要加密的节,"/Myweb"是的web目录 解密:aspnet_regiis -pd "connectionStrings" -app "/Myweb" 成功!
4、这样就可以在程序里调用了(不用解密, 哈哈): ... string connstr= ConfigurationManager.ConnectionStrings["myConnstr"].ConnectionString.ToString(); ...

同样的,也可以用创建自己的RSA 密钥容器,如下:
(1)、创建 "MyKeys" 密钥容器,运行:aspnet_regiis -pc "MyKeys" -exp
(2)、在web.config里加入以下: 保存。
(3)、授予帐户对计算机级别的 "MyKeys" RSA 密钥容器的访问权限,运行: aspnet_regiis -pa "MyKeys" "NT AUTHORITY\NETWORK SERVICE"
(4)、现在,可以加密web.config ,运行: 加密:aspnet_regiis -pe "connectionStrings" -app "/Myweb" -prov "MyProvider" 说明:"connectionStrings" 是要加密的节,"/Myweb"是的web目录,"MyProvider" 自己密钥容器 解密:aspnet_regiis -pd "connectionStrings" -app "/Myweb" -prov "MyProvider"

在ASP.NET 2.0中配置MachineKey

原文

概述

MachineKey原始配置状态:

<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="SHA1" decryption="Auto" />

validation和validationkey用于产生hashcode来防止篡改,decryption和 decryptionKey用于加密解密。只有默认情况下viewstate是防篡改的,而formauthentiaction是防篡改和加密的,只有在WebFarm或跨程序进行form认证的情况下才需要修改validationkey和decryptionKey。如果使用了角色管理并使用了role cache 那么会产生一个role cookie默认情况下使用与form认证一样的机制进行加密。

ViewState

<pages enableViewStateMac="true"(防篡改) viewStateEncryptionMode="Auto" (加密) />时server根据比较由validationKey产生的hashcode来防止篡改。该值同样在formauthentication,role manager和anonymous identification中用到。

当validation为AES和3DES并且page中viewStateEncryptionMode设为auto或always时会根据decryptionKey的值加密解密viewstate.

Form Authentication Tickets:

设置decryption并配置forms配置节中的protection属性

<system.web>
<authentication mode="Forms">
<forms name=".AuthCookie" loginUrl="login.aspx" protection="All"/>
</authentication>
</system.web>

MemberShip:

<membership defaultProvider="AspNetSqlMembershipProvider" userIsOnlineTimeWindow="15" hashAlgorithmType=""> <providers> <clear /> <add connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresUniqueEmail="false" passwordFormat="Encrypted" .../> </providers> </membership>

Anonymous Identification:

<anonymousIdentification enabled="true" cookieName=".ASPXANONYMOUS" cookieTimeout="100000" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="Encrypted" cookieless="UseCookies" domain="" />

Role Cookies:

<roleManager enabled="true"
cacheRolesInCookie="true"
cookieProtection="All" ... />

产生加密码的代码:

using System;
using System.Text;
using System.Security;
using System.Security.Cryptography;

class App {
static void Main(string[] argv) {
int len = 128;
if (argv.Length > 0)
len = int.Parse(argv[0]);
byte[] buff = new byte[len/2];
RNGCryptoServiceProvider rng = new
RNGCryptoServiceProvider();
rng.GetBytes(buff);
StringBuilder sb = new StringBuilder(len);
for (int i=0; i<buff.Length; i++)
sb.Append(string.Format("{0:X2}", buff[i]));
Console.WriteLine(sb);
}
}

2007/5/24

Ruby On Rails

1,One Step Install--InstantRails

2,关于Ruby On Rails 的图书清查看我的迅雷博客

2007/5/20

HttpHandler,HttpModule,LightBox

1,HTTP Handlers and HTTP Modules in ASP.NET

2,在 ASP.NET 中执行 URL 重写

3,LightWindow,LightBox,GrayBox

2007/5/17

Arcgis Server 安装

安装完arcgis server后新建了一个web map application,但是启动后报运行时错误。运行其他程序也出现了运行时错误。误以为是iis出了问题重装asp.net(aspnet_regiis -i),重启动原有程序报找补不到资源错误,baidu一下原来在2003下asp.net扩展默认不是允许的(晕)。开启后将配置文件中的customErrors 的mode属性改为Off,原来是全局web.config中esri提供的httphandle后多出了一个xmlns属性,去掉该属性F5运行通过。

2007/5/15

控件映射

以前只知道url映射,今天看msdn magazine发现asp.net提供了控件映射,在web.config中添加如下代码:

<pages>
<tagMapping>
<add tagType=”System.Web.UI.WebControls.TextBox”
mappedTagType=”Dino.Samples.TextBox” />
</tagMapping>
</pages>

2007/5/14

MasterPage小议

在设计时masterpage和page是两个分离的对象,他们有各自的children而在运行时masterpage用自己的children替代page的children.在PreInit事件之后Init事件之前masterpage将Content控件内容移至ContentPlaceHolder内并进行排放,当Init事件发生后masterpage作为control加入page中。

替换masterpage的三种方法:

1,在preinit事件中设置MasterPageFile。

2,如果有多个页需要替换masterpage而又嫌麻烦可以写一个继承至page的类,为该类添加PreInit事件:

using System;
using System.Web.UI;
public class BasePage : Page
{
public BasePage()
{
this.PreInit += new EventHandler(BasePage_PreInit);
}
void BasePage_PreInit(object sender, EventArgs e)
{
MasterPageFile = "~/Master1.master";
}
}

3,使用HttpMoudule

using System;
using System.Web;
using System.Web.UI;
public class MasterPageModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
}
void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
Page page = HttpContext.Current.CurrentHandler as Page;
if (page != null)
{
page.PreInit +=new EventHandler(page_PreInit);
}
}
void page_PreInit(object sender, EventArgs e)
{
Page page = sender as Page;
if (page != null)
{
page.MasterPageFile = "~/Master1.master";
}
}
public void Dispose()
{
}
}

Content Page 到 MasterPage的交互

在masterpage中使用属性定义控件的值这样在content page中使用master.property更改masterpage中控件的值,而使用master.fincontrol方法需要类型转换且不进行编译时类型检查。

如果我们在一个程序中有两个masterpage将导致如下错误:Unable to cast object of type 'ASP.master2_master' to type 'ASP.master1_master'.解决方法是创建继承至masterpage的母版页。(我试验了一下没发现此问题??)

MasterPage到Content Page的交互

masterpage中的控件不知道content page中的内容所以应该使用事件。

定义一个cs文件:

using System;
public class SendEmailEventArgs : EventArgs
{
public SendEmailEventArgs(string toAddress)
{
_toAddress = toAddress;
}
private string _toAddress;
public string ToAddress
{
get { return _toAddress; }
set { _toAddress = value; }
}
}
public delegate void SendEmailEventHandler(
object sender, SendEmailEventArgs e);

MasterPage中:

<%@ Master Language="VB" %>
<script runat="server">
Public Event SendEmail As SendEmailEventHandler
Protected Sub SendEmailButton_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Dim eventArgs As New SendEmailEventArgs(EmailAddressBox.Text)
RaiseEvent SendEmail(Me, eventArgs)
End Sub
</script>

content page中:

<%@ Page Language="VB" MasterPageFile="~/Master1.master"
AutoEventWireup="true" %>
<%@ MasterType VirtualPath="~/Master1.master" %>
<script runat="server">
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs)
AddHandler Master.SendEmail, AddressOf EmailReport
End Sub
Protected Sub EmailReport(ByVal sender As Object, ByVal e As SendEmailEventArgs)
Dim address As String = e.ToAddress
' do work
End Sub
</script>

详见ASP.Net 2.0 - Master Pages: Tips, Tricks, and Traps

2007/5/11

ViewState小议

今天看了几篇关于ViewState的文章:
1,ViewState: All You Wanted to Know
2,ASP.NET Web Form 的“连续”和“有状态”假象、
3,Understanding ASP.NET View State
4,TRULY Understanding ViewState
对于ViewState的保存优化加深了了解,得出一个结论:viewstate保存的是页面回发前控件的状态。只有同一页面上需要postback前后进行数据比较来触发某事件的页面才需要ViewState.关闭enableviewstate后页面也会post返回用户输入的数据。

2007/5/9

1,避免常见 ASP.NET 缺陷,使网站平稳运行
2,ASP.NET 2.0 异步页面原理浅析
3,通过 ASP.NET 异步编程实现可扩展的应用程序

UpdatePanel+GridView

resqponse:

2007/5/8

默认情况下web.config修改后,asp.net程序会被重启。为了防止程序重启,要修machine.config 文件。
<section name="appSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartonexternalchanges="false" requirepermission="false">
restartOnExternalChanges设置为false,程序就不会重启了。
两个小工具:
Firebug:Firefox下的调试工具,可以观看网页发送和返回的具体信息。还可以查看dom,css,javascript等信息。
Fiddler:IE下观看网页发送和返回的具体信息的工具。

2007/5/3

IIS启动问题

   今天想在本地学习一下Google Map API,可是iis无法启动,点击依赖选项卡提示rpc服务器不可用,上网google发现是DCOM Server Process Launcher服务没启动(昨晚精简服务时给关了)。再启动提示文件在被使用,使用事件查看器查看,有两条提示:
不能为 0.0.0.0:80 绑定到下面的传输。IP 仅侦听列表可能包含到一个接口的引用,该接口在此计算机上不存在。数据字段包含错误号。
不能为站点 '1' 注册 URL 前缀“http://:80/”。此站点被解除活动状态。数据字段包含错误号。
运行cmd,输入netstat -ano发现有一个程序占用了80端口,用process explorer查看原来是迅雷占了80端口。真不知道迅雷要占80端口干嘛?