2010年2月25日 星期四

IIS 7 允許檔案名稱有+ 號

解決方式:
使用 [以系統管理員身分執行] 選項開啟命令提示字元,並將目錄變更至 %windir%\system32\inetsrv
啟用雙重逸出,請在命令提示字元輸入下列命令,然後按 ENTER:

appcmd set config /section:requestfiltering /allowdoubleescaping:true

執行畫面:


相關文章:


IIS7 rejecting URLs containing + .

Here is the deal. The IIS7 request filter rejects URLs containing + characters. We do this because the + character is a dangerous choice. Some standards, e.g. the CGI standard require +'s to be converted into spaces. This can become a problem if you have code that implements name-based rules, for example urlauthorization rules that base their decisions on some part of the url.
Here is a cooked up example:
Let's suppose you have code that evaluates the following rule:



With the ambiguity of leaving +'s in place or converting +'s to spaces there is a possiblity that your rule engine allows access to a non-Admin, for example if the attacker enters http://myserver/my+vdir. The "my vdir" authorization rule won't match because your authorization code searches for the string "my+vdir" but your rule says "my vdir". Your rule won't apply and the attacker gets access.

If you absolutely want to have spaces you can simply turn off the doubleEscaping feature for your application, for your site or for the whole server. Here is an example:

%windir%\system32\inetsrv\appcmd set config "Default Web Site" -section:system.webServer/security/requestfiltering -allowDoubleEscaping:true



2010年2月24日 星期三

IIS 7掛載網芳的虛擬目錄

慢慢地, 用 windows 20008 + iis 7 的伺服器會愈來愈多, 可以先學起來, 以後可能可以用的到, 方法應該不只一個, 這只是解法的一種.

環境:

兩台 Windows Server 2008 + IIS 7 伺服器
主機1: 192.168.x.1
主機2: 192.168.x.2

網站共享的檔案都放在檔案伺服器上,網路分享的 UNC 路徑為 \\192.168.x.2\Public
我需要在192.168.x.1 網站根目錄下建立一個 Public 虛擬目錄,並且目錄需對應到 \\192.168.x.2\Public 分享目錄。


設定步驟:

1. 新增一個應用程式集區(Application Pool):
新增應用程式集區時,名稱自己取,但是 .Net Framework 版本務必選取「沒有 Managed 程式碼」!



2. 接著並不是新增「虛擬目錄」,而是要新增「應用程式」, 虛擬目錄按右鍵後, 也可以轉換成應用程式.

接著必須設定別名、選取正確的應用程式集區、設定實體路徑(UNC路徑)、設定連線身份設定「連線身份」時,記得在開放分享目錄的那台主機(192.168.x.2),與 WebFarm (192.168.x.1) 中的成員主機,都必須要有同樣一組帳號、密碼,才能正確透過 UNC 存取檔案,否則一樣會導致權限不足無法存取檔案的情況。


相關文章:

2010年2月11日 星期四

[SQL].列資料轉成欄資料

目的:
分享一個 T-Sql 句子, 把列裡的資料, 轉成欄位裡.

當有一筆資料, 某一個欄位是做一對多 (例如: checkbox), 想要把 的那些資料一口氣串在 的那一筆的某個欄位裡, 可以試看看這樣做.


執行畫面:

1. 原始資料如下:
SQL: select * from testTable



2. 把列資料轉成欄資料:
SQL:
select * from testTable
DECLARE @SQL Varchar(max)
select @SQL=''
SELECT @SQL=@SQL + '' + convert(varchar(20),id) + ','
FROM testTable
select @SQL


幫 function 整理及包裝一下後, 就可以用
SQL: select [dbo].[fn_getTestTitles]('1,3')
來取出第id=1及3 這2筆的資料.


