タグ

正規表現とRegular Expressionに関するatsushifxのブックマーク (2)

  • 正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう

    正規表現によるバリデーション等で、完全一致を示す目的で ^ と $ を用いる方法が一般的ですが、正しくは \A と \z を用いる必要があります。Rubyの場合 ^ と $ を使って完全一致のバリデーションを行うと脆弱性が入りやすいワナとなります。PerlPHPの場合は、Ruby程ではありませんが不具合が生じるので \A と \z を使うようにしましょう。 はじめに 大垣さんのブログエントリ「PHPer向け、Ruby/Railsの落とし穴」には、Rubyの落とし穴として、完全一致検索の指定として、正規表現の ^ と $ を指定する例が、Ruby on Rails Security Guideからの引用として紹介されています。以下の正規表現は、XSS対策として、httpスキームあるいはhttpsスキームのURLのみを許可する正規表現のつもりです。 /^https?:\/\/[^\n]+$/

    atsushifx
    atsushifx 2014/03/04
    行と文字列のワナ。行頭、行末をあらわすメタ文字^,$をつかうと複数行に渡るインジェクションコードを見逃す恐れがある
  • 正規表現が構文として必要かどうかという話から

    FUJI Goro @__gfx__ dartVMはほんとに速くなったし、標準化はほんとに期待してる。あと正規表現さえ構文に組み込まれればサーバーサイドでも使えますよこれは。 methane @methane @__gfx__ なんでサーバーサイドで使うのに正規表現が構文で必要なんですか…? PythonGo も正規表現構文無いけど不自由感じないし、むしろリテラルあるとシンプルな文字列操作で良い場面で正規表現を使う悪習が広まるので良くないと思うのですが。

    正規表現が構文として必要かどうかという話から
    atsushifx
    atsushifx 2013/12/16
    正規表現は文字列の検索・置換のためのプログラミング言語。しかもUNIX時代からの古さと方言が残っている。使いこなせれば強力だけど、記号による記述なので教育コストが高い。もっとモダンな正規表現があるといい
  • 1