Tag: php

  • PHP in UTF-8

    To setup PHP for UTF-8

    データベース、スクリプトを記述するファイルの文字エンコーディングはPHPの文字エンコーディングを使用する方が設定が行い易いです。

    default_charset=”UTF-8″

    ダイナミックコンテンツの文字コードセットは必ず指定しなければならない。(セキュリティ上の理由。詳細は 2000年2月のCERTのXSSアドバイザリを参照)

    magic_quotes_gpc=off

    マルチバイト文字エンコーディング環境のみでなく、セキュリティ上も有害であるので必ずoffに設定する。ポータブルなスクリプトの場合、この設定 がonである場合にstrip_slashes()を全ての入力に適用するコードをスクリプトの開始時に実行する。稀に magic_quote_gpc=onである事を前提としているアプリケーションもある。そのようなアプリケーションは使わない方が良い。

    mbstring.input_encoding=”pass”

    現在のブラウザでHTMLを記述した文字エンコーディング以外で文字を送信してくるようなブラウザはない。(携帯などモバイル環境を除く)

    mbstring.internal_encoding=”UTF-8″

    ブラウザから送信される文字エンコーディングはcharsetと同じはず。プログラム側では必ず送信された文字 エンコーディングが正当なUTF-8エンコーディングであるか確認する事。

    mbstring.output_encoding=”pass”

    出力はinternal_encodingで行われる。つまりUTF-8。(携帯などモバイル環境を除く)

    mbstring.language=”japanese”

    言語環境を日本語に設定。mb_send_mail関数などの動作に影響する。

    mbstring.substitute_charactor=””

    入力に変換出来ない文字エンコーディングを含む場合、アプリケーションの実行を停止しなければならない。本来、セキュリティ上不正な文字を削除すべ きではないが、古いPHP(PHP 4.4.2, 5.1.2以下)では文字エンコーディングを確認する仕組みが無い。古いPHPで効率的に不正エンコーディングを検出するには文字列の長さの変化で確認す る。*1

    PHP 5.1.3, 4.3.3以降はmb_check_encoding関数を利用してスクリプトを実行の初期段階で不正エンコーディングを検出することが望ましい。

  • Server upgraded to new Ubuntu 9.04 server

    The website is up, and running on a brand new OS – Ubuntu 9.04 Server. Supercool to configure, has pre-configured LAMP, OpenSSH out-of-the-box.
    Using the UFW was too easy than messing with iptables, or routing.
    Feeling great having refreshed up my home server with a mature OS.

  • PHP code obfuscation possible?

    Today at my project, I was faced with a simple question from the client – How do you ensure that your PHP code is not tampered?

    Honestly, I had no answer. 🙁

    The only ray of hope I thought was – Since PHP is interpreted, is there some compressing, or obfuscating tool out there that can help me?

    One possible solution I came across was encrypting your logic entirely so as unreadable to humans

    http://www.abhishektripathi.com/encrypting-footer-links-free-theme-developers-take-notice/

    Is this failsafe? Can it be still reverse engineered, and original source obtained to defeat the original purpose of protecting your code?

    Anyone to help out there?

  • Using Apache’s mod_rewrite on Windows

    I recently happened to experiment with Apache’s mod_rewrite, an excellent library to change your machine friendly (or perhaps program friendly?) web urls into user friendly urls.

    The steps to make mod_rewrite to work on Windows is-
    – Edit httpd.conf for Apache, and uncomment the following line
    # LoadModule rewrite_module modules/mod_rewrite.so
    -to-
    LoadModule rewrite_module modules/mod_rewrite.so

    – Next, under <Directory “{Your document root}“> change
    AllowOverride None
    -to-
    AllowOverride All

    – Restart Apache

    – Create a sample folder “rewrite” under {Your document root}, with the following files
    {Your document root}
     
    rewrite
        .htaccess
        details.php

    – What we will attempt now is to have a url like http://localhost/rewrite/details/shantibhushan to be automatically executed as http://localhost/rewrite/details.php?user=shantibhushan

    – Edit your .htaccess file as follows
    <IfModule rewrite_module>
     RewriteEngine on
     RewriteBase /rewrite/
     RewriteRule ^details/(.+)$ details.php?user=$1 [L]
    </IfModule>

    – The RewriteRule is the actual line where we specify what url is to be mapped to which actual url. ^details/(.+)$ takes a user friendly url /details/shantibhushan and extracts “shantibhushan” as $1. It then replaces $1 into details.php?user=$1 resulting in details.php?user=shantibhushan as the actual url.

    – Edit details.php as follows
    <?php
    $user= $_REQUEST[‘user’];
    print(“<h1>$user</h1>”);
    ?>

    – The above sample simply takes “user” from details.php?user={user} and shows it back.

    – Done! Try accessing http://localhost/rewrite/details/shantibhushan and you should see details.php getting called with parameter as “shantibhushan”

    TODO
    – Simply accessing details/ results in error, and rewrite rule doesn’t assume such a case. It can be handled by RewriteCond
    – First I wanted to have details:shantibhushan as the url, but this has a bug on Windows not allows : in path. It seems to work fine on non-Windows.
    – The example assumes Apache is running on port 80 on your machine.