アプリに送信される POST データをサニタイズし、ある程度検証する最善の方法を見つけようとしています。
Router に常駐し、__constructor で呼び出されるこの関数を作成しましたif($_POST)
。
private function validatePost()
{
foreach($_POST as $key => $value) {
if(preg_match('/[^a-zA-Z]/', $key))
{
$this->throwError('POST Error', 'Invalid index name.');
return;
}
if(strlen($value) > $this->postLimit && $this->postLimit != -1)
{
$this->throwError('POST Error', 'Posted value to large.');
return;
}
if(substr($key, -2, 2) == 'id' && !is_numeric($value))
{
$this->throwError('POST Error', 'Expected a number, didn\'t get one.');
return;
}
else
{
//$value = urlencode($value);
}
$_POST[$key] = $value;
}
}
わざと少し厳しいですが、自分のフレームワーク全体で作ったルールを守れば問題ありません。
$_POST のサイズを制限すると、いくつかの攻撃を阻止するのに本当に役立つと読んだことがあります。この場合、制限なし/デフォルトの制限に -1 を設定します (ただし、構成ファイルで必要に応じてそれ以下に設定できます)。
現在、意図した機能に到達したときにデコードする最良の方法がわからないため、urlencoding をコメントアウトしました。それをエンコードする必要がありますか?それをデコードする最良の方法は何ですか? おそらく、Controller
私のすべてのクラスが拡張されているかどうかはマスターにありますか?
他の提案は大歓迎です。