![本当にあった怖い脆弱性の話](https://cdn-ak-scissors.b.st-hatena.com/image/square/8f59226912920ec35604d9405fa5e4826ebe867a/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2Fe9d51fa18f5a445a8411aa401dc828af%2Fslide_0.jpg%3F21043718)
この記事は 勝手に添削: PHP初心者向けのコード最適化 の続編です。リーダビリティの定義は前と同じく、「そのコードが何をしたいかを把握する時間+そのコードをレビューして正しいと自信を持てるまでの時間」の短さです。 よく「php よりも Python の方がリーダビリティが高い」という主張に対して、「Pythonでも糞コードはかける」「言語よりも人の問題だ」といった反論をする人がいます。 この反論をする人は「同じ程度のスキルの人が同じ程度の丁寧さでコードを書く」という暗黙の前提が伝わっていなくて、「リーダビリティは言語に依存して人には依存しない(あるいは人よりも言語に強く依存する)」という主張だと誤解しています。(この主張にかぎらず、大抵「◯◯でも悪い△△は存在する」という類の反論は、暗黙の前提を理解していないか、あるいはわざと無視しているケースが多いです) 言語設計が(書き手のスキルほど
HTMLエスケープの対象となる < > & " の4文字は、文字実体参照に変換された後、preg_replace関数でセミコロンを削除してしまうので、中途半端な妙な文字化けになりそうです。 一般的な原則としては、データベースにはHTMLの形ではなくプレーンテキストの形で保存しておき、HTMLとして表示する直前にHTMLエスケープする方法で統一することで、上記のような文字化けやエスケープ漏れをなくすことがよいでしょう。 脆弱性はないのか このsanitize関数に脆弱性はないでしょうか。上表のように、バックスラッシュ(円記号)を素通ししているので、MySQLや、設定によってはPostgreSQLの場合に、問題が生じそうです。以下、それを説明します。以下の説明では、MySQLを使う想定とします。 以下のように、ログイン処理を想定したSQL文組立があったとします。 $sql = sprintf(
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く