タグ

ブックマーク / qiita.com/mpyw (6)

  • とっても簡単なCSRF対策 - Qiita

    【2021/10/15 追記】 この記事は更新が停止されています。現在では筆者の思想が変化している面もありますので,過去の記事として参考程度にご覧ください。 CSRFおよびその対策の仕組みに関してはこちら↓ これで完璧!今さら振り返る CSRF 対策と同一オリジンポリシーの基礎 - Qiita この記事は,PHPにおけるワンタイムトークンを用いた実装例を示すものです。執筆日が少々古いものになるのでご了承ください。 コメント欄の議論に関するまとめ 以下,XSS脆弱性が存在しない前提.この脆弱性があるとあらゆるCSRF対策がほとんど意味をなさなくなるので,まずここから潰しておくこと. セッション固定攻撃に対する対策 ログイン後にsession_regenerate_idを必ず実行する. ログアウト後にsession_destroyを必ず実行する. CSRF攻撃に対する対策 セッションIDを抜か

    とっても簡単なCSRF対策 - Qiita
  • UTF-8を想定して、不正なバイト列が含まれていないかを1行でチェックする - Qiita

    function validate_utf8($input) { return (bool)preg_match('//u', $input); } あら簡単。 え?ホントにこれだけで大丈夫なの? って思う人も多いと思うので(というか私も最初そう思ったので)、検証してみます。 (追加したほうがいいテストケースがあればコメントください) function test($input) { $output = htmlspecialchars($input, ENT_QUOTES, 'UTF-8'); $code = str_replace('%', '\\x', rawurlencode($input)); if (validate_utf8($input)) { echo "【{$output}】({$code}) は有効なUTF-8シーケンスです。\n"; } else { echo "({

    UTF-8を想定して、不正なバイト列が含まれていないかを1行でチェックする - Qiita
  • PHP+JavaScriptでクロスオリジンなシングルサインオン認証 - Qiita

    はじめに PHPによる簡単なログイン認証いろいろで紹介したセッション認証において,「あるオリジン上でログインしたら別のオリジン上でもログインしたことにする方法」,つまりクロスオリジンでセッションを共有する方法(変数$_SESSIONを共有する方法)を解説します. teratailで回答していただいた方々,ありがとうございました teratail - シングルサインオン認証はCSRFセーフなの?(31529) 共通のドメイン上にサブドメインで分岐している場合 セッション用Cookiedomain属性を変更する

    PHP+JavaScriptでクロスオリジンなシングルサインオン認証 - Qiita
  • 「RFC3986定義の厳密なHTTP URIの正規表現」をPHP用に最適化 - Qiita

    元ネタ RFC3986定義の厳密なHTTP URIの正規表現 何をしたか PHP向けに以下の編集を行いました。 適当な文字数毎に分割した文字列リテラルに (Atomなどのエディタは一行が長すぎると重くなる) デリミタ ` を付加 i 修飾子を付加 グループに関して、全てキャプチャ無しに 繰り返しパターンに関して、全てバックトラックを行わないよう独占的に aaahttp://などにはマッチしないように,先頭に単語境界の判定を付加 コード $regex = '`\bhttps?+:(?://(?:(?:[-.0-9_a-z~]|%[0-9a-f][0-9a-f]' . '|[!$&-,:;=])*+@)?+(?:\[(?:(?:[0-9a-f]{1,4}:){6}(?:' . '[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:\d|[1-9]\d|1\d{2}|2' . '[0-

    「RFC3986定義の厳密なHTTP URIの正規表現」をPHP用に最適化 - Qiita
  • [PHP] ファイルオープンモードに関するマニュアルの記述は間違っている - Qiita

    間違った記述 fopen 関数のマニュアルは、完全に間違っているとも言い難いが、 「極めて不親切」 であるとは言える。その記述が以下のものである。 実際には、ファイルポインタを 先頭 に置いているとしか思えない挙動をする。 $fp = fopen('new_file.txt', 'w'); fwrite($fp, 'abcde'); fclose($fp); $fp = fopen('new_file.txt', 'a'); echo ftell($fp); fclose($fp); としてみると、 ftell 関数の返り値は 0 となっていることが分かる。マニュアルを見ると、 確かに 未定義 であるとされているため、この場合は誤りでは無いのかもしれない。しかし、 a+ モードは読み出しも可能なストリームでもあるのに、未定義で片づけてしまうのは間違っているのではないかと思う。混乱を招く要因

    [PHP] ファイルオープンモードに関するマニュアルの記述は間違っている - Qiita
  • PHPでデータベースに接続するときのまとめ - Qiita

    【2021/10/15 追記】 この記事は更新が停止されています。現在では筆者の思想が変化している面もありますので,過去の記事として参考程度にご覧ください。PDO に関しては大きく変わっていない部分が多いとは思いますが, PHP 8.x 以降での動作保証はありません。 あらかじめ読んでおきたい記事 Qiita - 【PHP超入門】クラス~例外処理~PDOの基礎 by @7968 初心者がやりがちなミス 以下のどれかに1つでも当てはまるコードは見直す必要があります.付録にリンクを貼っておきましたので,「該当するかも?」という人はクリックして飛んで読んでください.太字にしてあるものは脆弱性に直結する危険度の高いものです. mysql_query などの非推奨関数を利用している SET NAMES あるいは SET CHARACTER SET などで文字コードを指定している そもそもデータベース

    PHPでデータベースに接続するときのまとめ - Qiita
  • 1