- ベストアンサー
inputタグに入力された数値を安全にするには?
- inputタグに入力された数値や数式を安全に処理する方法を教えてください。
- 悪意のあるコードを防ぐために、入力情報をチェックする仕組みを実装する必要があります。
- ウイルスなどの被害を防ぐためには、信頼できる入力情報のみを正しく処理する必要があります。
- みんなの回答 (34)
- 専門家の回答
質問者が選んだベストアンサー
>回答No.32 amanojaku1 訂正です、括弧に対応していませんでした。 正規表現は下記の方が適切です。 超簡易式の処理です、要点は(式として成立しているかではなく)コマンドが実行されないようになっているか?、が重要です。 (断定はできませんが)これならJavaScriptのマクロのような構文も実行できないと思われます。 JavaScriptのマクロのような構文については分かりませんので、別の質問にしてみたら どうでしょうか? 「四則演算子、数字、括弧」以外は削除されます。<br> また式として成立しない文字列は計算できません。<br> <input type="text" name="gakunen" value="" onKeyPress="Calculator(this.value, event.keyCode)"> <script type="text/javascript"> <!-- function Calculator(a, kcode){ var r; if (!(13==kcode)){return;} // ↑「13:Enterキー」でない場合は「return」 r = a; r = r.replace(/[ ]*([\-\/\*\+])[ \-\/\*\+]*/g, '$1'); r = r.replace(/^([ ]*[\/\*\+][ \-\/\*\+]*)/g, ''); r = r.replace(/([^0-9\.\-\/\*\+\(\) ]+)/g, ' '); r = r.replace(/([ ]+)/g, ' '); try{ alert(r+' = '+eval(r)); }catch(ex){ alert(ex.message+' : '+r); } } // --> </script>
その他の回答 (33)
- amanojaku1
- ベストアンサー率54% (265/488)
>回答No.32 amanojaku1 (断定はできませんが)これならJavaScriptのマクロのような構文も実行できないと思われます。
- amanojaku1
- ベストアンサー率54% (265/488)
訂正です、正規表現は下記の方が まだ適切です。 超簡易式の処理です、要点は(式として成立しているかではなく)コマンドが実行されないようになっているか?、が重要です。 ただしJavaScriptでもマクロのような構文が使えるようなので下記で完璧にコマンドが実行できないようになっているか保障はできません。 JavaScriptのマクロのような構文については分かりませんので、別の質問にしてみたら どうでしょうか? 「四則演算子、数字、括弧」以外は削除されます。<br> また式として成立しない文字列は計算できません。<br> <input type="text" name="gakunen" value="" onKeyPress="Calculator(this.value, event.keyCode)"> <script type="text/javascript"> <!-- function Calculator(a, kcode){ var r; if (!(13==kcode)){return;} // ↑「13:Enterキー」でない場合は「return」 r = a.replace(/( )/g, ''); r = a.replace(/^([\/\*\+][\-\/\*\+]*)/g, ''); r = a.replace(/^([\-\/\*\+][\-\/\*\+]+)/g, ''); r = r.replace(/([^0-9\.\-\/\*\+]*)/g, ''); try{ alert(r+' = '+eval(r)); }catch(ex){ alert('Syntax Error:'+r); } } // --> </script>
- amanojaku1
- ベストアンサー率54% (265/488)
>回答No.30 amanojaku1 超簡易式の処理です、要点は(式として成立しているかではなく)コマンドが実行されないようになっているか?、が重要です。 ただしJavaScriptでもマクロのような構文が使えるようなので下記で完璧にコマンドが実行できないようになっているか保障はできません。 JavaScriptのマクロのような構文については分かりませんので、別の質問にしてみたら どうでしょうか?
- amanojaku1
- ベストアンサー率54% (265/488)
<html> <head> <meta http-equiv="Content-Type" content="Text/HTML; charset=Shift_JIS"> </head> 「四則演算子、数字、括弧」以外は削除されます。<br> また式として成立しない文字列は計算できません。<br> <input type="text" name="gakunen" value="" onKeyPress="Calculator(this.value, event.keyCode)"> <script type="text/javascript"> <!-- function Calculator(a, kcode){ var r; if (!(13==kcode)){return;} // ↑「13:Enterキー」でない場合は「return」 r = a.replace(/([\/\*\+ a-zA-Z_\!\"\#\$\%\&\'\=\~\|\^\{\}\[\]\@\`\<\>\?\,\;\:\\]*)/, ''); r = r.replace(/([ a-zA-Z_\!\"\#\$\%\&\'\=\~\|\^\{\}\[\]\@\`\<\>\?\,\;\:\\]*)/g, ''); try{ alert(r+' = '+eval(r)); }catch(ex){ alert('Syntax Error.'); } } // --> </script> </html>
- amanojaku1
- ベストアンサー率54% (265/488)
>確かにその方が早いですが、実際に自分が感染するリスクはどうでしょうか? 確かにアンチウイルス・ソフトをインストールしていても感染のリスクはありますが、マイナーなサイトなら、あまり気にしなくて良いかと…。 日常的にイロイロなサイトを観覧している訳で、そちらの方が圧倒的に感染のリスクは高いです。 >また、evalを使っているのは1ページなのですが、すべてのページに危険性があるのでしょうか? サーバーがクラカーにハッキングされた場合に危険です。 >evalをエスケープしてセキュアにする方法を教えていただければ幸いです。 エスケープと言うか、コマンドが実行されないようになっていれば良い訳で、式として成立している必要もありませんので、(完全に数式を判定するのは難しいので)簡易判定で問題ありません。 正規表現で四則演算と括弧を許容する処理を作れば良いでしょう、式として成立してない場合の対処は「try{~}catch(ex){~}」で例外をcatchすれば良いでしょう。
- amanojaku1
- ベストアンサー率54% (265/488)
>ブウラザでサイトのメニューから1ページ、1ページ、表示してマルウエアに自分のPCを攻撃させた方がラクだと思いますが それでもページが沢山あると大変ですね(^_^;試しに自分のサイトで やってみようとしましたが途中やめました)
- amanojaku1
- ベストアンサー率54% (265/488)
>ウェブサイト診断サービスでは駄目でしょうか? (ブラウザでサイトのメニューから1ページ、1ページ、表示してマルウエアに自分のPCを攻撃させた方がラクだと思いますが)もちろん、ウイルストータルでもOKです(1ページ、1ページ、アドレスを入力して行くのは面倒だと思いますが)。 ウェブサイト診断サービスの場合、JavaScriptで外部JSファイルを動的に読み込んでいる場合、外部JSファイルまで診断できない可能性がありますので、その場合は直に外部JSファイルのアドレスを入力してみた方が良いかもしれません。
お礼
確かにその方が早いですが、実際に自分が感染するリスクはどうでしょうか? また、evalを使っているのは1ページなのですが、すべてのページに危険性があるのでしょうか?
- amanojaku1
- ベストアンサー率54% (265/488)
>自分がアップしたページを全部ブラウザで開けば 通常、ブラウザで開けるページと言う意味です。 無理にJSファイルとか開く必要はありません。 >1日に発見される新しいマルウェアは35万件 >https://the01.jp/p0005584/ とは言っても、当方も長年 無料HPなどにサイトをアップしていますが、まだマルウェア(悪意のあるコード)を仕込まれたことはありません。 マイナーなサイトなら、あまり気にしなくて良いかと…。
お礼
それではまだほとんど訪問者のいない私のサイトはなおさら、今回の件は大丈夫そうですね。 ただ今後訪問者が増えるかもしれないので大変恐縮ではございますが、 evalをエスケープしてセキュアにする方法を教えていただければ幸いです。
- amanojaku1
- ベストアンサー率54% (265/488)
>するとサイトをウイルストータルで調べるしかないでしょうか? そうですね。 または自分のPCに無料のアンチウイルス・ソフトを入れておき、自分がアップしたページを全部ブラウザで開けば、マルウエアが存在すればくるので攻撃して来るので、下記のようなアンチウイルス・ソフトで検出できます。 当方は「avira antivirus free」を入れてますが、マルウェア(悪意のあるコード)が仕込まれたページを開くとブロックして悪意のあるコードが どうとかみたいなメッセージを表示してくれます。
お礼
私はカスペルスキーですが危ないですがその方法しかないでしょうか?ウェブサイト診断サービスでは駄目でしょうか?
- amanojaku1
- ベストアンサー率54% (265/488)
ただファイルを隠すことはできないので、別ファイルにしている場合は見覚えのないファイルが見えるのでしょうね。 クラッカーにサーバーが完全に乗っ取られたら、FTPに対するファイルの隠蔽も可能です。 FTPの話ではありませんが、DOSの話の方が分かりやすいと思いますので。 かなり前(DOS時代)の話ですがステルス・ウイルスと言うのが流行った事がありました。 例えばウイルスのファイル名が「jyugemu.exe」だったとします、(DOSを乗っ取って)DOSのAPIでディレクトリ内のファイル名を読み込む時に、そのディレクトリ内に「jyugemu.exe」と言うファイルが存在したら、ファイル名を除去して、そのディレクトリ内のファイル名を渡してやれば、ユーザーはウイルスのファイルの存在を認識できないと言う感じです(実際はファイル名だけでなくファイルのSUMチェックもやっていると思われますが)。 同様にFTPに対するファイルの隠蔽も可能です。
お礼
ファイルが見えないようにすることもできるのですね。 ffftp上でのかくにんは難しそうですね。 するとサイトをウイルストータルで調べるしかないでしょうか?
お礼
こんな大変な処理をevalを使う前に実行させればいいのですね。
補足
了解しました。別の質問にするのでお忙しい中恐縮ですが引き続きお願い致します。