說明:ASP.NET 4.0,另開新視窗時,出現錯誤訊息:a potentially dangerous request.form value was detected from the client,是避免XSS (Cross-site scripting)攻擊(一種夾帶script語法到網頁的方式)的訊息,所以偵測到post <或>字元,就會出現此訊息。
解決方法:
1.在web.config的<system.web></system.web>標籤中加上 <httpRuntime requestValidationMode="2.0" />與<pages validateRequest="false" />,因為ASP.NET 2.0 request validation的順序會在request processing events之後,若限個別pages,可在各pages加上<@ Page validateRequest="false" %>,但此方法不推薦。
2. 使用HttpUtility.HtmlEncode (Server.HtmlEncode)或AntiXss.HtmlEncode (import AntiXssLibrary.dll),會將特殊字元編碼HTML字元集,如<換為<,"換為",供HTML正常輸出。
參考資料:
http://stackoverflow.com/questions/81991/a-potentially-dangerous-request-form-value-was-detected-from-the-client
http://www.asp.net/whitepapers/aspnet4/breaking-changes
http://msdn.microsoft.com/en-us/library/hh882339.aspx
http://msdn.microsoft.com/en-us/library/aa973813.aspx
http://msdn.microsoft.com/en-us/library/ms998274.aspx
http://www.dotblogs.com.tw/johnny/archive/2010/03/01/13829.aspx
http://www.dotblogs.com.tw/coca/archive/2011/03/11/21794.aspx
http://blog.darkthread.net/post-2008-06-18-eval-xss.aspx
2014年5月30日 星期五
2014年5月7日 星期三
[Oracle] Windows環境下手動移除Oracle client
作法:
1. 使用Oracle Universal Installer (OUI)移除Oracle全部安裝程式。
2. 開始->執行regedit.exe->刪除HKEY_LOCAL_MACHINE/SOFTWARE/Oracle登錄檔。
3. 如果windows是64位元,需再刪HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Oracle登錄檔,如果有的話。
4. 刪除HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Ora開頭的登錄檔。
5. 重開機。
6. 刪除C:\Oracle (ORACLE BASE目錄)。
7. 刪除C:\Program Files\Oracle目錄,如果windows是64位元,需刪除C:\Program Files (x86)\Oracle目錄。
8. 刪除在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\目錄下與Oracle相關的子目錄。
9. 刪除C:\temp目錄下的所有檔案->再清空資源回收桶(與Oracle相關檔案)->結束。
參考資料:
http://www.oracle-base.com/articles/misc/manual-oracle-uninstall.php
1. 使用Oracle Universal Installer (OUI)移除Oracle全部安裝程式。
2. 開始->執行regedit.exe->刪除HKEY_LOCAL_MACHINE/SOFTWARE/Oracle登錄檔。
3. 如果windows是64位元,需再刪HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Oracle登錄檔,如果有的話。
4. 刪除HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Ora開頭的登錄檔。
5. 重開機。
6. 刪除C:\Oracle (ORACLE BASE目錄)。
7. 刪除C:\Program Files\Oracle目錄,如果windows是64位元,需刪除C:\Program Files (x86)\Oracle目錄。
8. 刪除在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\目錄下與Oracle相關的子目錄。
9. 刪除C:\temp目錄下的所有檔案->再清空資源回收桶(與Oracle相關檔案)->結束。
參考資料:
http://www.oracle-base.com/articles/misc/manual-oracle-uninstall.php
2014年4月28日 星期一
[Oracle] PL/SQL Developer無法載入oci.dll (Could not load oci.dll)的解決辦法
說明:安裝Oracle Client 64 bits版本,使用PL/SQL Developer設定Oracle Home與OCI library後,會出現Could not load oci.dll、OCIDLL forced to oci.dll、LoadLibrary(oci.dll) returned 0的錯誤訊息,這是因為PL/SQL Developer是32 bits的應用程式,無法載入64 bits的oci.dll檔。
找到兩種解法:
1. Oracle官網(http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html)下載Instant Client Downloads for Microsoft Windows (32-bit) -> 解壓縮到某路徑 -> 將PL/SQL Developer(程式->Tools->Preferences)的Oracle Home設為此路徑 -> OCI library設為路徑\oci.dll -> 至系統內容內的環境變數新增一筆TNS_ADMIN = Oracle Client 64 bits放tnsnames.ora的路徑(例: D:\app\xxx\product\11.2.0\client_1\network\admin) -> 再打開PL/SQL Developer即可。
2. 直接安裝Oracle Client 32 bits版本,可與64 bits共存,測試過也可以。
參考資料:
http://www.databaseskill.com/488915/
http://www.oracle.com/technetwork/topics/winsoft-085727.html
http://www.nextofwindows.com/how-to-addedit-environment-variables-in-windows-7/
http://daniel-tu.iteye.com/blog/1276589
找到兩種解法:
1. Oracle官網(http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html)下載Instant Client Downloads for Microsoft Windows (32-bit) -> 解壓縮到某路徑 -> 將PL/SQL Developer(程式->Tools->Preferences)的Oracle Home設為此路徑 -> OCI library設為路徑\oci.dll -> 至系統內容內的環境變數新增一筆TNS_ADMIN = Oracle Client 64 bits放tnsnames.ora的路徑(例: D:\app\xxx\product\11.2.0\client_1\network\admin) -> 再打開PL/SQL Developer即可。
2. 直接安裝Oracle Client 32 bits版本,可與64 bits共存,測試過也可以。
參考資料:
http://www.databaseskill.com/488915/
http://www.oracle.com/technetwork/topics/winsoft-085727.html
http://www.nextofwindows.com/how-to-addedit-environment-variables-in-windows-7/
http://daniel-tu.iteye.com/blog/1276589
2014年4月20日 星期日
[ASP.NET] 在Server端動態加入Client script
說明:想在server端建立client script時,該怎麼做?
作法:
使用Page.ClientScript屬性取得的ClientScriptManager object提供的四個method:
1. RegisterStartupScript(Type type, string key, string script, bool addScriptTags):
在網頁載入完成後及網頁OnLoad事件觸發前,會執行所加入的script,適用非一開始會用
到的script。
2. RegisterClientScriptBlock(Type type, string key, string script, bool addScriptTags):
會將script加入至網頁頂端(<form>下),不保證script可依註冊的順序輸出。
3. RegisterClientScriptInclude(Type type, string key, string url):
動態加入js 檔的script,在以動態方式加入其他script前就會加入該script,因此可能無法參
考網頁上的某些項目。
4. RegisterOnSubmitStatement(Type type, string key, string script):
加入可回應網頁onsubmit 事件的script (ex: confirm),在送出網頁前即執行script,因此可取消送出動作。例:
ClientScript.RegisterOnSubmitStatement(this.GetType(), "ConfirmSubmit", "return confirm('Do you want to submit the page?')");
參考資料:
http://msdn.microsoft.com/zh-tw/library/system.web.ui.page.clientscript%28v=vs.90%29.aspx
http://msdn.microsoft.com/zh-tw/library/system.web.ui.clientscriptmanager%28v=vs.90%29.aspx
http://msdn.microsoft.com/zh-tw/library/ms178207%28v=vs.100%29.aspx
http://www.dotblogs.com.tw/hatelove/archive/2009/10/28/11325.aspx
http://msdn.microsoft.com/zh-tw/library/7ytf5t7k%28v=vs.100%29.aspx
作法:
使用Page.ClientScript屬性取得的ClientScriptManager object提供的四個method:
1. RegisterStartupScript(Type type, string key, string script, bool addScriptTags):
在網頁載入完成後及網頁OnLoad事件觸發前,會執行所加入的script,適用非一開始會用
到的script。
2. RegisterClientScriptBlock(Type type, string key, string script, bool addScriptTags):
會將script加入至網頁頂端(<form>下),不保證script可依註冊的順序輸出。
3. RegisterClientScriptInclude(Type type, string key, string url):
動態加入js 檔的script,在以動態方式加入其他script前就會加入該script,因此可能無法參
考網頁上的某些項目。
4. RegisterOnSubmitStatement(Type type, string key, string script):
加入可回應網頁onsubmit 事件的script (ex: confirm),在送出網頁前即執行script,因此可取消送出動作。例:
ClientScript.RegisterOnSubmitStatement(this.GetType(), "ConfirmSubmit", "return confirm('Do you want to submit the page?')");
參考資料:
http://msdn.microsoft.com/zh-tw/library/system.web.ui.page.clientscript%28v=vs.90%29.aspx
http://msdn.microsoft.com/zh-tw/library/system.web.ui.clientscriptmanager%28v=vs.90%29.aspx
http://msdn.microsoft.com/zh-tw/library/ms178207%28v=vs.100%29.aspx
http://www.dotblogs.com.tw/hatelove/archive/2009/10/28/11325.aspx
http://msdn.microsoft.com/zh-tw/library/7ytf5t7k%28v=vs.100%29.aspx
[C#] 透過WebBrowser控制項與HtmlElement類別自訂填表程式
說明:訂票時可自訂自動填表程式,減少輸入表單時間。
作法:
1. 開啟一winform專案->從工具箱拉WebBrowser進來。
2. 在WebBrowser物件的Url屬性上填上目標網址->選取DocumentCompleted事件。
3. code behind:
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlDocument hdTest = webBrowser1.Document;
foreach (HtmlElement he in hdTest.All)
{
if (he.Name == "selectStartStation")
{
he.SetAttribute("value", "1");
}
else if (he.Name == "selectDestinationStation")
{
he.SetAttribute("value", "7");
}
else if (he.Id == "mobileInputRadio")
{
he.InvokeMember("onClick");
he.SetAttribute("checked", "radio47");
}
}
}
參考資料:
1. 自動訂票程式
http://blog.xuite.net/tzjvetaj/blog/11653752-%E8%87%AA%E8%A3%BD%E8%A8%82%E7%A5%A8%E7%A8%8B%E5%BC%8F
2. 自動填表
http://rritw.com/a/bianchengyuyan/csharp/2011/0919/129332.html
3. radio
http://social.msdn.microsoft.com/Forums/zh-TW/4deeddb1-ea22-4683-9890-4eed2a0ed233/radio-?forum=236
作法:
1. 開啟一winform專案->從工具箱拉WebBrowser進來。
2. 在WebBrowser物件的Url屬性上填上目標網址->選取DocumentCompleted事件。
3. code behind:
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlDocument hdTest = webBrowser1.Document;
foreach (HtmlElement he in hdTest.All)
{
if (he.Name == "selectStartStation")
{
he.SetAttribute("value", "1");
}
else if (he.Name == "selectDestinationStation")
{
he.SetAttribute("value", "7");
}
else if (he.Id == "mobileInputRadio")
{
he.InvokeMember("onClick");
he.SetAttribute("checked", "radio47");
}
}
}
參考資料:
1. 自動訂票程式
http://blog.xuite.net/tzjvetaj/blog/11653752-%E8%87%AA%E8%A3%BD%E8%A8%82%E7%A5%A8%E7%A8%8B%E5%BC%8F
2. 自動填表
http://rritw.com/a/bianchengyuyan/csharp/2011/0919/129332.html
3. radio
http://social.msdn.microsoft.com/Forums/zh-TW/4deeddb1-ea22-4683-9890-4eed2a0ed233/radio-?forum=236
2014年3月30日 星期日
[JavaScript] BOM (Browser Object Model) methods或properties記錄
BOM function:
1. window object:
1.1 moveBy(dx, dy),dx表水平移動的像素,dy為垂直向下的像素,可為負數。
1.2 moveTo(x, y),將視窗移到螢幕的(x, y)處,可為負數。
1.3 resizeBy(dw, dh),dw表寬度增加的像素,dh為高度增加的像素,可為負數。
1.4 resizeTo(w, h),視窗寬度調為w像素,高度為h像素,不能負數。
1.5 open(URL, name, specs, replace),四個參數皆為optional,name可以為target屬性或式窗的名稱,如_blank, _self, _parent等,specs為特性字串,如height, width, menubar, resizable, scrollbar, toolbar等,replace為是否替代原視窗的bool值。
1.6 close(),關閉新開的視窗。
1.8 alert(), confirm(), prompt()
1.8 history.go(), history.back(), history.forward()
2. document object:
2.1 write()
3. location object:
3.1 replace(URL),使用者無法back,會移除document history。
3.2 reload(bool),預設false,從暫存reload,反之從server。
3.3 href,導入新頁面。
4. navigator object:
4.1 userAgent,可獲取user agent字串。
5. screen object:
5.1 availHeight,視窗可使用的螢幕高度。
5.2 avaiWidth,視窗可使用的螢幕寬度。
參考資料:
http://www.w3schools.com/jsref/obj_window.asp
1. window object:
1.1 moveBy(dx, dy),dx表水平移動的像素,dy為垂直向下的像素,可為負數。
1.2 moveTo(x, y),將視窗移到螢幕的(x, y)處,可為負數。
1.3 resizeBy(dw, dh),dw表寬度增加的像素,dh為高度增加的像素,可為負數。
1.4 resizeTo(w, h),視窗寬度調為w像素,高度為h像素,不能負數。
1.5 open(URL, name, specs, replace),四個參數皆為optional,name可以為target屬性或式窗的名稱,如_blank, _self, _parent等,specs為特性字串,如height, width, menubar, resizable, scrollbar, toolbar等,replace為是否替代原視窗的bool值。
1.6 close(),關閉新開的視窗。
1.8 alert(), confirm(), prompt()
1.8 history.go(), history.back(), history.forward()
2. document object:
2.1 write()
3. location object:
3.1 replace(URL),使用者無法back,會移除document history。
3.2 reload(bool),預設false,從暫存reload,反之從server。
3.3 href,導入新頁面。
4. navigator object:
4.1 userAgent,可獲取user agent字串。
5. screen object:
5.1 availHeight,視窗可使用的螢幕高度。
5.2 avaiWidth,視窗可使用的螢幕寬度。
參考資料:
http://www.w3schools.com/jsref/obj_window.asp
2014年3月27日 星期四
[ASP.NET] 套用MasterPage的Button權限控管
說明:有使用MasterPage,想根據用戶的權限代號(Authority)管控頁面上的新增/編輯/刪除等button,無權限則disable該button。
做法:在MasterPage的PreRender事件中使用ContentPlaceHolder控制項的findcontrol找到新增/編輯/刪除等button後,再分別disable該button。例:
//namespace
[Flags]
public enum Privilege
{
None=0,
View=1,
Add=2,
Edit=4,
Remove=8,
All = None|View|Add|Edit|Remove
}
//xxx.master.cs
protected override void OnPreRender(EventArgs e)
{
try
{
Button btnAdd = (Button)ContentPlaceHolder1.FindControl("btnAdd");
Button btnEdit = (Button)ContentPlaceHolder1.FindControl("btnEdit");
Button btnDel = (Button)ContentPlaceHolder1.FindControl("btnDel");
if (Authority == (int)Privilege.View)
{
btnAdd.Disable = false;
btnEdit.Disable = false;
btnDel.Disable = false;
}
else if (Authority == (int)(Privilege.View | Privilege.Add))
{
btnEdit.Disable = false;
btnDel.Disable = false;
}
...以此類推
}
catch (Exception ex)
{
throw ex;
}
base.OnPreRender(e);
}
參考資料:
做法:在MasterPage的PreRender事件中使用ContentPlaceHolder控制項的findcontrol找到新增/編輯/刪除等button後,再分別disable該button。例:
//namespace
[Flags]
public enum Privilege
{
None=0,
View=1,
Add=2,
Edit=4,
Remove=8,
All = None|View|Add|Edit|Remove
}
//xxx.master.cs
protected override void OnPreRender(EventArgs e)
{
try
{
Button btnAdd = (Button)ContentPlaceHolder1.FindControl("btnAdd");
Button btnEdit = (Button)ContentPlaceHolder1.FindControl("btnEdit");
Button btnDel = (Button)ContentPlaceHolder1.FindControl("btnDel");
if (Authority == (int)Privilege.View)
{
btnAdd.Disable = false;
btnEdit.Disable = false;
btnDel.Disable = false;
}
else if (Authority == (int)(Privilege.View | Privilege.Add))
{
btnEdit.Disable = false;
btnDel.Disable = false;
}
...以此類推
}
catch (Exception ex)
{
throw ex;
}
base.OnPreRender(e);
}
參考資料:
訂閱:
文章 (Atom)