タグ

正規表現に関するnutahuateのブックマーク (2)

  • ReDoSの回避

    (Last Updated On: 2018年8月8日)正規表現のアルゴリズムを攻撃するDoS攻撃のReDoSを可能な限り回避する方法を考えてみます。 追記: 破滅的なReDoSは非常に短い検索対象文字列でDoS攻撃が可能でした。念の為と思い、このエントリでは正規表現検索の対象文字列を短くする対策を紹介していましたが、この種の対策が効果があるケースがありました。 ReDoSに脆弱になる典型的な正規表現は以下のような正規表現です。 Evil Regex pattern examples (a+)+ ([a-zA-Z]+)* (a|aa)+ (a|a?)+ (.*a){x} | for x > 10 Payload: “aaaaaaaaaaaaaaaaaaX” 出典:CHECKMARX  2015 (PDF) マッチパターンが繰り返される正規表現が問題になります。 メールアドレスにマッチする正

    ReDoSの回避
  • パフォーマンスを意識して正規表現を書く - Shin x Blog

    正規表現を書く際、どのようなパターンにマッチさせるか、どこをキャプチャするかという視点で記述することはあっても、パフォーマンスを考えて記述するというのはある程度知っている人でなければ忘れがちな視点です。 このエントリでは、バックトラックをメインに正規表現がパフォーマンスに及ぼす挙動について見ていきます。 対象の正規表現エンジン ここでは、従来型 NFA を対象としています。具体的には、PHP の preg_ 関数で利用している PCRE や mb_ereg 関数が利用している鬼車です。PerlRubyPythonJava、.NET でも従来型 NFA を採用しているので、似た挙動となるでしょう。 「従来型 NFA」や「バックトラック」などの用語については、「詳説 正規表現 第3版」のものを用いています。 バックトラックによるマッチ探査 正規表現エンジンでは、指定された文字列が、パ

    パフォーマンスを意識して正規表現を書く - Shin x Blog
  • 1