perlのサニタイジング
Re: perlのサニタイジング
こんにちは、トントンです。
珍回答をしてしまいました。
サニタイジング == 入力データの無害化
ですね。
少し古い記事ですが
下記サイトは参考になりませんか?
第1章 セキュアWebプログラミング
http://www.ipa.go.jp/security/awareness ... 1/a01.html
第4章 セキュアPerlプログラミング
http://www.ipa.go.jp/security/awareness ... 1/a04.html
すいません、トントン さんが書きました:こんばんは、トントンです。
「eval」で、できませんか?
珍回答をしてしまいました。
サニタイジング == 入力データの無害化
ですね。
少し古い記事ですが
下記サイトは参考になりませんか?
第1章 セキュアWebプログラミング
http://www.ipa.go.jp/security/awareness ... 1/a01.html
第4章 セキュアPerlプログラミング
http://www.ipa.go.jp/security/awareness ... 1/a04.html
Re: perlのサニタイジング
とんとんさん有り難うございます。
参考にさせて頂きました。早速質問ですが、IPAのURLサニタイジング関数についてですがperlフォームやperlショッピングカートにも適用
出来るのですよね? 以下を2行目以降に追加すれば良いのでしょうか?
-----------------------
リスト3 URLサニタイジング関数 IPA
1 $url = &ez_url_sanitize($url); # $urlをサニタイズ
2
3 sub ez_url_sanitize {
4 my $url = $_[0];
5
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
13
14 return '' if($url =~ m|[^;/?:@&=+\$,A-Za-z0-9\-_.!~*'()%]|);
15
16 ### もし未知のスキームなら空文字列を返す ###
17 # --- http://www.ietf.org/rfc/rfc2396.txt ---
18 # scheme = alpha *( alpha | digit | "+" | "-" | "." )
19
20 if($url =~ /^([A-Za-z][A-Za-z0-9+\-.]*):/) {
21 # $urlにはスキームがあるのでチェック
22 my $scheme = lc($1); # スキームを小文字に変換
23 my $allowed = 0;
24 $allowed = 1 if($scheme eq 'http');
25 $allowed = 1 if($scheme eq 'https');
26 $allowed = 1 if($scheme eq 'mailto');
27 return '' if(not $allowed);
28 }
29
30 ### HTMLエスケープ ###
31 # special = "&" | "<" | ">" | '"' | "'"
32 # URL許可文字だけなので"<",">",'"'は$url中に存在しない
33
34 $url =~ s/&/&/g; # & → &
35 $url =~ s/'/'/g; # ' → '
36
37 return $url;
38 }
-----------------------
参考にさせて頂きました。早速質問ですが、IPAのURLサニタイジング関数についてですがperlフォームやperlショッピングカートにも適用
出来るのですよね? 以下を2行目以降に追加すれば良いのでしょうか?
-----------------------
リスト3 URLサニタイジング関数 IPA
1 $url = &ez_url_sanitize($url); # $urlをサニタイズ
2
3 sub ez_url_sanitize {
4 my $url = $_[0];
5
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
13
14 return '' if($url =~ m|[^;/?:@&=+\$,A-Za-z0-9\-_.!~*'()%]|);
15
16 ### もし未知のスキームなら空文字列を返す ###
17 # --- http://www.ietf.org/rfc/rfc2396.txt ---
18 # scheme = alpha *( alpha | digit | "+" | "-" | "." )
19
20 if($url =~ /^([A-Za-z][A-Za-z0-9+\-.]*):/) {
21 # $urlにはスキームがあるのでチェック
22 my $scheme = lc($1); # スキームを小文字に変換
23 my $allowed = 0;
24 $allowed = 1 if($scheme eq 'http');
25 $allowed = 1 if($scheme eq 'https');
26 $allowed = 1 if($scheme eq 'mailto');
27 return '' if(not $allowed);
28 }
29
30 ### HTMLエスケープ ###
31 # special = "&" | "<" | ">" | '"' | "'"
32 # URL許可文字だけなので"<",">",'"'は$url中に存在しない
33
34 $url =~ s/&/&/g; # & → &
35 $url =~ s/'/'/g; # ' → '
36
37 return $url;
38 }
-----------------------
Re: perlのサニタイジング
こんばんは、トントンです。
に書かれている処理は文字列に「URL」で許可された(指定した)文字以外が
含まれていた場合、「空白文字」を返す処理です。※後スキームがhttp,https,mailto以外の時も
ケン2さんが上記と同じ動作を期待するのであれば
適用しても良いのではないでしょうか。
>以下を2行目以降に追加すれば良いのでしょうか?
サニタイジングのタイミングということでしょうか?
絶対ここだというタイミングはわかりませんが、
IPAでは、「サニタイジングのタイミングはHTML生成時」
と書かれていますね。
「リスト3 URLサニタイジング関数 IPA」ケン2 さんが書きました:早速質問ですが、IPAのURLサニタイジング関数についてですがperlフォームやperlショッピングカートにも適用
出来るのですよね? 以下を2行目以降に追加すれば良いのでしょうか?
に書かれている処理は文字列に「URL」で許可された(指定した)文字以外が
含まれていた場合、「空白文字」を返す処理です。※後スキームがhttp,https,mailto以外の時も
ケン2さんが上記と同じ動作を期待するのであれば
適用しても良いのではないでしょうか。
>以下を2行目以降に追加すれば良いのでしょうか?
サニタイジングのタイミングということでしょうか?
絶対ここだというタイミングはわかりませんが、
IPAでは、「サニタイジングのタイミングはHTML生成時」
と書かれていますね。
Re: perlのサニタイジング
サニタイズ,という言い方だと意味がいろいろ出てくるのですが……。
ref)
ref)
- 高木浩光@自宅の日記 - プログラミング解説書籍の脆弱性をどうするか, 「サニタイズ言うなキャンペーン」とは何か, ASPとかJSPとかPHPとかERBとか、逆だ..
- 高木浩光@自宅の日記 - 「逆」にしたERBが登場, 要約版:「サニタイズ言うなキャンペーン」とは, 既にここまで来ている――サニタイズ症候群の末期的惨..
- 高木浩光@自宅の日記 - 続・「サニタイズ言うなキャンペーン」とは
- 入力値検証であれば,最初に行う (入力値誤りは,そもそもその後の処理を続けられないから) か,要件上必要になったタイミングで行う (複雑な検証は,別の外部情報や演算結果とつきあわせる必要があることがあるため)
- 出力におけるインジェクション系に対する防御であるならば,各出力のタイミングにおいて必要な処理を行う (出力先によって必要な処理は異なる)
- 入力としてvalidなURIを要求しているフィールドに対する検証は,最初に行う
- 入力されたURIを出力する時に,HTML相手であればHTML用にエスケープを行い出力する
Re: perlのサニタイジング
こんばんは、トントンです。
「サニタイズ言うなキャンペーン」の記事を読みました。
また、調べてみたら色々解釈している人もいました。
確かに、「意味が色々」ありますね。
勉強になりました。
>サニタイズ,という言い方だと意味がいろいろ出てくるのですが……。YuO さんが書きました:サニタイズ,という言い方だと意味がいろいろ出てくるのですが……。
ref)
「サニタイズ言うなキャンペーン」の記事を読みました。
また、調べてみたら色々解釈している人もいました。
確かに、「意味が色々」ありますね。
勉強になりました。