質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

534閲覧

C# ローカルソフトで正規表現による文字列置換をユーザーに与える場合のセキュリティーについて

gucha

総合スコア55

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

2クリップ

投稿2017/07/19 06:50

Visual BasicでWPFのローカルのみのファイル整理用ソフトを作ったのですが、他者に渡したり公開する場合にセキュリティ対策をどうすれば良いのか分からないので質問させてもらいます。

ローカルのファイル名を置換する際に正規表現でもユーザー側から制御できるようになっています。
このようになっています。


-xaml
<TextBox x:Name="textBox1"/>
<TextBox x:Name="textBox2"/>

-xaml.cs
string str1 = textBox1.Text;
string str1 = textBox2.Text;
Regex.Replace(ローカルファイル名, str1, str2);


個人用に使うと考えていたのでバリデーションなどインジェクション対策は何もしていません。
ローカル専用ソフトであっても対策をした方が良いのでしょうか?
ユーザー側での正規表現操作は実装したいので、対策が必要な場合は具体的にどのような対策を行えば良いですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ockeghem

2017/07/19 23:59

string str1 = が2つありますが、下の方は、string str2 = の間違いでしょうか? これは元のソースもそうなっていますか? ソースは手打ちせず、オリジナルからコピーしたほうがよいと思います。
gucha

2017/07/20 04:20

訂正ありがとうございます。以後気をつけます。
guest

回答1

0

ベストアンサー

正規表現を用いた攻撃(正規表現インジェクション等)が知られているので、ユーザーに正規表現(の一部)を入力させるのは基本的にはやめた方がいいと思います。

IDS08-J. 信頼できないデータは regex に渡す前に無害化する

上記の記事では無害化とありますが、正規表現のバリデーションは難しいので避けたほうが無難です。正規表現インジェクションの例としては、PHPですが下記の記事が参考になります。

phpMyAdmin3.5.8以前に任意のスクリプト実行を許す脆弱性(CVE-2013-3238)

ただし、ご質問のケースはローカルということであり、元々ユーザが自分の権限で任意のWindowsコマンドが実行できるという想定であれば、正規表現を操作してできることはユーザーの権限を超えないので、「ユーザーに正規表現を入力させても差し支えない」と判断することはありえると思います。

差し支えないと判断した場合でも、ユーザーが間違った正規表現を入力したために予期しない動作をするのは好ましくないため、できるだけ使える正規表現を限定したほうが望ましいかと思いますが、それは自由度を下げることにもなりますので、バランスを考慮して判断するしかありません。

投稿2017/07/20 00:29

ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gucha

2017/07/20 04:26

回答ありがとうございます。 やはりバランスで判断することになるのですね。 正規表現を理解できるユーザーがローカル環境で意図的な悪用をしてもそれは自己責任という判断で今のところ実装するつもりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問