Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

タグ

regexpに関するkei2100のブックマーク (11)

  • 正規表現の脆弱性 (ReDoS) を JavaScript で学ぶ

    先日、このようなツイートを書いたところ、かなりの反響がありました。 JavaScript の正規表現の脆弱性の例でいうと、例えば /\s+$/ は脆弱性があると言える console.time(); /\s+$/.test(" ".repeat(65536) + "a"); console.timeEnd(); 結構時間がかかるのがわかる。でも /\s+$/ を見て「これは危険だな」と理解出来る人はそんなにいない。JavaScript に限らないけれど。 — Takuo Kihira (@tkihira) February 17, 2022 これは一般に ReDoS (Regular expression Denial of Service) と呼ばれる脆弱性です。正確に理解するのが難しい脆弱性なので、少し解説してみたいと思います。 結論 長い記事になるので、最初に「とりあえずこれだけ知っ

  • Playground | recheck

    Copyright © 2020-2024 TSUYUSATO "MakeNowJust" Kitsune. Built with Docusaurus.

    Playground | recheck
    kei2100
    kei2100 2022/08/05
    ブラウザ上で ReDoS 脆弱な正規表現でないかチェック
  • はじめての正規表現とベストプラクティス#9: `.*`や`.+`がバックトラックで不利な理由|TechRacho by BPS株式会社

    2019.04.19 はじめての正規表現とベストプラクティス#9: `.*`や`.+`がバックトラックで不利な理由 1: 基となる8つの正規表現 2: 正規表現とは何か/ワイルドカードとの違い 3: 冒頭/末尾にマッチするメタ文字とセキュリティ、文字セットの否定と範囲 4: 先読みと後読みを極める 5(特別編)|と部分マッチのワナ 6: 文字セットのショートハンド 7: Unicode文字ポイントとUnicode文字クラス 8: 対象の構造を意識した「適度にDRYな」書き方 9: .*や.+がバックトラックで不利な理由(記事) 10: 危険な「Catastrophic Backtracking」前編 主にRubyを中心としながらも、なるべく一般的な形で正規表現を解説しています。誤りやお気づきの点がありましたら@hachi8833までどうぞ🙇。 ⚓.*のバックトラックを視覚的に理解する

    はじめての正規表現とベストプラクティス#9: `.*`や`.+`がバックトラックで不利な理由|TechRacho by BPS株式会社
  • Railsの正規表現でよく使われる \A \z って何?? - Qiita

    はじめに この記事では以下のような内容を説明します。 Railsの正規表現(入力値バリデーション)でよく使われる \A や \z とは何なのか \A や \z は ^ や $ とどう違うのか JavaScript のような他の言語でも同じように \A や \z を使えるのか 「なんかよくわからないけど、^ や $ を使うとRailsに怒られるから \A や \z を使ってる」という人は、ぜひこの記事を読んできちんと意味を理解しましょう! 前提となる知識 正規表現についての基的な説明はここではしません。 正規表現が全く分からない、という方は以下の記事を読んでおいてください。 初心者歓迎!手と目で覚える正規表現入門・その1「さまざまな形式の電話番号を検索しよう」 - Qiita 初心者歓迎!手と目で覚える正規表現入門・その2「微妙な違いを許容しつつ置換しよう」 - Qiita 初心者歓迎!手

    Railsの正規表現でよく使われる \A \z って何?? - Qiita
    kei2100
    kei2100 2016/04/26
    \A \z ^ $
  • 正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう

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

  • おそるべし正規表現 「ある文字列を含まない行」: 大阪のオッサンのダラダラ日記

    日、会社のプロキシサーバの予備機をセットアップしたのです。 番機と同じ設定にすべく作業をしていたのですが、 なにかがおかしい・・・ プロキシサーバには、squidを使っているのですが、 設定ファイルである”squid.conf”はなんと4000行以上もあるのです。 どうやら、同じような記述を何回もしていたり、矛盾する記述をしているようなのです。 で、「どこがおかしいのかいな?」と探してみたもののわけがわからん・・・ コメント行以外を見ていくのですが、4000行以上あるのはちょっと・・・ というわけで、コメント行以外を”grep”で抽出してみることに。 ”squid.conf”のコメント行は、#で始まっているので#を含まない行をみつければOKのはず。 つまり、「ある文字列を含まない行」を探すのです。 というわけで、正規表現を考えたもののなかなかうまくいかず。 悩んだ時の、ネット頼みをして

  • 正規表現の確認

    正規表現を入力すると即座に一致判定を行います。パターンや入力を変えながら あれこれ試行錯誤したい時などに使用してください。正規表現エンジンは JDK 1.6 (Sun Microsystems Inc. Java VM 10.0-b23) を使用しています。PerlJavaScript など他の言語の正規表現とは細かいクセが違う 可能性があるので注意して下さい。Java 正規表現の詳しい仕様は Pattern クラスの API リファレンスに記載されています。

  • 正規表現が文字列の先頭・末尾にマッチするか調べる (マルチラインモード含む) - みちしるべ

    twitterとid:uehajからコメントをもらったもう一度。 http://java.sun.com/javase/ja/6/docs/ja/api/java/util/regex/Pattern.html#MULTILINE 行末記号の説明 デフォルトでは、正規表現 ^ および $ は行末記号を無視し、入力シーケンス全体の それぞれ先頭と末尾だけにマッチします。MULTILINE モードがアクティブになると、 ^ は入力の先頭、および入力の末尾を除くすべての行末記号の後にマッチします。 MULTILINE モードの場合、$ は行末記号の直前、または入力シーケンスの末尾にマッチします。 MULTILINEの説明 複数行モードを有効にします。 複数行モードでは、表現 ^ と $ は、それぞれ行末記号または入力シーケンスの 末尾の直後または直前にマッチします。デフォルトでは、これらの表現は

    正規表現が文字列の先頭・末尾にマッチするか調べる (マルチラインモード含む) - みちしるべ
  • 正規表現メモ

    \x{} \pは後続する名前が表すクラス(プロパティ、スクリプト、ブロック)に属する文字にマッチし、 \Pは後続する名前のクラスに属さない文字にマッチします。 クラスの名前が一文字のときはブレースを省略できます。 クラス名の前に^を置くことにより否定形の指定を行うことも可能です。 Perl 5.8 での変更点 Perl5.8以降(5.6でも使えたようですが)では \pや\Pで始まるプロパティ指定に標準Unicode属性を使うこともできます。 詳しくは perlunicode perlunicode - Perl における Unicode サポート を参照してください。 日語による説明が Unicodestandard にもあります。 Perl 5.8以降ではユーザーが任意のプロパティを作成することができます (IsまたはInを必ず前置)。 詳しくは perlunicode perluni

  • 正規表現で楽々コード置換 - give IT a try

    会社で紹介した正規表現の入門的なテクニックをこっちにも載せておきます。 まずは例題から ちょっと訳あって、これまで型付けDataTableを使って書いていたロジックを、型無しのプレーンなDataTableに書き換える必要が出てきました。 イメージ的にはこんな感じです(もちろん説明のためにかなり簡略化しています)。 // 変更前 BookShopDataSet.BookTable table = FindBooks(); BookShopDataSet.BookTableRow row = table[0]; Assert.AreEqual("詳説 正規表現", row.Title); Assert.AreEqual("ジェフリ− E.F.フリ−ドル", row.Author); Assert.AreEqual("オライリージャパン", row.Publisher); // 他にもたくさんの

    正規表現で楽々コード置換 - give IT a try
  • gkbr.me

    このドメインを購入する。 gkbr.me 2018 Copyright. All Rights Reserved. The Sponsored Listings displayed above are served automatically by a third party. Neither the service provider nor the domain owner maintain any relationship with the advertisers. In case of trademark issues please contact the domain owner directly (contact information can be found in whois). Privacy Policy

  • 1