カテゴリー: CodeIgniter

CodeIgniterで「Disallowed Key Characters. __utmt_~1」

「Disallowed Key Characters. __utmt_~1」

CodeIgniterで作成したシステムで上記のエラーが
出るようになった。

原因は1ページ内にGoogle Analyticsのタグを複数
記述してしまったことが原因らしい。

タグを1つにして「~」のついているCookieを削除して解決。

ただCookieに入った「__utmt_~1」の「~」の影響で
「Disallowed Key Characters.」が出るのが気持ち悪い。。

Input.phpの「_clean_input_keys」に「~」を追加するやり方を
してる人もいた。

Disallowed Key Characters – Codeigniter urgent
http://stackoverflow.com/questions/26145721/disallowed-key-characters-codeigniter-urgent

Hunting Down the CodeIgniter “Disallowed Key Characters” Error
http://wejn.com/blog/2014/10/hunting-down-the-codeigniter-disallowed-key-characters-error/

さくらインターネットでPHPファイルをhtml拡張子で動かす

さくらインターネットでPHPファイルをhtml拡張子で動かす

久々にはまったのでメモ。
↓こんなエラーやInternalが出て全然動かなかった・・・。

Not Found
The requested URL /php.cgi/index.html was not found on this server.

マルチドメイン運用の場合です。

↓ここ以下でhtmlの拡張子でphpを動かしたい。

/home/ユーザ名/www/secure/

■まずphp.cgiを設置する。
最初FTPでアップしたてりしたけどそれがいけないようだったのでsshでログインしてコピーした。
使うPHPのバージョンは諸事情により5.2・・・。

cp /usr/local/php/5.2/bin/php-cgi-mysql5.1 /home/ユーザ名/www/secure/php.cgi

権限も振っておく。

chmod 705 /home/ユーザ名/www/secure/php.cgi

■.htaccessを設置
実際にhtmlをphpとして動かすフォルダに以下の内容の「.htaccess」を設置。

DirectoryIndex index.html index.php
Action myphp-script /php.cgi
AddHandler myphp-script .php .html

これで動いた。

みんながSSHでコピーしろって書いてあるのにFTPでいけるだろとか
思ってたのがいけませんでした。。

■参考URL
さくらサーバでhtmlをphpとして扱う方法

さくらインターネットで拡張子がhtmlのファイルでPHPを実行する方法

さくらのインターネット(拡張子HTMLでPHPを実行する)

■さくらインターネットにCodeIgniterを設置する

ついでに、、さくらインターネットにCodeIgniterのプログラム置いたら「No input file specified」出た。

CodeIgniterでNo input file specifiedの対処法

上記をみて対応。。

GDとImageMagickでリサイズ時の画質の比較

CodeIgniter1.7.3の画像操作クラス「image_lib」でgd2を使って画像をリサイズしてましたが、
なんか元画像と較べると色が少し変と言われてので調査。

qualityを100にしても少し色が違うと・・・。

少し調べると以下のようなサイトが・・・。

GDとImageMagickの画質比較(Asial blog)
GDとImageMagick比較(プログラミングを始める10の理由)

ImageMagickのほうが画質はいいんですね。

で、image_libではGD/GD2、NetPBM、および ImageMagickに対応しているようなので
ImageMagickに変更してみた。

※以下メモ。処理は少し省いています。ファイルアップロード部分とか。

$data = $this->CI->upload->data();

$this->CI->load->library('image_lib');
$config = array();
$config['image_library'] = 'imagemagick';
$config['library_path'] = '/usr/local/bin/convert';
$config['source_image'] = $data['full_path'];
$config['maintain_ratio'] = TRUE;
$config['quality'] = 100;
$config['master_dim'] = 'auto';
$config['new_image'] = $data['file_path'] . $data['raw_name'] . "-" . $size . $data['file_ext'];

$setting = $this->CI->config->item('resize');

if($data['image_width'] >= $data['image_height']) {
    $config['width'] = 400;
    $config['height'] = 240;
} else {
    $config['width'] = 240;
    $config['height'] = 400;
}

$this->CI->image_lib->initialize($config);
$this->CI->image_lib->resize();
$this->CI->image_lib->clear();

だいたい上記の用な感じでリサイズしたら元画像と比較しても遜色の無い
綺麗な画像ができました。

※ちなみに上がgd2下がimagemagickです。

わかりずらいけどimagemagickのほうが背景色がより白く元画像に近い。。

ブログだとおなじみ見えるかも。。

CodeIgniter xss_cleanの謎

ぺらたんからのタレコミ。

CodeIgniterの1.7.3や2系でxss_cleanの挙動が不思議らしい。

例えば「EPA&DHA」の文字列をxss_cleanにかけると「EPA&DHA;」となるらしい。

xss_cleanの該当箇所を抜き出して試してみた。

<?php
$str = 'EPA&DHA';

$hash = '901119URL5918AMP18930PROTECT8198';

$str = preg_replace('|\&([a-z\_0-9]+)\=([a-z\_0-9]+)|i', $hash."\\1=\\2", $str);
echo $str . "\n";

$str = preg_replace('#(&\#?[0-9a-z]{2,})([\x00-\x20])*;?#i', "\\1;\\2", $str);
echo $str . "\n";

$str = preg_replace('#(&\#x?)([0-9A-F]+);?#i',"\\1\\2;",$str);
echo $str . "\n";

$str = str_replace($hash, '&', $str);
echo $str . "\n";

$str = rawurldecode($str);
echo $str . "\n";

実行結果

$ php ci_xss_test.php
EPA&DHA
EPA&DHA;
EPA&DHA;
EPA&DHA;
EPA&DHA;
$str = preg_replace('#(&\#?[0-9a-z]{2,})([\x00-\x20])*;?#i', "\\1;\\2", $str);

ここが原因みたい。
&のあと2文字以上なら「;」挿し込む?
ちょっと意味が分かっていない・・・。

そもそもxss対策を全部自前でやってるのはどうなのかな?

ちょっとぐぐってみたら

CodeIgniterのGlobal XSS Filteringには要注意?

CodeIgniter XSS対策

とか出てきた。

あんまり使わないほうがいいのかなー。