2012-01-16 9 views
3

これは私が今持っているものです。日付をstrtotime()に渡す前に日付を正当/安全にするにはどうすればよいですか?

$date = mysqli_real_escape_string($dbc, trim(date('Y-m-d',strtotime($_POST['date'])))); 

私は、私は$datestrtotime()に渡す前に、合法的な/安全であることを確認する必要があると言われました。それ、どうやったら出来るの?私はhttp://us3.php.net/strtotimeを探しましたが、私が思っているものは本当に私には分かりません。

strtotimeに提出してきれいにする方法を少し詳細に説明できますか?

答えて

3

これは、あなたがしなければならないことからはるかに過剰です。 strtotime()関数は、必要な "検証"をすべて行う必要があります。有効な日付を返します。その後、date()からの出力をトリムまたはエスケープする必要はありません。出力はあなたによって決定されます。ここで私はどうなるのかです:

$date = strtotime($_POST['date']); 
if($date) { 
    $date = date('Y-m-d', $date); 
    //do stuff based on valid date 
} 
else { 
    //handle invalid date. 
} 
+0

私はこのコードを持っているので、私が尋ねる理由は 'echo '

Date Filed:  
';'です。誰かがそうではないと私は言っていたので、 "安全"にしたいと思っています。この状況であなたが示したコードはどのように機能しますか? –

+0

$ row ['date']はどこから来ますか?なぜ私のメソッドが安全であるかについては、 'strtotime()'は文字列を安全に整数に変換することができます。一度入力を渡してしまえば、後で入力に直接アクセスしない限り、それらを気にする必要はありません。私の投稿のifは、 'strtotime()'が失敗し、falseを返すケースを処理することです。 – MrGlass

+0

日付が正しい形式であることを確認することを参照している可能性はありますか。 '12/12/12 'を考えてみましょう。これはstrtotimeに渡されるときにはあいまいです。解決策は、date_create_from_formatを使用するか、またはexplode(または同様の方法)を使用して日付を分割し、非あいまいな形式に再構築することです。 –

5

値を事前にサニタイズする必要はありません。最悪のことは、時刻が有効でないことと、strtotime()がfalseを返すことです(日付ストリングが有効かどうかをチェックすることもできます)。

また、date('Y-m-d')関数の戻り値をトリムしエスケープする理由はありません。末尾の空白やエスケープする必要がある値は返されません。

+0

+1だけでなく、[のstrtotimeのノート](http://uk3.php.net/strtotime#refsect1-function.strtotime-notes)を確認:あなたの形式に応じて、結果が予期しないものになることがあります(特に、米国/ EUの日付)。 – cmbuckley

+0

@Juhana注射の影響を受けませんか? –

+0

@MattRidge注射の種類は? 'strtotime($ x)'は '$ x'の値に応じて' false'か整数を返します。誰もあなたのデータベースを数字で攻撃することはできません。 – JJJ