5分で分かるPHP7化する方法 〜アプリケーション編〜 バーチー / GMO PEPABO inc. 2017.02.22 PHP BLT #6
エグゼクティブサマリ PHPMailerにリモートスクリプト実行の脆弱性CVE-2016-10033が公表された。攻撃が成功した場合、ウェブシェルが設置され、ウェブサーバーが乗っ取られる等非常に危険であるが、攻撃成功には下記の条件が必要であることがわかった PHPMailer 5.2.17以前を使っている Senderプロパティ(エンベロープFrom)を外部から設定できる 現在出回っているPoCはMTAとしてsendmailを想定しており、postfixを使っている環境では問題ない 対策版として公開されている PHPMailer 5.2.19も不完全であるので、回避策の導入を推奨する。 はじめに 12月24日にPHPMalerの脆弱性CVE-2016-10033が公表され、とんだクリスマスプレゼントだと話題になっています。 PHPからのメール送信に広く使われているライブラリの「PHPMai
PHPライブラリ「PHPMailer」に脆弱性が見つかった問題で、同ライブラリを利用する「WordPress」「Joomla!」「Drupal」いずれも、コア部分では脆弱性を悪用される懸念がないことがわかった。 問題の脆弱性は、ウェブサーバの権限で任意のコードを実行されるおそれがある「PHPMailer」の脆弱性「CVE-2016-10033」。修正版として「同5.2.18」が公開されたが、対策をバイパスされる脆弱性「CVE-2016-10045」があらたに判明。「同5.2.20」の準備が進められている。 「PHPMailer」は、「WordPress」「Drupal」「Joomla!」などのコンテンツマネジメントシステム(CMS)をはじめ、「1CRM」「SugarCRM」といった顧客管理システムで利用されており、これらプログラムへの影響について不安の声が上がっていた。 「WordPres
先日別のチームから、 「PHPで作成したWebアプリの速度が遅いので助けてくれー」 という相談を受けた。 対応したものの、結構時間がかかって面倒だったので、 今後こういった問題が起こった時に使えるよう、チェックリストをまとめてやった。 基本的な内容だけど、 このチェックリストの内容をやってみて、それでもダメなら相談しなさい、 と伝えておくことで相談を減らすフィルタとして働いてくれるはずだ。 PHPプロジェクトに限らず、バックエンドでデータベースを使用している Webアプリのプロジェクトなら試す価値のあるものが多いはず。 調査や対応方法の手軽さ順で並べるとこんな感じ: Webブラウザのデベロッパーツールでレスポンスを計測する Webサーバ(Apache)のリクエスト時間をログに出力する ログ解析ツールでURL毎の付随リクエスト数を確認する データベースのスロークエリログを出力する プロファイ
外部のアプリケーションとデータの受け渡しをしているシステムを別のサーバーに移さなければならなかったので、淡々と慎重にでも味噌汁をすすりながら移行作業を終わらせ、テストで動かしてみたらFatal errorが返ってきました。 PHP Fatal error: Call to undefined function json_encode() ・・・ json_encode()関数が定義されていない・・・? というわけでサーバーのPHP環境を確認してみると(最初に確認しろっと)PHPのバージョンは5.1でした。どうやらjson_encode()関数は5.2以降で定義されてる関数とのこと。 ・・・自前でなんとかしろってことですかね(´・ω・`) 代用処理を書くとしたらかなり骨が折れるし、ここに工数を割くわけにもいかないので、jsonまわりの情報を探してみたらPEARのサイトでjson関数ファイル
データベースに接続する PDOでデータベースに接続するには、PDO クラスを使用します。接続に成功するとオブジェクトが返されます。 オブジェクト = new PDO( 'データベースの種類:dbname=データベース名;host=接続先アドレス', 'ユーザー名', 'パスワード' ); MySQLに接続する場合、データベースの種類は mysql を指定します。もしPostgreSQLに接続したければ pgsql、SQLiteに接続したければ sqlite を指定します。他にも、色々な種類のデータベースに接続することができます。 接続に失敗するとPDOは「例外」を発生させます。これは try と catch を使用すれば補足することができます。具体的には try { チェックしたい処理 } catch (PDOException $e) { 例外が発生したときの処理 } という形式になりま
今まで mysql... 系を使用していましたが、PHP5.5以降は非推奨となり、将来的には削除される予定らしいので、PDOの使用に変更しようと思い、まとめてみました。 プリペアドステートメントでINSERTすると安全に値を渡せるとか、結構便利みたい。 Manualとか色々読んだけど、分かりにくい言葉が多かったので、自分なりに解釈を書いています。 PDOとかプリペアドステートメントの説明 こっちのページに詳しく書いています。 言葉の意味分からんわー。みたいな時は是非読んでみてください。 PDOでMySQLを色々やる。 まずメソッドや引数をちょっとまとめました。 今後増やしていこうと思っています。 メソッドや引数 内容
8月18日にPHP5.3.7がリリースされました。このリリースにより、PDOのSQLインジェクションの問題が一応解決されたと判断しましたので、ここに「一応の安全宣言」を表明するとともに、残る問題について報告します。 PDOの問題とは何か 以前、ぼくがPDOを採用しなかったわけ(Shift_JISによるSQLインジェクション)にて報告したように、PHP5.3.5以前のPDOにはDB接続時に文字エンコーディングを指定する機能がないため、文字列リテラルのエスケープの際に文字エンコーディングをLatin1を仮定してしまうという問題がありました。この状態ですと、DBにShift_JISで接続している際に、SQLインジェクション脆弱性が混入しました。 ※ 実は、先のエントリの「追記(2010/07/01 22:20)」に紹介した方法で文字エンコーディングを指定できるのですが、ほとんど知られていないのと
PHP初心者のときに混乱したし、未だに初心者が困ってるのをよく見掛ける。 はやわかり ファイル全体をまるごと読み込みたい→ file_get_contents() ファイルの中身をまるごと出力したい→ readfile() 行単位のテキストファイルを配列として読み込みたい→ file() ファイルをバイト単位で読み込みたい→ fopen()+fread() CSVを読み込みたい→ SplFileObjectクラス オブジェクト指向的に操作したい→ SplFileObjectクラス クラウドとかFTPとかにあるファイルを読み込みたい→ League\Flysystemライブラリ バイナリファイルを操作したいとか事情がない限り、feof()とかfclose()とかの出番はない。 file_get_contents() (PHP: file_get_contents - Manualより抜萃、2
PHPの生みの親、ラスマス・ラードフ氏インタビュー 2015年12月に無事公開されたPHP7。その公開に先立ってPHPの生みの親であるラスマス・ラードフ氏に話を伺う機会がありました。英語で行われた一時間のインタビューは長大ですがラスマス氏の思想がよく分かる話題が多く、可能な限りそのままの形でお伝えすべく、その模様すべてをお届けします。 なお、インタビューは10月に開催されたPHPカンファレンス2015の講演終了後に行われ、リリースに関する話題などはその時点でのものです。 現在の仕事と生い立ち ―――― まずは、PHPを作ってくださってありがとうございます。今日の基調講演もすばらしかったです。 ラスマス:ありがとうございます。 ―――― いきなりですが、個人的な質問から始めてもいいでしょうか。 ラスマス:どうぞ。 ―――― Etsyではどのようなお仕事をなさっているんですか? ラスマ
PHPカンファレンス2020での講演資料です。 アジェンダ 誤解1: Cookieは誤解がいっぱい 誤解2: 脆弱性があるページにのみ影響がある 誤解3: 脆弱なECサイトはセキュリティコードを保存している 誤解4: クレジットカードをサイトに保存すると漏洩リスクが高まる 誤解5: ハッシュ値で保存されたパスワードは復元されない 誤解6: 高価なSSL証明書ほど暗号強度が高い 誤解7: TRACEメソッドの有効化は危険な脆弱性である 誤解8: 怪しいサイトを閲覧すると情報が盗まれたりウイルスに感染する 誤解9: イントラのウェブサイトは外部からは攻撃できない 誤解10: セキュリティ情報はウェブで収集する
アンチパターンなので、見出しの内容はすべてバッドノウハウです。 前に書いたやつ PHPのモダンな開発環境を紹介する - Qiita PHP - Functoolsを作った - Qiita PHPのlist()はタプル展開のための機能 - Qiita 関係ないけどこれも: シェル、ターミナル、コンソール、コマンドライン 追記: 本文中でとりあげた「怖い話」について、ちゃんと説明しました PHP - namespaceとBOMに何の関係があるのさ - Qiita ファイルの最後に?>を書く PHPコードは<?phpで始まり?>で締める。それがPHPの常識(キリッ ……そんなことはもう綺麗さっぱり忘れよう。PHPはテンプレートエンジンではあるが、Webアプリケーションを書く上では、もはやテンプレートエンジンとしての機能は求められなくなりつつある。 不要な?>を書いてはいけない理由は明確で、<?p
JavaScript Object Notation「JSONとは何か?」について、簡単に説明します。JSONという文字を見て「13日の金曜日」を思い浮かべてしまう人は、まずはその過ちに気付いて下さい。JSONとはJavaScript Object Notationの頭文字を繋げ合わせたものです。Notationは日本語で「表記法」。JavaScriptのオブジェクトの表記法を元にした、データフォーマットです。要はJavaScriptのオブジェクトみたいなデータ形式ですね。 様々なプログラム言語が対応しているJSONの最大の特徴は、例えばJavaScript、PHP、Rubyというような様々なプログラム言語がその取り扱いに対応していることです。データを用意する側は、JSONという形式のデータ1種類を用意しておくだけで、JavaScriptを使う人、PHPを使う人、Rubyを使う人などに対応
どうもこんにちは。Toshikuraです。今回のTipsは【PHP 特定ディレクトリ内にあるファイル一覧を取得する方法 – globとopendirそれぞれでの実行】です。何解りきった事をと言われてしまいそうですが…地味に出現するのでメモしておきます。 例でのディレクトリ 例では【dir】ディレクトリの中にいくつかの画像ファイルといくつかのディレクトリが格納されている事を想定し、このディレクトリからファイルのみ取得します。 globでの実装 globではワイルドカードが使用できます。パターン以外にもフラグの指定、またその組み合わせも可能です。またglobを使用すれば拡張子の指定も比較的容易に実現可能です。ここではあくまで参考程度ですので詳しくはマニュアルをご参照ください。 foreach(glob(‘dir/*’) as $file){ if(is_file($file)){ echo h
はじめまして。1エントリ目を書くことになった id:sotarok です。光栄です。 メルカリは、2013年7月にリリースされて現在急成長中のフリマアプリで、今週2周年を迎えます。 ダウンロード数1500万ということで多くのユーザーに利用していただいていて、サービスとしても会社としても大きくなる中で、日々多くの技術的課題への挑戦が行われています。 そうした内容を、今日からこの “Mercari Engineering Blog” で、あれやこれや発信していきたいと思っています。 さて、1発目のご挨拶エントリーということで特段大きなネタは用意していないのですが、、 これまでのメルカリではエンジニアブログをやっていなかったため、技術的なアウトプットは各人がそれぞれやっていました。そこで、ここ2年のメルカリエンジニアメンバーによる技術的なアウトプットをまとめてみました! インフラからクライアント
PHPカンファレンス関西2015に行ってきました。 今回から場所が変わったり、初の有料化だったりとスタッフの皆さんは色々と大変だったかと思います。本当にありがとうございました。 今回はセッションのトラックが5本で、内容的にも初心者用から濃いものまで充実しており、非常に満足できました。 見られなかったけど気になるセッションが数多くありましたので、ネットで公開されているセッションのスライドをまとめてみました。 とりあえず見つけられたものを掲載させて頂いておりますが、これからアップされるもの等もあるかと思いますので、また見つけ次第更新させて頂きます。 セッションのスライド 基調講演『PHP7で変わること 言語仕様とエンジンの改善ポイント』 PHP7で変わること ——言語仕様とエンジンの改善ポイント from Yoshio Hanawa www.slideshare.net 『ビッグウェーブ到来!
フォームのtextareaに入力された複数行の内容を1行毎に処理する方法をメモ。 はじめに 具体的には、改行ごとに区切ってそれらを配列にいれていく処理になります。 入力した値はPOSTで受け取ります。 コード <?php //もしもpost投稿があったら if($_SERVER['REQUEST_METHOD'] == "POST"){ $urls = $_POST['urls']; // テキストエリアの値を取得 $cr = array("\r\n", "\r"); // 改行コード置換用配列を作成しておく $urls = trim($urls); // 文頭文末の空白を削除 // 改行コードを統一 //str_replace ("検索文字列", "置換え文字列", "対象文字列"); $urls = str_replace($cr, "\n", $urls); //改行コードで分割(結
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く