Exemple #1
0
function testStrictNameRule($t)
{
    $isSafeTestCase = array(array(true, 'a0_table', 'normal'), array(true, 'A0_TABLE', 'upper case'), array(false, 'a0-table', 'hyphen'), array(false, 'A0_TABLE', 'multi bytes'), array(false, '日本語', 'multi bytes'), array(false, "a0 OR 1=1 ", 'null byte'), array(false, "a0\n OR 1=1 ", 'return'), array(false, "a0; OR 1=1", 'semi coron'), array(false, "a0' OR ''='", 'quote'));
    foreach ($isSafeTestCase as $case) {
        $expect = $case[0];
        $value = $case[1];
        $explain = $case[2];
        $t->ok($expect === StrictNameRule::isSafe($value), $explain);
    }
    $sFromUsNameTestCase = array(array('a0_table', 'a0_table', 'normal'), array('A0_TABLE', 'A0_TABLE', 'upper case'), array(null, 'a0-table', 'hyphen'), array(null, 'A0_TABLE', 'multi bytes'), array(null, '日本語', 'multi bytes'), array(null, "a0 OR 1=1 ", 'null byte'), array(null, "a0\n OR 1=1 ", 'return'), array(null, "a0; OR 1=1", 'semi coron'), array(null, "a0' OR ''='", 'quote'));
    foreach ($sFromUsNameTestCase as $case) {
        $expect = $case[0];
        $value = $case[1];
        $explain = $case[2];
        $t->ok($expect === StrictNameRule::sFromUsName($value), $explain);
    }
    $sFromUsNameArrayTestCase = array(array(null, array("name", "created-on"), "hyphen"), array(null, array("名前", "created_on"), "multi byte"), array(null, array("name 1=1 OR"), "null byte"), array(null, array("name, 1=1 OR"), "semi colon"), array(null, array("name' 1=1 OR"), "quote"), array(null, array("name\n 1=1 OR"), "return"), array(array('name', 'created_on'), array('name', 'created_on'), 'normal'));
    foreach ($sFromUsNameArrayTestCase as $case) {
        $expect = $case[0];
        $value = $case[1];
        $explain = $case[2];
        $t->is($expect, StrictNameRule::sFromUsColumnArray($value), $explain);
    }
}
Exemple #2
0
 public static function getInstance($usTable, $usPkey, $usColumns)
 {
     /*
      * ORマッパーを作ろうとするとやむを得ないと思うのだが、
      * $sTable や $sPkey は遺憾ながら文字列結合でSQL構築に使われる。
      * もしこのクラスを拡張するなら$sTable や $sPkey の安全性に留意せよ。
      * 安全とfool proofのために、以下の仕様になっている。
      * - StrictNameRule::isSafe() は名前として m/^[_a-z0-9]+$/i しか受け付けない
      * - NekoSchema::getInstance() は StrictNameRule をパスした名前しか受け付けない
      * - NekoSchema::__construct() は protected
      */
     $sTable = StrictNameRule::sFromUsName($usTable);
     $sPkey = StrictNameRule::sFromUsName($usPkey);
     $sColumns = StrictNameRule::sFromUsColumnArray($usColumns);
     if ($sTable === null || $sPkey === null || $sColumns === null) {
         return null;
     }
     // all green
     return new NekoSchema($sTable, $sPkey, $sColumns);
 }