PHP: preg_match() / JavaScript: match() 正規表現チェッカー ver3.1 PHP及びJavaScriptコーディング中に正規表現を記述する際の動作チェック等にご利用ください。 正規表現と対象文字列を入力し、[チェック!]ボタンをクリックすると、PHP: preg_match()と JavaScript: match()の実行結果がフィードバックされます。 正規表現
PHP: preg_match() / JavaScript: match() 正規表現チェッカー ver3.1 PHP及びJavaScriptコーディング中に正規表現を記述する際の動作チェック等にご利用ください。 正規表現と対象文字列を入力し、[チェック!]ボタンをクリックすると、PHP: preg_match()と JavaScript: match()の実行結果がフィードバックされます。 正規表現
フォームを構成するHTML PHPでは、ファイルのアップロードも簡単に行うことができます。 まずは form.html を作成し、以下のHTMLを書きます。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>sample</title> </head> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> ファイル:<br /> <input type="file" name="upfile" size="30" /><br /> <br /> <input type="submit" value="アップロード" /> </form> </body> </h
$ cat _server.php #!/usr/bin/php <?php print_r($_SERVER); このようなPHPスクリプトで挙動を観察してみた。 まずはコマンドラインから起動。 $ ./_server.php Array ( [HOSTNAME] => atlas.example.com [TERM] => xterm [SHELL] => /bin/bash [HISTSIZE] => 1000 [NLS_LANG] => JAPANESE_JAPAN.AL32UTF8 [SSH_CLIENT] => 10.28.1.30 62948 22 [SSH_TTY] => /dev/pts/2 [USER] => m-hotta [LS_COLORS] => no=00:fi=00:di=01;33:ln=01;36:pi=40;33:so=01;35:do=01;35:b
HTMLエスケープの対象となる < > & " の4文字は、文字実体参照に変換された後、preg_replace関数でセミコロンを削除してしまうので、中途半端な妙な文字化けになりそうです。 一般的な原則としては、データベースにはHTMLの形ではなくプレーンテキストの形で保存しておき、HTMLとして表示する直前にHTMLエスケープする方法で統一することで、上記のような文字化けやエスケープ漏れをなくすことがよいでしょう。 脆弱性はないのか このsanitize関数に脆弱性はないでしょうか。上表のように、バックスラッシュ(円記号)を素通ししているので、MySQLや、設定によってはPostgreSQLの場合に、問題が生じそうです。以下、それを説明します。以下の説明では、MySQLを使う想定とします。 以下のように、ログイン処理を想定したSQL文組立があったとします。 $sql = sprintf(
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)」に紹介した方法で文字エンコーディングを指定できるのですが、ほとんど知られていないのと
セキュリティに関することで参考にしている大垣 靖男さんのブログの少し古いエントリーの紹介です。 2007-08-22 SET NAMESは禁止 MySQLには文字エンコーディングを変更する「SET NAMES」SQL文が用意されています。(PostgreSQLも同様のSQL文、SET CLIENT_ENCODINGがあります)この機能はSQLコンソールからは使ってよい機能ですが、アプリケーションからは使ってはならない機能です。SQLインジェクションに脆弱になる場合があります。 少々衝撃でした。 文字エンコーディング変更に SET NAMES を使うのは良く例示されている解決策だったからです。 今でも EUC 運用の MySQL は数多く存在し UTF-8 でアプリケーションを構築したいことは良くあります。 PHP では が使えるなら使った方が良いことになるのかと、エントリーを見て思いました
PDOでutf-8の日本語入力データ(フォームデータ)を入れたら文字化けしてた(Mysql Query Borwser上で)。 同じくutf-8設定のRubyデータが文字化けしてないので、mysql内での設定は問題ないはず。 いろいろやってためしたところ、次の方法で一発解決。 $pdo = new PDO("mysql:host=localhost; dbname=phptest", "root", "pass"); $stmt = $pdo -> query("SET NAMES utf8;"); $stmt = $pdo->prepare("insert into hoge(name, count)values(:name, :count)"); : $stmt = $pdo -> query("SET NAMES utf8;");が重要。php.iniにcharset関係の設定は不要
[CakePHP2.2.3] CakePHP2.xから、app/tmp/cache/modelsやapp/tmp/cache/persistent内のキャッシュファイルが生成される際に、パーミッションの問題で以下のようなエラーが出ることが多いです。 Warning: SplFileInfo::openFile(/www/app/tmp/cache/persistent/cake_core_cake_console_) [splfileinfo.openfile]: failed to open stream: Permission denied in /www/lib/Cake/Cache/Engine/FileEngine.php on line 292 この問題はファイル所有者とアクセスユーザーが違うので発生しているのですが、umaskを設定することで解決できます。 実際のコードは、c
phpの絶対パスを調べる # which php /usr/bin/php CRONTABを編集 # crontab -e 毎時10分後ごとに起動 10 * * * * /usr/bin/php /var/webdata/www/test.php 確認 # crontab -l 10 * * * * /usr/bin/php /var/webdata/www/test.php cronのログ確認 cat /var/log/cron PHPを記述する場合の注意点 ブラウザで動かす場合は、動作したphpフォルダがカレントディレクトリになるが cronの場合はホストのrootになる そのため、fwriteなどでファイルを生成する場合は /var/webdata/www/data.php とフルパスを書かなければならない
<?php $strlen_test1= "日本語"; $strlen_test2 = "English"; $strlen_test3 = "日本語English"; //文字列のバイト数をカウントする。 print strlen( $strlen_test1 ) . "\n"; //6 print strlen( $strlen_test2 ) . "\n"; //7 print strlen( $strlen_test3 ) . "\n"; //13 //文字列の文字数をカウントする。 print mb_strlen( $strlen_test1 ) . "\n"; //3 print mb_strlen( $strlen_test2 ) . "\n"; //7 print mb_strlen( $strlen_test3 ) . "\n"; //10 ?>
補足 この記事は旧徳丸浩の日記からの転載です(元URL、アーカイブ、はてなブックマーク1、はてなブックマーク2)。 備忘のため転載いたしますが、この記事は2011年1月27日に公開されたもので、当時の徳丸の考えを示すものを、基本的に内容を変更せずにそのまま転載するものです。 補足終わり 橋口誠さんから今話題の書籍パーフェクトPHP (PERFECT SERIES 3)を献本いただきました。ありがとうございます。このエントリでは同書のCSRF対策の問題点について報告したいと思います*1。 本書では、CSRFの対策について以下のように説明されています(同書P338)。 CSRFへの対応方法は、「ワンタイムトークンによるチェックを用いる」「投稿・編集・削除などの操作の際にはパスワード認証をさせる」などがあります。一番確実な方法は両者を併用することですが、ユーザ利便性などの理由から簡略化する場合で
ページング機能というのは、「複数に分かれたページの前後ページへ移動するためのナビゲーションリンク」のことで このブログにも下の方に次のページへ移動させるためのページ番号リンクがありますよね。それです。 名称はページングだったりページネーションだったりしてますが、海外だとpaginationの方が一般的なようです。 先頭の何ページ目かまではページ番号、それ以上は三点リーダーとかでぼかしたりするGoogleライクなものや、 前後への矢印だけしか表示させなかったりするものなど、スタイルは色々ありますが これが自作しようとすると結構面倒臭い。そしてプログラミング初心者だとまず仕組みが良く分からない。 結構よく使うのに作り方や仕組みの解説をあんまり見ない気がするので書いてみます。 10周年記念にVue.js版を書きました! [Vue] ページネーション機能の作り方とコンポーネント作成入門 2019/
禁則処理つきはこちら。 PHPで文字列の折り返しと禁則処理 - メモ用紙 組み込み関数 mb_strimwidth を使ってシンプルに。欧文の単語の途中でもずばっと分割しちゃいます。 <?php function ja_wordwrap($string, $n, $break = "\n") { $a = array(); $lines = explode("\n", $string); foreach ($lines as $line) { $len = mb_strlen($line); if ($len == 0) { $a[] = ''; } $p = 0; while ($p < $len) { $t = mb_strimwidth($line, $p, $n); $a[] = $t; $p += mb_strlen($t); } } return implode($break,
セッションとは Webアプリケーションにおけるセッションとは、「ユーザーのアクセスに対してユーザー毎に変数を保持する」、「複数のページ間で、変数の共有を可能にする」とあります。Webサイトを訪れた訪問者が行う一連の行動や、その行動を通じてやり取りされる情報などがセッションにあたります。 PHPでは、セッションを理解することが重要なポイントになるので、ここではセッション管理の仕組みを分かりやすく解説していきます。 クッキーの章でも解説しましたが、Webデータのやり取りには、HTTPプロトコルというWebブラウザとWebサーバ間で交わされるインターネットプロトコルが使用されています。HTTPプロトコルには、状態を保持する機能がなく、ユーザー(ブラウザ)が連続的に複数回のアクセス(Webページの表示)をしても、サーバ側はそれを特定のユーザーの連続したアクセスと認識せず、複数のユーザーが複数回
データベースに接続する PDOでデータベースに接続するには、PDO クラスを使用します。接続に成功するとオブジェクトが返されます。 オブジェクト = new PDO( 'データベースの種類:dbname=データベース名;host=接続先アドレス', 'ユーザー名', 'パスワード' ); MySQLに接続する場合、データベースの種類は mysql を指定します。もしPostgreSQLに接続したければ pgsql、SQLiteに接続したければ sqlite を指定します。他にも、色々な種類のデータベースに接続することができます。 接続に失敗するとPDOは「例外」を発生させます。これは try と catch を使用すれば補足することができます。具体的には try { チェックしたい処理 } catch (PDOException $e) { 例外が発生したときの処理 } という形式になりま
PHP界で流行っているパッケージ依存管理ツールComposerですが、使っているでしょうか。似たようなツールはだんだん淘汰されてComposerに一本化され、PEARより盛り上がっている感じです。 がしかし。個人的に使った感触では、表題の通り、検索が遅くてたまらんです。(前からそうだったと思うんですが、一向に改善されないばかりか悪化しているのでは?) 実行するマシンのスペックに依存しますが、手元にあるVMPlayer上で動かしているしょぼいFreeBSDだと、composer search phpunitするだけで2分ほど動きが止まります。PackagistのWeb UI上で検索すると一瞬で結果が返ってくるのに。。 Composerにはcomposer initという、composer.jsonを対話的に作るコマンドがありますが、使いたいライブラリを一つ検索するたびに数分待たされるので、非
これからのPaaS注目株であるDotCloudを遅ればせながら少し試してみました。つい最近ベータ期間を終了し、正式サービスを開始したとのことです。ヒゲのおじさまカッコイイ。 * [追記] 各ミドルウェアも使ってみました。続きの記事はこちら。 DotCloudでのMySQL,Redis,MongoDBの使い方 DotCloudの特徴としては上のビデオや下の図を見て分かるように、プログラミング言語やミドルウェアを選択できるという点です。つまりユーザーはこれらの技術を自由に組み合わせてシステムを構築することができます。これはGAEやHerokuなど利用技術に制限のあるPaaSとの大きな違いです。 公式のチュートリアルを読めば使い方はすぐわかるのですが、一応ここでもデプロイまでの手順を簡単に追ってみます。先日のRubyKaigiの興奮冷めやらぬ今、利用言語はRubyで。 と言いつつ、DotClou
このページについての説明・注意など PHP は、Apache モジュールや、CGI、コマンドラインとして使用できるスクリプト言語です。このページでは、主に PHP における、Web アプリケーションのセキュリティ問題についてまとめています。 Web アプリケーションのセキュリティ問題としては、以下の問題についてよく取り挙げられていると思いますが、これらのセキュリティ問題について調べたことや、これら以外でも、PHP に関連しているセキュリティ問題について知っていることについてメモしておきます。 クロスサイトスクリプティング SQL インジェクション パス・トラバーサル(ディレクトリ・トラバーサル) セッションハイジャック コマンドインジェクション また、PHP マニュアル : セキュリティや、PHP Security Guide (PHP Security Consortium) には、PH
こんにちはこんにちは!! Webプログラミングしてますか! よく「PHPはセキュリティがダメ」とか言われてるよね。 でもそれって、べつにPHPが悪いんじゃなくて、 たぶん、セキュリティとかが、まだよくわからない人が多いだけなんじゃないかな。 がんばって勉強しようと思っても、なんだか難しい理屈が並んでいたりするしね…。 なので今日は、セキュリティ対策について、 「これだけやっとけば、わりと安全になるよ」ってことを、初心者むけに、大雑把に書いてみます! 理屈がわからなくても、最初はコピペでも、 なにもやらないより、やったほうがきっとマシになる! 1. XSS対策 動的なものを表示するとき、全部エスケープすればokです! (NG) あなたの名前は <?= $name ?> ですね! ↓ (OK) あなたの名前は <?= htmlspecialchars($name, ENT_QUOTES) ?>
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く