C# と VB.NET の質問掲示板
ASP.NET、C++/CLI、Java 何でもどうぞ
掲示板トップ
C# と VB.NET 入門
新規作成
利用方法
ツリー表示
トピック表示
ランキング
記事検索
過去ログ
ログ内検索
キーワードを複数指定する場合は 半角スペース で区切ってください。
検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
[返信]をクリックすると返信ページへ移動します。
キーワード
/
検索条件
/
(AND)
(OR)
検索範囲
/
(現在のログ)
(全過去ログ)
(過去ログ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)
(過去ログ111)
(過去ログ112)
(過去ログ113)
(過去ログ114)
(過去ログ115)
(過去ログ116)
(過去ログ117)
(過去ログ118)
(過去ログ119)
(過去ログ120)
(過去ログ121)
(過去ログ122)
(過去ログ123)
(過去ログ124)
(過去ログ125)
(過去ログ126)
(過去ログ127)
(過去ログ128)
(過去ログ129)
(過去ログ130)
(過去ログ131)
(過去ログ132)
(過去ログ133)
(過去ログ134)
(過去ログ135)
(過去ログ136)
(過去ログ137)
(過去ログ138)
(過去ログ139)
(過去ログ140)
(過去ログ141)
(過去ログ142)
(過去ログ143)
(過去ログ144)
(過去ログ145)
(過去ログ146)
(過去ログ147)
(過去ログ148)
(過去ログ149)
(過去ログ150)
(過去ログ151)
(過去ログ152)
(過去ログ153)
(過去ログ154)
(過去ログ155)
(過去ログ156)
(過去ログ157)
(過去ログ158)
(過去ログ159)
(過去ログ160)
(過去ログ161)
(過去ログ162)
(過去ログ163)
(過去ログ164)
(過去ログ165)
(過去ログ166)
(過去ログ167)
(過去ログ168)
(過去ログ169)
(過去ログ170)
(過去ログ171)
(過去ログ172)
(過去ログ173)
(過去ログ174)
(過去ログ175)
(過去ログ176)
(過去ログ177)
(過去ログ178)
(過去ログ179)
強調表示
/
ON
(自動リンクOFF)
結果表示件数
/
20件
30件
40件
50件
100件
記事No検索
/
ON
大文字と小文字を区別する
No.98878 の関連記事表示
ヒット / 5件
(1-5 を表示)
<<
0
>>
■98878
ソースコードにパスワードを直書きする
□投稿者/ お肉 -
(2022/01/11(Tue) 10:28:59)
分類:[C#]
裏口からのc#実践入門という本を読んでいるのですが、その中でパスワードはソースコードに直書きするのではなく、Properties.Settings.Defaultを使うと書かれていました。
そこで2点疑問なのですが、
1.App.configとProperties.Settings.Defaultは何が違うのでしょうか?使い分けはどうしたらいいのでしょうか?
2.Properties.Settings.Defaultの中を見るとXMLで書かれていました。これはコンパイルしてもXMLファイルとして残って誰でも中身を見ることができてしまわないでしょうか?
親記事 /過去ログ172より /
関連記事表示
削除チェック/
■98880
Re[1]: ソースコードにパスワードを直書きする
□投稿者/ 魔界の仮面弁士 -
(2022/01/11(Tue) 11:20:10)
2022/01/11(Tue) 11:23:46 編集(投稿者)
■
No98878
(お肉 さん) に返信
> 1.App.configとProperties.Settings.Defaultは何が違うのでしょうか?使い分けはどうしたらいいのでしょうか?
app.config はファイルの名前ですね。これはアプリケーション構成ファイルとも呼ばれます。
コンパイルすると yourappname.exe.config ファイルとして展開され、既定のパスに配置されます。
http://surferonwww.info/BlogEngine/post/2019/09/01/where-are-configuration-files.aspx
(実行時に OpenMappedExeConfiguration メソッドを呼び出せば、他のファイルを
読み込ませるといったことも一応可能ですが、通常はそこまでする必要は無いでしょう)
一方、Properties.Settings.Default はファイルの名前ではありません。
(プロジェクト名.)Properties.Settings クラスの Default プロパティとは、
プロジェクトのプロパティの「設定」タブで記述した内容を簡潔に読み書きできるようにしたものです。
このプロパティは内部で、System.Configuration 名前空間のクラスを呼び出す実装になっています。
コード本体はプロジェクト内の
/Properties/Setting.settings …… XML ファイル
/Properties/Settings.Designer.cs …… C# ファイル
として自動生成されます。御自身の環境にもありませんか?
Properties.Settings.Default の場合、値を設定できるのはユーザースコープのものだけです。
アプリケーションスコープの設定は読み取り専用となります。
Properties.Settings.Default だけでは操作できない部分については、プログラムから
System.Configuration 名前空間のクラスを直接利用すること可能です。
> 2.Properties.Settings.Defaultの中を見るとXMLで書かれていました。
Settings.Designer.cs では既定設定が組み込まれており、実行時に構成ファイルが失われていた場合、
コンパイル時点の設定が既定値として取得されるようになっています。
構成ファイルの置き場は複数存在しますし、XML の記述内容にも一定のルールがあります。
構成ファイルを破損させてしまうと、起動できずにエラーとなることもあるのでご注意ください。
> これはコンパイルしてもXMLファイルとして残って誰でも中身を見ることができてしまわないでしょうか?
web.config の場合、構成ファイルはサーバー上にあるわけなので、利用者が読み取ることはできません。
app.config の場合、構成ファイルがローカル上にあるため、利用者が読もうと思えば読み取れてしまいます。
一応 app.config や web.config は、暗号化した状態で保存する機構も
備えてはいますが…分かっていれば解読もできるわけで。
https://techinfoofmicrosofttech.osscons.jp/index.php?%2A.config%E3%81%AE%E6%9A%97%E5%8F%B7%E5%8C%96
なので、たとえば SQL Server や Oracle などに接続する場合、パスワードで認証するのではなく、
Windows 認証を使ってアクセスするといった手段が用いられることもあります。
これなら、パスワードを埋め込む必要がなくなります。
記事No.98878 のレス /過去ログ172より /
関連記事表示
削除チェック/
■98883
Re[1]: ソースコードにパスワードを直書きする
□投稿者/ 魔界の仮面弁士 -
(2022/01/11(Tue) 12:04:48)
■
No98878
(お肉 さん) に返信
> 裏口からのc#実践入門という本を読んでいるのですが、
c# ではなく
C# という点はさておき。
> その中でパスワードは
パスワードの利用目的は何ですか?
その要件によって、とりうる手段は様々かと。
たとえば、自分しか使わない PC であるなら、.config 以前の問題として
その PC の内容に他者が侵入できてしまっている時点でセキュリティ欠陥なので
プログラムでどうこうする以前の問題だと考える事もできます。
<a> 他者が容易に読みだせない場所に保存する (web.config など)
<b> そもそも平文でパスワードを保持させないようにする (Windows 認証に切り替えるなど)
<c> 認証画面を起動して、毎回パスワードを入力させる仕組みにする(マイナンバーカード利用時のように)
<d> 気にせず .config に保持してしまう
他者に盗み見られることを恐れる場合は、少し手間ですが、
System.Security.Cryptography 名前空間のクラスを併用する手もあります。
(1) 自作システム内で、ユーザーが入力したユーザー名とパスワードを確認/検証するだけの場合
パスワードそのものを記録するのではなく、ハッシュとソルトを記録します。
レインボーテーブル攻撃に対処するため、ソルトは毎回異なる値を使います。(ソルトは平文で保存しても構いません)
この場合には Rfc2898DerivedBytes クラスを利用すると安全です。
ハッシュは不可逆変換となるため、記録された情報からパスワードを取り出すことができなくなります。
検証時には、ユーザーが入力した値を同じ手順でハッシュ化し、記録した内容と一致するかを確認します。
(2) 他システムと連携するなど、再利用のためにパスワード保存が必要な場合
Windows 2000 以降では、データ保護 API (DPAPI) を利用すると、データを安全に暗号化・復号化できます。
これは、OS が提供するデータ暗号化の仕組みですが、.NET Framework 2.0 以降からは
ProtectedData クラス、ProtectedMemory クラスを通じてアクセスできるようになっています。
(OS 再起動後も保持したい情報には ProtectedData、アプリ起動中のみ保持する情報には ProtectedMemory)
保存したデータは、現在のユーザーのみが読み取れるような場所(アクセス許可が設定されたレジストリやファイルなど)にて
保持してください。なお、取得したパスワードは、String 型として保持するのではなく、
SecureString クラスとして保持することが望ましいです。
記事No.98878 のレス /過去ログ172より /
関連記事表示
削除チェック/
■98885
Re[1]: ソースコードにパスワードを直書きする
□投稿者/ WebSurfer -
(2022/01/11(Tue) 12:38:57)
■
No98878
(お肉 さん) に返信
> 1.App.configとProperties.Settings.Defaultは何が違うのでしょうか?
前者は普通の xml ファイル、後者は自動生成された Setteings.Designer.cs ファイルに定義
される Settings クラスのプロパティとして厳密に型指定されている点、スコープをユーザー
にするとそれに set も設定されユーザーが変更できる点、設定ファイルの保存場所が違う点
でしょうか。
詳しいことは以下の記事を見てください。
Settings.settings の使い方
http://surferonwww.info/BlogEngine/post/2021/06/05/how-to-get-and-set-values-in-settings-file.aspx
構成ファイルの保存場所
http://surferonwww.info/BlogEngine/post/2019/09/01/where-are-configuration-files.aspx
> 使い分けはどうしたらいいのでしょうか?
Visual Studio のウィザードを使って型付 DataSet 等を作ると接続文字列は自動的に Settings.settings
ファイルに保存されます。そのばあいは、そのまま Settings.settings を使えばよいと思います。
自分で設定する場合でも、厳密に型指定されている Settings.settings の方が良さそうだと思います。
> 2.Properties.Settings.Defaultの中を見るとXMLで書かれていました。これはコンパイル
> してもXMLファイルとして残って誰でも中身を見ることができてしまわないでしょうか?
その通りで、上で紹介した「構成ファイルの保存場所」に xml ファイルとして保存されているので
ユーザーはメモ帳で開いて中身を読むことができます。
記事No.98878 のレス /過去ログ172より /
関連記事表示
削除チェック/
■98886
Re[1]: ソースコードにパスワードを直書きする
□投稿者/ WebSurfer -
(2022/01/11(Tue) 12:51:57)
■
No98878
(お肉 さん) に返信
そもそもの話ですが、
> 裏口からのc#実践入門という本を読んでいるのですが、その中でパスワードはソースコード
> に直書きするのではなく、Properties.Settings.Defaultを使うと書かれていました。
・・・はどういう意図なのでしょう?
開発環境と運用環境で異なる接続文字列のようなものはハードコーディングするのでなく、開発
時に設定ファイルに保存しておけば、運用の際差し替えが容易という話から来ているケースが
多いと思うのですが、それとは違う話ですか?(セキュリティとか暗号化の話ではなくて)
記事No.98878 のレス /過去ログ172より /
関連記事表示
削除チェック/
<<
0
>>
パスワード/
-
Child Tree
-