包裝了2個 function 如下:
CREATE FUNCTION [dbo].[fn_getTestTitles](@myData varchar(200))
RETURNS nvarchar(2000)
AS
BEGIN
DECLARE @SQL Varchar(max)
select @SQL=''
SELECT @SQL=@SQL + '' + title + char(13) + char(10)
FROM testTable
where id in (select data from dbo.fn_slip_str(@myData,','))
RETURN (@SQL)
END


Create Function fn_slip_str( @InStr nvarchar(2000) , @s_char nvarchar(1) )
Returns @tb Table ( sno int , data nvarchar(100) )
As
Begin
Set @InStr = @s_char + @InStr + @s_char;
Declare @p1 Int , @p2 Int , @data nvarchar(100) , @sno int;
Set @p1 = -1 ; Set @p2 = -1 ; Set @data = '' ; Set @sno = 0;
While ( 0 Not In (@P1,@P2) ) Begin
Set @p1 = CharIndex(@s_char,@InStr,@p1+1);
Set @p2 = CharIndex(@s_char,@InStr,@p1+1);
If ( 0 In (@p1,@p2) )
Break;
Set @data = SubString(@InStr,@p1+1,@p2-@p1-1);
if ( @data <> '' ) Begin
Set @sno = @sno +1;
Insert Into @tb ( sno , data ) Values ( @sno , @data )
End
End
Return
End


相關文章:

2010年2月10日 星期三

[js].分享日曆元件


執行畫面:


使用方式:
step 1: 加入 include

step 2: 在產生出來的欄位後方, 加入這一段 javascript script:



附件: Download

2010年2月5日 星期五

[Asp].IIS7 上傳檔案大小限制

上傳檔案時遇到 執行錯誤: 'ASP 0101 : 80004005'
原因: 上傳的內容大小超過限制,預設是200K.


Windows 2003 (IIS 6.0) 解決辦法:
1.停止 IIS 服務,
2. 打開 C:\Windows\System32\Inetsrv 中的 metabase.XML, 並修改 AspMaxRequestEntityAllowed 為你需要的值(例如 1073741824, 1GB)。
如果還是不行的話, 修改看看 AspBufferingLimit 裡的值.
3. 啟動IIS服務。


Windows 2008 (IIS 7.0) 解決辦法:
1. 在iis 裡點選要修改的站台.




2. 修改 [Asp] -> [限制內容] -> [要求實體的上限], 改好後並按下 "套用".

附註:其實 200k 就夠用了說, 如果是分次從 user 的 client 端瀏覽器一次讀取200k 的做的話, 例如程式碼:

        dim myTotalBytes
        dim myReadBuffer
        dim myReadLimit
        myReadBuffer = 200000     '// 200KB
        myTotalBytes = Request.TotalBytes
        if myTotalBytes > 0 then
            do
                if myTotalBytes <= myReadBuffer then
                    '// read one time.
                    BinaryStream.write Request.BinaryRead(myTotalBytes)
                    myTotalBytes = 0
                else
                    '// read many time.
                    BinaryStream.write Request.BinaryRead(myReadBuffer)
                    myTotalBytes = myTotalBytes - myReadBuffer
                end if
                if myTotalBytes < 1 then
                    exit do
                end if
            loop
        end if



2010年2月3日 星期三

[Asp].建議避免用 Response.AddHeader 同時設定 contentType 及 charset.

測試主機 OS: Windows Server 2008 standard 版 service pack 1
測試主機 Web Server: Microsoft-IIS/7.0


(會有問題的) Asp Code:
Response.AddHeader "Content-Type", "text/xml; charset=utf-8"

(會有問題的) 執行結果:
Content-Type: text/xml; charset=utf-8,text/xml; Charset=utf-8

造成有問題的畫 面:



(建議的) Asp Code:
Response.CacheControl = "cache"
Response.AddHeader "Pragma", "cache"
Response.charset = "UTF-8"
response.contentType = "text/xml"

(建議的) 執行結果:
Content-Type: text/xml; Charset=UTF-8


Facebook 留言板