發表文章

目前顯示的是 3月, 2021的文章

.NET Core第7天_MVC專案跟空專案創建出來比較_跟.net MVC專案做小比較

圖片
  這是.net core  空專案創建出來預設項目 .NET Core MVC專案創建方式 可以看到預設直接選擇MVC類型專案會幫我們自動建立出Model,Controller,View的folder 當中的HomeController.cs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 using AppNetCore5MVC.Models ; using Microsoft.AspNetCore.Mvc ; using Microsoft.Extensions.Logging ; using System ; using System.Collections.Generic ; using System.Diagnostics ; using System.Linq ; using System.Threading.Tasks ; namespace AppNetCore5MVC.Controllers { public class HomeController : Controller { private readonly ILogger<HomeController> _logger; public HomeController (ILogger<HomeController> logger) { _logger = logger; } public IActionResult Index () { return View (); } public IActionResult Privacy () { return View (); } [ResponseCache(Duration = 0, Location = ResponseC...

T-SQL筆記14_sp_helpdb指令的使用_MSSQL:Could not allocate space for object 'X' in database 'Your Database' because the 'PRIMARY' filegroup is full

圖片
 通常出現這錯誤就代表你的DB空間已經滿了 這時無論你怎麼insert都會失敗然後跑出這錯誤 對DB右鍵->屬性->切至檔案後到自動成長/大小上限的[...]按鈕開啟訊息窗 一種方式就是去調整你的DB預設上限 或者調成無限制(以北風資料庫預設設定為例) 你也可以透過系統指令sp_helpdb來查看當前DB狀況 可以看到filegroup 為 primary的size已經達到maxsize就代表空間已滿了 Ref: ERROR: "Could not allocate space for object 'X' in database 'Your Database' because the 'PRIMARY' filegroup is full" https://support.managed.com/kb/a132/error-could-not-allocate-space-object-x-database-your-database-because-primary-filegroup-is-full.aspx [問題]~利用jdbc insert資料DB 卻一直無法insert.... https://social.msdn.microsoft.com/Forums/zh-TW/41cf172d-49d3-45ce-8468-59a9a46bf53b/21839389882103329992jdbc-insert3603926009db?forum=240 Could not allocate space for object dbo.table https://stackoverflow.com/questions/19114680/could-not-allocate-space-for-object-dbo-table HOW TO FIX ERROR "COULD NOT ALLOCATE SPACE FOR OBJECT 'X' IN DATABASE"? https://manage.accuwebhosting.com/knowledgebase/2324/How-to-Fix-Error-Could-not-allocate-spa...

T-SQL筆記13_較通用且完善的trim solution_replace跟rtrim,ltrim

圖片
  SQL 資料欄位裡面空白字元trim掉處理 trim (SQL2017後才支援)  早期版用Ltrim跟Rtrim(比較通用) 因此若有要做trim仍然是以可以上下支援的語法版本比較保險 那怕哪天突然說從SQL Server2017 又退回去用2005 , 2000之類的 設想一下一個登入比對邏輯 有個天兵的在註冊時輸入account id 用email而且給我多1到2個空白甚至是TAB在尾巴... (可能從excel或outlook直接複製mail來貼輸入) 註冊時 他輸入的account id:'abc@hotmail.com   ' 結果要登入時 給我輸入account id:'abc@hotmail.com' 這時若直接把已經在DB裡面的欄位值原封不動就拿來比對 頭就痛了~~~ T-SQL 1 2 3 select * from User where LTRIM(RTRIM( REPLACE ( REPLACE ( REPLACE ( REPLACE ( REPLACE ( REPLACE ( REPLACE (account_id, CHAR ( 0 ), CHAR ( 32 )), CHAR ( 9 ), CHAR ( 32 )) , CHAR ( 10 ), CHAR ( 32 )), CHAR ( 11 ), CHAR ( 32 )), CHAR ( 12 ), CHAR ( 32 )), CHAR ( 13 ), CHAR ( 32 )), CHAR ( 14 ), CHAR ( 32 )))) =@ account_id and mb_pwd =@ password 光只仰賴內建的trim (ltrim , rtrim)仍會有未知疑似空白的字元 trim不乾淨的狀況 而在測試跟爬文時發現 SQL內建的trim函數只辨別的了ascii:32的一般空白字元 因此在做LTRIM跟RTRIM之前網路上建議是還要再多做一些取代成32的動作 Ref: LTRIM RTRIM doesn’t always work https://www.codeproject.com/Tips/330787/LTRIM-RTRIM-doesn-t-always-work

WebForms UnobtrusiveValidationMode 需要 'jquery' 的 ScriptResourceMapping

圖片
  當我們在webform專案裡面遇到有要做欄位必填 正規表示格式確認(email,純數字)又或者密碼跟再次驗證等等 通常會透過.net 內建的 RequiredFieldValidator RegularExpressionValidator CompareValidator 等驗證控件 而預設若直接使用可能會報這錯誤 WebForms UnobtrusiveValidationMode 需要 'jquery' 的 ScriptResourceMapping WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for jquery 此時最快解法就是 在Page_Load事件中加上 解法1. UnobtrusiveValidationMode = UnobtrusiveValidationMode.None; 解法2. 在web.config 中加入 <appSettings>     <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" /> </appSettings> 解法3. 自.net 4.5之後驗證相關機制仰賴於jQUery 中 javascript的一些引用參考 所以也可以去nuget補安裝AspNet.ScriptManager.jQuery Ref: Using CompareValidator To Check Password In ASP.NET https://www.dotnetheaven.com/article/using-comparevalidator-to-check-password-in-asp.net [ASP.NET] 驗證控制項 / Validation Control https://dotblogs.com.tw/yc421206/2009/04/24/8155 Validate Email Address using Regular Expression Validator in ASP.Net https://www.aspsnippets.com/Art...

ASP.NET下拉選單DropDownList套用jQuery複合選取時的經驗談(改採ListBox較適合)

圖片
  Multiple Select is a jQuery plugin to select multiple elements with checkboxes 雖然DropDownList預設Render到HTML對應產生SELECT的HTML TAG 但是Code-Behind中要透過SelectedValue取得只能取得到第一個選到的唯一值 https://docs.microsoft.com/zh-tw/dotnet/api/system.web.ui.webcontrols.dropdownlist?view=netframework-4.8#properties 原因在於Multiple Select這項jQUery plugin背後實作只是將select 的 display設置為none 然後自行在render出來上下兩組div做特殊處裡 因此這裡必須捨棄掉dropdownlist的控件相關屬性、方法處理 首先 先有辦法監聽到每次check/unckeck項目的值 jQuery MultipleSelect code範本 See the Pen jQuery Multiple Select by Jacob ( @dryjoker ) on CodePen . 這裡要注意使用的MultipleSelect版本有差異!!! 像是這裡我用官網cdn使用 它裡面選中是定義成selected 而我這裡專案的定義則是 checked!!!! 建議都先console印出來裏面的屬性有哪些 .aspx 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 $( '#<%=ddl_multi.ClientID%>' ).multipleSelect({ placeholder: "法人單位(可複選)" , width: '99%' , selectAll: false , multiple: true , multipleWidth: 1...

經得起原始碼資安弱點掃描的程式設計習慣培養(三)_7.Cross Site Scripting(XSS)_Stored XSS_Reflected XSS All Clients

圖片
  近期新加入的功能code剛好也被CheckMarx掃出高風險部分的程式碼漏洞 我也踏到這個Issue啦 Cross Site Scripting(XSS)  第一種.Stored XSS 高風險 CheckMarx掃碼報告給的說明[Stored XSS] ============================================================ 風險: 攻擊者可以利用合法存取應用程式提交資料到資料庫。 當另一個使用者隨後存取該資料,網頁可能會被改寫且惡意腳本可能會被啟動。 發生原因: 從資料庫中的資料建立網頁。資料直接嵌入至HTML的頁面,利用瀏覽器顯示。 資料可能源自於其他使用者的輸入。 如果資料包含HTML片段或Javascript,使用者無法分辨是否為預期的頁面。 該漏洞主因為未先對嵌入資料庫中的資料進行編碼(Encode) 來預防瀏覽器將其當為HTML的格式而非純文字。 如何避免: 1.驗證所有資料,無論其來源為何。驗證應基於白名單:僅接受預定結構的資訊,而不是拒絕不良的樣式(Patterns)。  應確認:  ● 資料型態  ● 大小  ● 範圍  ● 格式  ● 期望值  2. 驗證無法取代編碼. 輸出嵌入之前,不論其來源, 將所有動態資料進行編碼. 編碼方式應該是上下文相關的. 例如: ● HTML內容使用HTML的編碼方式  ● HTML編碼特性是將資料輸出到特性的值 ● JavaScript的編碼方式為伺服器產生的Javascript  3.考慮使用ESAPI的編碼庫,或它的內置功能。對於舊版的ASP.NET,請考慮使用AntiXSS.  4.在HTTP類型對應的表頭, 明確定義整個頁面的字元編碼.  5. 設置 httpOnly 標誌於會期資訊,以防止利用XSS來竊取資訊. ============================================================ 這裡報告描述是指我對傳進來字串參數直接拋給DAL處裡的類別執行查詢 這裡缺乏對輸入進來的字串參數做一些查檢判斷 也建議在帶入時對參數也做一些html encode處理 這裡用AntiXSS來Enc...

ASP.NET產生圖形驗證碼的泛型處理常式設計_CAPTCHA

圖片
前台 1 2 3 4 5 6 <script type= "text/javascript" > function reloadcode () { document.getElementById( "Image1" ).src = "~/handler/CaptchaCreator/CaptchaHandler.ashx" ; return false ; } </script> .ashx.cs程式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 <% @ WebHandler Language= "C#" Class= "CaptchaHandler" %> using System ; using System.Web ; using System.Web.SessionState ; using System.Collections.Generic ; using System.Drawing ; using System.Drawing.Imaging ; u...

[.NET Webform]_ListView_ul li項目清單列表綁定

圖片
  之前介紹過一篇是針對table的資料樣式綁定 https://coolmandiary.blogspot.com/2020/09/net-webformlistviewdatapager.html 而這次要來透過ListVIew綁定的對應html tag則是 ul li的項目清單列表 aspx 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 <%@ Page Language= "C#" AutoEventWireup= "true" CodeFile= "Sample1_ul_li.aspx.cs" Inherits= "Sample1_ul_li" %> <!DOCTYPE html> <html xmlns= "http://www.w3.org/1999/xhtml" > <head runat= "server" > <meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" /> <title></title> </head> <body> <form id= "form1" runat= "server" > <div> <asp:ListView ID= "lsv_consortable" runat= "server" > <LayoutTemplate> <ul id= "consort...

如何監控整頁網頁表單在會發出任一ajax請求時顯示loading等待的gif

圖片
  一開始就添加個stytle樣式吧 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 < style > .modal { display : none ; position : fixed ; z-index : 1000 ; top : 0 ; left : 0 ; height : 100 %; width : 100 %; background : rgba( 255 , 255 , 255 , . 8 ) url('https://media.giphy.com/media/sSgvbe1m3n93G/giphy.gif') 50 % 50 % no-repeat ; } /* When the body has the loading class, we turn the scrollbar off with overflow:hidden */ body .loading { overflow : hidden ; } /* Anytime the body has the loading class, our modal element will be visible */ body .loading .modal { display : block ; } </ style > 在body tag裡面寫段jQuery處理邏輯 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <body> <div class= "panel admin-panel" > <div class= "panel-head" ><strong>...