perlのサニタイジング

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ケン2

perlのサニタイジング

#1

投稿記事 by ケン2 » 7年前

perlのサニタイジング処理を教えて下さい。

トントン
記事: 100
登録日時: 8年前

Re: perlのサニタイジング

#2

投稿記事 by トントン » 7年前

こんばんは、トントンです。

「eval」で、できませんか?

トントン
記事: 100
登録日時: 8年前

Re: perlのサニタイジング

#3

投稿記事 by トントン » 7年前

こんにちは、トントンです。
トントン さんが書きました:こんばんは、トントンです。

「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

ケン2

Re: perlのサニタイジング

#4

投稿記事 by ケン2 » 7年前

とんとんさん有り難うございます。

参考にさせて頂きました。早速質問ですが、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 }
-----------------------

トントン
記事: 100
登録日時: 8年前

Re: perlのサニタイジング

#5

投稿記事 by トントン » 7年前

こんばんは、トントンです。
ケン2 さんが書きました:早速質問ですが、IPAのURLサニタイジング関数についてですがperlフォームやperlショッピングカートにも適用
出来るのですよね? 以下を2行目以降に追加すれば良いのでしょうか?
「リスト3 URLサニタイジング関数 IPA」
に書かれている処理は文字列に「URL」で許可された(指定した)文字以外が
含まれていた場合、「空白文字」を返す処理です。※後スキームがhttp,https,mailto以外の時も
ケン2さんが上記と同じ動作を期待するのであれば
適用しても良いのではないでしょうか。

>以下を2行目以降に追加すれば良いのでしょうか?
サニタイジングのタイミングということでしょうか?
絶対ここだというタイミングはわかりませんが、
IPAでは、「サニタイジングのタイミングはHTML生成時」
と書かれていますね。

YuO
記事: 924
登録日時: 8年前
住所: 東京都世田谷区

Re: perlのサニタイジング

#6

投稿記事 by YuO » 7年前

サニタイズ,という言い方だと意味がいろいろ出てくるのですが……。
ref) やりたいことによって行うタイミングは異なりますが,大原則は以下の通り。
  • 入力値検証であれば,最初に行う (入力値誤りは,そもそもその後の処理を続けられないから) か,要件上必要になったタイミングで行う (複雑な検証は,別の外部情報や演算結果とつきあわせる必要があることがあるため)
  • 出力におけるインジェクション系に対する防御であるならば,各出力のタイミングにおいて必要な処理を行う (出力先によって必要な処理は異なる)
IPAのコードを見ると,29行目までは入力値検証,30行目からは出力用処理です。
  • 入力としてvalidなURIを要求しているフィールドに対する検証は,最初に行う
  • 入力されたURIを出力する時に,HTML相手であればHTML用にエスケープを行い出力する
といった流れでしょうか。両方を一度にやってしまうのは筋が悪いと感じます。

トントン
記事: 100
登録日時: 8年前

Re: perlのサニタイジング

#7

投稿記事 by トントン » 7年前

こんばんは、トントンです。
>サニタイズ,という言い方だと意味がいろいろ出てくるのですが……。
「サニタイズ言うなキャンペーン」の記事を読みました。
また、調べてみたら色々解釈している人もいました。
確かに、「意味が色々」ありますね。

勉強になりました。

閉鎖

“C言語何でも質問掲示板” へ戻る