このスレッドは未解決です(解決したらこちらで解決済にしてください)
<<戻る

perlのサニタイジング このメッセージに返信する
日時: 2011/08/22 15:10
名前: サニ
URL:
perlのサニタイジング記述を教えて下さい。
記事編集 編集

Page: | 1 | 2 | 3 | 4 | 5 | 6 |

Re: perlのサニタイジング このメッセージに返信する
日時: 2011/08/28 22:23
名前: 新高校生
URL:
>これで完璧に安全だと言えるレベルまでセキュアに記述したいんです。
>【タグ属性】に加え【URL属性】もエスケープすればどうかなと思ったのですが、どうでしょう。

私は素人ですから、頑張ってくださいとしか言えないです。
「完璧に安全」だとか言われるともう怖くて(w
(完璧だといったい誰が言えるのか・・・とか変な突っ込み入れたくなります)

>6 ### もしURLで許可されていない文字があるなら空文字列を返す ###
>7 # --- http://www.ietf.org/rfc/rfc2396.txt ---
>8 # uric = reserved | unreserved | escaped
>9 # reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
>10 # unreserved = alphanum | mark
>11 # mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
>12 # escaped = "%" hex hex

許可されてない文字を探すというよりは、たぶんですが、Perlだと
「許可された文字によるURLの一般形」を正規表現で表現して
マッチングをかけて判定するような感じになると思います。
掲示板の自動リンクの判定とかはそんな感じだと思いました。
だだどうコードにするかは個性のもんだいかも。
記事編集 編集
Re: perlのサニタイジング このメッセージに返信する
日時: 2011/08/28 22:39
名前: サニ
URL:
新高校生さん

>私は素人ですから、頑張ってくださいとしか言えないです。
>「完璧に安全」だとか言われるともう怖くて(w
>(完璧だといったい誰が言えるのか・・・とか変な突っ込み入れたくなります)

すみません、軽く安全な感じに記述したいです(^_^)

>許可されてない文字を探すというよりは、たぶんですが、Perlだと
>「許可された文字によるURLの一般形」を正規表現で表現して
>マッチングをかけて判定するような感じになると思います。
>掲示板の自動リンクの判定とかはそんな感じだと思いました。
>だだどうコードにするかは個性のもんだいかも。

「許可された文字によるURLの一般形」を正規表現で表現しマッチングをかけて判定する
と言う事は、URLで使われない特殊文字のエスケープですよね?
すると以下の記述は掲示板用のエスケープなんですかね?

>6 ### もしURLで許可されていない文字があるなら空文字列を返す ###
>7 # --- http://www.ietf.org/rfc/rfc2396.txt ---
>8 # uric = reserved | unreserved | escaped
>9 # reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
>10 # unreserved = alphanum | mark
>11 # mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
>12 # escaped = "%" hex hex
記事編集 編集
Re: perlのサニタイジング このメッセージに返信する
日時: 2011/08/28 22:59
名前: 新高校生
URL:
>「許可された文字によるURLの一般形」を正規表現で表現しマッチングをかけて判定する
>と言う事は、URLで使われない特殊文字のエスケープですよね?

「もしURLで許可されていない文字があるなら空文字列を返す」と書いてあるので
その"判定"に正規表現を使うという意味です。


>すると以下の記述は掲示板用のエスケープなんですかね?

さあ、私が書き込んだわけじゃないですから・・・ご自分で知ってないと。
記事編集 編集
Re: perlのサニタイジング このメッセージに返信する
日時: 2011/08/29 01:15
名前: ペングイン
URL: http://blog.trippyboy.com
サニさん

この件に関しては、ここまでとさせていただきます。

以下ご参考までに。
あとは、Perlの勉強をしましょう。

#---------------------------------------
# フォームデコード
#---------------------------------------

#
# 「$buf」という値を設定します。
#
# このCGIが起動した時の条件によって処理を分けています。
# 条件1)REQUEST_METHODが「POST」だったら
# 条件2)それ以外
#
# 条件1に合致した場合、以下の記述が有効になります。
# read(STDIN, $buf, $ENV{'CONTENT_LENGTH'})
#
# 上記は、このCGIに渡された値のうち
# 「リクエストヘッダに記載されている長さ分」
# を「$buf」に入れるという処理を行なっています。
#
# 条件2に合致した場合は、「QUERY_STRING」そのものを
# 「$buf」に入れる処理となります。
#

sub decode {
my $buf;
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
} else {
$buf = $ENV{'QUERY_STRING'};
}

# ここまでで、$bufの値が確定しています。
# POSTまたはGETのどちらを使うかが分かっているのならば
# この条件式は必要ありません。POSTでもGETでもどちらでも
# 渡されたデータを処理できるようにこのような記述をしたのでしょう。


# 「in」という名前のハッシュをundefしています。
# ハッシュとは。。。 undefとは。。。 インターネットでご検索を。

undef(%in);

# はじめに作成した「$buf」は以下のような構成になります。
# key=test1&key2=test2&key3=test3
#
# 渡される値は「=」と「&」で分けて処理します。
# まずは「&」で分割することで、HTMLで言うnameとvalueのセットに
# 分けます。
#
# key=test1&key2=test2&key3=test3
# ↓「&」を基準に分割
# key=test1 key2=test2 key3=test3
#
# この処理が以下の1行です。「&」を基準として分割(split)
# することで出来たものを「@buf」という配列に入れています。
# 配列とは? お調べください。
# 簡単に言うと、「$なになに」は1つの値ですが「@なになに」は
# いくつかの値が集まったグループです。このグループに収められた値を
# 引き出すには「$なになに[何番目]」と記述します。
# もし、上記の例3つが「@なになに」に収められたとしたら
#
# 「$なになに[0]」は「key=test1」になります。
#
my @buf = split(/&/, $buf);

# 上述のとおり、ここまでで「key=test1」のようなname=valueの
# 形になっていますので、次にこれを「=」でsplitします。
# 「@buf」にはいくつのname=valueのペアがあるかわからないので
# foreachで順番に全てのペアを処理させています。
#
# my ($key, $val) = split(/=/);
# が何をするのかは、今までの説明で理解出来るでしょう。

# $val =~ tr/+/ /;
# 渡されたあたいから「+」を消します。理由は以下のURLの記述をみてください。
# Googleで「hello world」を検索した際のURLです。
# http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=hello+world

# $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
# これは、「%+(数字×2)」の形式の文字(=16進数)があったら
# それを文字に変換します。詳細は以下URL
# http://www006.upp.so-net.ne.jp/kyo-sen/computer/perl/url.htm

# で、エスケープ処理をしたら最後は「$in{$key}」にvalueを入れています。
# つまり、「name=tarou」をうけとったら「$in{$name}」というあたいに
# 「tarou」が入っています。

foreach (@buf) {
my ($key, $val) = split(/=/);
$val =~ tr/+/ /;
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;

# シフトJISコード変換
&jcode::convert(\$val, 'sjis');

# エスケープ
$val =~ s/&/&/g;
$val =~ s/"/”/g;
$val =~ s/</</g;
$val =~ s/>/>/g;
># ■↓エスケープ 追加 合ってますでしょうか■
# エスケープしたい文字の指定がご希望にあっていればあっています。
        $val =~ s/\\/¥/g;
        $val =~ s/'/’/g;
        #$val =~ s/\\/¥/g; ## コメントアウト
># ■↓エスケープ 追加 合ってますでしょうか■
# 「$key」のエスケープは必要ありません。
   
# 改行はタブへ変換しておく
$val =~ s/\r\n/\t/g;
$val =~ s/\r/\t/g;
$val =~ s/\n/\t/g;

$in{$key} = $val;
}
}


># ■↓エスケープ色々 追加 合ってますでしょうか■

# 以下必要ありません
記事編集 編集

Page: | 1 | 2 | 3 | 4 | 5 | 6 |

件名※必須
名前※必須
URL
任意のパスワード (投稿後のコメント修正・削除時に使用)
画像認証※必須 投稿キー(画像で表示されている数字を入力)
コメント※必須

※質問を投稿後に自己解決された場合は、原因と行った対処を具体的に書き込み下さるよう、よろしくお願いします。

- WEB PATIO -