4

codeiniterでmode_rewriteを使用して、次のようなURLを取得します。

 /controller/param1/param2

ほとんどの場合、param1とparam2はデータベースからのID(つまり、数字)であり、他には何もありません。

問題は、潜在的なハッカー攻撃から保護するために何ができ、何をすべきかということです。そのためにhtml清浄機を使用する必要がありますか、それともより良い方法がありますか、それとも何かをする必要がありますか?

私はセキュリティと保護について本当に新しいです、そして私はちょうどhtml清浄機について聞いたばかりで、初心者がおそらくそうする傾向があるようにどこでもそれを使用したくありません。

preg_match()だけでいいですか?

preg_match()がソリューションの場合、どの式が数値(ID値)のみを受け入れますか?

4

2 に答える 2

2

設定ファイルで見つけることができます

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-+';

これを介して Codeigniter で既に行われているため、preg 一致を使用する必要はありません。たとえば、ユーザーのみを読み取るために表示されていないアイテム ID がある場合など、適切な人物のみがこのリンクにアクセスできることを検証することをお勧めします。コントローラーで特定のチェックを行った後、ルーティングまたはリダイレクトすることでこれを処理できます

ただし、セキュリティはあまり得意ではありませんが、これまでに知っていることは

于 2012-12-20T22:14:35.177 に答える
0

これが codeignitor 固有の質問ではなく、ユーザー入力をスクラブする一般的な方法である場合、簡単な解決策は、SQL を送信する前に値をエスケープして引用することです。

このようなものは動作します (警告: テストされていない PHP コード):

function escapeAndQuoteValue($value, $forceQuote = false) {
    if (is_null($value)) {
        $escapedString = 'NULL';
    } elseif (is_bool($value)) {
        $escapedString = $value ? 'TRUE' : 'FALSE';
    } elseif (isDigits($value) && $value[0] != '0') {
        $escapedString = $value; //return ints verbatim -- unless it has a leading zero
    } else {
        $escapedString = pg_escape_string($value);
    }

    $quoteString = 
        $forceQuote     ||
        is_null($value) || 
        is_bool($value) || 
         (isDigits($value) && $value[0] != '0');

    return $quoteString ? "'$escapedString'" : $escapedString; 

}

于 2012-12-21T00:59:03.163 に答える