node.js で シェルを実行するのに get の 値を使用しています。
html に表示する場合は php だと htmlspecialchars などといった対策があると思います。
そのような感じで 必要な対策を教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
汎用的な関数はないと思います。どのようなものを渡すのかを決め、シェル特有の記号が含まれないよう正規表現でチェックするしかないでしょう。
例えば、
- 数字0-9と英字a-zA-Zのみ
- 1文字以上256文字以下
というのであれば/^[0-9a-zA-Z]{1,256}$/
にマッチするかで確認できます(複数行フラグ"m"を付けるとセキュリティーホールになる場合がありますので、絶対に付けてはいけません)。記号やスペースを含みたいという場合、どのような記号を除外するかは、使用するシェルによって異なります。OSによってシェルが異なるため一概には言えません。""囲めば安全とか、\でエスケープするとかは、使用するシェルがわかった上で、そのシェルに合わせて慎重に実装する必要があります。また、ファイル名を指定する場合、"/"でルートアクセス、".."で親ディレクトリにアクセスなどが可能になりますので、それらを考慮する必要があります。フルパスに変換して指定のディレクトリ以下であることを確認とかしないと、予期せぬデータの破壊や情報漏洩に繋がります。
いずれの場合も、一歩間違えればセキュリティーホールになります。英数字のみと言った限定的な物でないと難しいでしょう。信頼できない文字列をシェルに渡さなくてもいいように設計を見直した方が良いかもしれません。
投稿2018/04/28 21:19
総合スコア21733
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/04/28 22:52
2018/04/28 23:33 編集
退会済みユーザー
2018/04/29 00:30
2018/04/29 01:31
2018/04/29 01:52
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。