0

ユーザーがフォームに Name と Password の 2 つの変数を入力できるようにしたいと考えています。入力値への XSS またはスクリプトの挿入を無効にしたい。フォームメソッドに次のコードがあります。

<form name="form1" method="post" action="checkpw.php">
Your Name:
<table>
  <tr><td><input class="text" name="name" onBlur="capitalize(this);" maxlength=12 type="text" /></td></tr>
</table> 
Password:
<table>
  <tr><td><input class="text" name="passwd" maxlength=8 type="password" /></td></tr>
  <tr><td align="center"><br/>
     <input class="text" type="submit" name="submitbt" value="Login" />
  </td></tr>
</table>  

および次の checkpw.php:

<?php

// Clean up the input values 
$post = filter_input_array(INPUT_POST, array(
    'name' => FILTER_SANITIZE_STRING,
    'pw' => FILTER_SANITIZE_STRING,
));

if (is_null($post) || in_array(null, $post)) {
    header("location:login.php");
    return; // missing fields (or failed filter)
} 

// pw is the password sent from the form 
$pw=$_POST['passwd'];
$name=$_POST['name'];

if($pw == 'testpass'){
    header("location:index.php");
} else {
    header("location:wrong.php");
}
?>

これは、フォームがサーバーに送信され、入力値がサニタイズされた後にのみ実行されることを保証する安全な方法ですか?

また、index.php ファイルに渡したい $name 値。次のように index.php にコードを挿入します。

<?php echo $name ?>

しかし、それは空です。それを解決する方法はありますか?

4

2 に答える 2

2

を発行しheader( .. )ています。つまり、別のページにリダイレクトして最初からやり直すことを意味します。

次の 3 つのオプションがあります。

  • $name をセッションに入れます。
  • 次のように、ヘッダー関数で $name を渡します header("location: index.php?name=$name");
  • リダイレクトせず、php ファイルをインクルードします。その場合、セッションはまったく必要ありません。ブラウザへの往復が必要ないため、高速になります。

消毒に関しては、まずそれで十分です。後でデータをどうするかによって異なります。データをデータベースに入れて、何をすべきかをより詳細に調べることをお勧めします。

于 2012-09-05T15:15:11.760 に答える
1

これmagic_quotes_gpcまでにほとんどのサーバーでを無効にする必要があります。ただし、この記事を読んで、それらを無効にする他の方法を確認してください。

filter_input_array()さらに、この目的のために(PHP> = 5.2)を使用できます。

$post = filter_input_array(INPUT_POST, array(
    'name' => FILTER_SANITIZE_STRING,
    'pw' => FILTER_SANITIZE_STRING,
));

if (is_null($post) || in_array(null, $post)) {
    return; // missing fields (or failed filter)
}

// you can safely use $post['name'] and $post['pw'] here
于 2012-09-05T15:31:20.630 に答える