VS開發程式用戶防範安全問題

来源:https://www.cnblogs.com/YangJianhui/archive/2018/06/09/9160488.html
-Advertisement-
Play Games

一個開發的系統程式從需求、設計到打包、用戶使用的過程中,安全問題一直是開發者關註的焦點。對於用戶來說,不考慮加密工具(如加密精靈等),面對的是一個系統的各個組件集合及各類的配置文件( 如App.Config / Web.Config)。其中,涉及到安全防範問題如App.Config配置文件,裡面會包 ...


  一個開發的系統程式從需求、設計到打包、用戶使用的過程中,安全問題一直是開發者關註的焦點。對於用戶來說,不考慮加密工具(如加密精靈等),面對的是一個系統的各個組件集合及各類的配置文件( 如App.Config / Web.Config)。其中,涉及到安全防範問題如App.Config配置文件,裡面會包含很多信息,包括最不想讓用戶知道的伺服器地址、登錄名和密碼等,特殊的文件除外。本篇文章會展開兩種方式來處理安全問題。

  (1)如果只是簡單的防使用人員的話,那麼你可以考慮在appsetting或其他的配置節中放加密後的連接字元串,然後在使用的地方先解密再使用,這裡我介紹下DES加解密的方式(密匙為8位位元組)。

 1 /// <summary> 
 2         /// DES加密,密鑰為8位字元 
 3         /// </summary> 
 4         /// <param name="strEncrypt">需要加密的字元串</param> 
 5         /// <param name="strKey">8位的密鑰</param> 
 6         /// <returns></returns> 
 7         public static string DesEncrypt(string strEncrypt, string strKey) 
 8         { 
 9             if (string.IsNullOrEmpty(strEncrypt)) return null; 
10             try 
11             { 
12                 DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 
13                 byte[] inputByteArray = Encoding.Default.GetBytes(strEncrypt); 
14                 des.Key = ASCIIEncoding.ASCII.GetBytes(strKey); 
15                 des.IV = ASCIIEncoding.ASCII.GetBytes(strKey); 
16                 MemoryStream ms = new MemoryStream(); 
17                 CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); 
18                 cs.Write(inputByteArray, 0, inputByteArray.Length); 
19                 cs.FlushFinalBlock(); 
20                 StringBuilder ret = new StringBuilder(); 
21                 foreach (byte b in ms.ToArray()) 
22                 { 
23                     ret.AppendFormat("{0:X2}", b); 
24                 } 
25                 ret.ToString(); 
26                 return ret.ToString(); 
27             } 
28             catch 
29             { 
30                 return null; 
31             } 
32         } 
DES加密,密鑰為8位字元
 1 /// <summary> 
 2         /// DES解密,密鑰為8為字元 
 3         /// </summary> 
 4         /// <param name="strDecrypt">需要加密的字元串</param> 
 5         /// <param name="strKey">8位的密鑰</param> 
 6         /// <returns></returns> 
 7         public string DesDecrypt(string strDecrypt, string strKey) 
 8         { 
 9             if (string.IsNullOrEmpty(strDecrypt)) return null; 
10             try 
11             { 
12                 DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 
13                 byte[] inputByteArray = new byte[strDecrypt.Length / 2]; 
14                 for (int x = 0; x < strDecrypt.Length / 2; x++) 
15                 { 
16                     int i = (Convert.ToInt32(strDecrypt.Substring(x * 2, 2), 16)); 
17                     inputByteArray[x] = (byte)i; 
18                 } 
19                 des.Key = ASCIIEncoding.ASCII.GetBytes(strKey); 
20                 des.IV = ASCIIEncoding.ASCII.GetBytes(strKey); 
21                 MemoryStream ms = new MemoryStream(); 
22                 CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write); 
23                 cs.Write(inputByteArray, 0, inputByteArray.Length); 
24                 cs.FlushFinalBlock(); 
25                 return System.Text.Encoding.Default.GetString(ms.ToArray()); 
26             } 
27             catch 
28             { 
29                 return null; 
30             } 
31         } 
DES解密,密鑰為8為字元

關於DES加解密的密匙的獲取,一般是內部人員掌控,可訪問伺服器獲取,安全上更有保障。

那麼有了上面加密後的一堆數據,如何更改對應配置文件中的某個配置節上的數據,微軟提供System.Configuration.dll組件來操作App.Config配置文件等數據將其處理,如:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["配置節"].Value = strDesEncrypt;//DES加密後的數據
config.Save();

 缺點:安全性低,局限於非電腦操作者,對於一個業務繁瑣的系統不切實際。

   提供參考網站:https://wenda.so.com/q/1370928295068825

  (2) 預設情況下,我們需要對App.config文件里的connectionStrings或其他配置節片斷進行加密處理,ASP.NET IIS 註冊工具 (Aspnet_regiis.exe)可以勝任這個工作,但這個工具只能針對ASP.NET的Web.config文件,難道我們就沒有辦法了嗎?答案當然是否定的。

  配置選項:

-pdf section webApplicationDirectory 對指定物理(非虛擬)目錄中的 Web.config 文件的指定配置節進行解密。 -pef section webApplicationDirectory 對指定物理(非虛擬)目錄中的 Web.config 文件的指定配置節進行加密。 -pdf 和-pef 參數是對指定的物理目錄里的Web.config文件進行加密,我們可以先將App.config文件改名為Web.config,通過這兩個參數便可以“騙”過系統,讓它將指定的配置節  進行加密,我們只需要將加密後的文件名改回App.config即可,我們來實驗一下:  第一步:先將目錄下的App.config改名為Web.config。  第二步:打開SDK命令提示,輸入命令:aspnet_regiis -pef "配置節" "目錄",以我的項目為例,加密前的config文件內容如下:   
1<?xml version="1.0" encoding="utf-8"?>
 2<configuration>
 3  <configSections>
 4    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
 5  </configSections>
 6  <dataConfiguration defaultDatabase="Connection String" />
 7  <connectionStrings>
 8    <add name="Connection String" connectionString="Database=LocomotiveStat;Server=10.167.61.49;User ID=sa;Password=sa;"
 9      providerName="System.Data.SqlClient" />
10  </connectionStrings>
11</configuration>

輸入命令:aspnet_regiis -pef "你要加密的【配置節】" "你要加密的【目錄】",加密後的config文件內容如下:

1<?xml version="1.0" encoding="utf-8"?>
 2<configuration>
 3  <configSections>
 4    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
 5  </configSections>
 6  <dataConfiguration defaultDatabase="Connection String" />
 7  <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
 8    <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
 9      xmlns="http://www.w3.org/2001/04/xmlenc#">
10      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
11      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
12        <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
13          <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
14          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
15            <KeyName>Rsa Key</KeyName>
16          </KeyInfo>
17          <CipherData>
18            
<CipherValue>g2QFQqbHU1L6WUPYqjADqFAvHcdq/7dqCd1U9GlQFEi/nHDVHjqsWvjNywOZtQQg7Q/yW7g8xlRCo0h2+yYd/tQTNoVMu/RKdJmSjZMnmnwpWq+S2VEWK4U106JQwLCfBR/bAF4DHvG47B9KB0JbRfXBt5V2wJVaAI9u3kzuj50=</CipherValue>
19          </CipherData>
20        </EncryptedKey>
21      </KeyInfo>
22      <CipherData>
23        
<CipherValue>blwV/ZW1izFZL80YL5RkcjrIjWkQ0L1gJhgZbxEzzTgOcT24ihrAnv3/rDCG+WIZ7TL5D/rMm7dQwkIsij1Sh3befg6F3+pxcW4oe1w/bovIKuzjs3tokUpBvTTj+fsCs2W/MWUhQaWMKQWkHfS2Ajt6gL6MTYtb3pfQUp0pdHbeRxoqdiAksQ1Zzsi1FtRTi7gTT7hnpF0pJs+W9mxTVDMO/qSZXfXLOEMIs/A5ExcfvR5GjpaPuDeLuSsCN3XtjaiXzaDQ3It7j+r66+L2C0xvEhbT9SsG</CipherValue>
24      </CipherData>
25    </EncryptedData>
26  </connectionStrings>
27</configuration>

  自己也隨便找了個配置文件式下了,成功了。

 

 

由此可見,我們已經完成了任務,現在只需要將App.config文件名改回Web.config即可,在應用程式項目中無需對該文件進行解密操作,.NET框架會自動替我們完成,如果想解密該文件也很簡單,在SDK命令提示里輸入aspnet_regiis -pdf "配置節" "目錄"即可。

  參考網址如:https://blog.csdn.net/dqs78833488/article/details/51115537

  希望本篇文章對大家有一定的幫助,以上有不足之處,或有其他更合理的方法請留言賜教。

  A young ilder ~ An old baggar !


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 不同平臺框架項目使用同一套代碼,一次編譯生成多個框架類庫 [TOC] 需要先瞭解的東西 "msbuild" .net framework遷移至.net core,或者合併,單個項目編譯不同的框架 —— "官方文檔" 分析 使用 ".NET 可移植性分析器工具" 分析項目依賴 .NET 可移植性分析器 ...
  • A practical tutorial showing how to use JSON Web Tokens in ASP.NET Core 2 applications. Heads up! This article refers to version 2.0 of the ASP.NET Co... ...
  • HTTPS為SSL安全通道,雖然並不清楚具體有什麼用,但至少網站看上去比HTTP上檔次,訪問速度也沒什麼影響,所以有條件的話,還是做下,可以做噱頭忽悠人。 WIN2008系統 因為埠443衝突,只能部署一個站點,切記;WIN2012不限制。 SSL證書有免費的,有收費的,五花八門,免費的有些不受G ...
  • using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 //List 的聲明與使... ...
  • ...
  • using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApp1 //函數的遞歸調用 { //F(n)= F(n-1)+F(n-2)... F(1)=... ...
  • 概述 博主自畢業後,進公司就一直是以ASP.NET MVC 5.0 + MySQL 進行項目開發,在項目也使用了很多常用功能,如 WCF、SignalR、微信公眾號API、支付寶API、Dapper等等,前端是大雜燴,如:Bootstrap、AmazeUI、EasyUI、Light7、WeUI等等。 ...
  • 本文所需的一些預備知識可以看這裡: http://www.cnblogs.com/cgzl/p/9010978.html 和 http://www.cnblogs.com/cgzl/p/9019314.html 建立Richardson成熟度2級的POST、GET、PUT、PATCH、DELETE的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...