2

入力データのサニタイズは初めてですが、クライアントの数が急速に増加し始めているため、万が一の場合に備えて、すべてのユーザー入力をサニタイズする必要があります。これがベストプラクティスです。

12個のフィールドを投稿するフォームがある場合、それをサニタイズするための最良かつ最も安価な方法は何ですか?

簡単にするために、私が持っているとしましょう

$one = $_POST['one'];
$two = $_POST['two'];
$three = $_POST['three'];
$four = $_POST['four'];
$five = $_POST['five'];

編集: ここで-これはメタデータの下でデータベースに挿入されています。それから私は

それから私はただ呼んでいます

printf('The input for One is ' .$theNewVarForOne. '!');

しかし、そこには悪意のあるコードの可能性があります。すべてのiffy入力を取り除く最良の方法は何ですか?

編集:

もっと具体的にすべきだった。私は基本的に、データベースに保存されるいくつかの「投稿」データを作成しています。タイトル、日付、本文など。

4

2 に答える 2

3

画面に印刷する場合は、HTMLspecialcharsで問題ありません。

echo htmlspecialchars($_POST['one']);

潜在的な悪意のあるJavaScriptとHTMLを次のような文字に変換<して、ソースコードにテキストとして表示し(実行できないことを意味します)、ユーザーには画面に表示された元の入力のように見せます。

<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;
?>

一方、データベースに挿入する場合は、追加の作業を行う必要があります。

データベースに挿入するときは、プリペアドステートメントを使用する必要があります(これにより、データベースに対してSQLを使用してファンキーなことを行う人を防ぐことができます)。私は接続を確立するためにPDOを使用することを好みます。

コードは次のようになります(prepareのドキュメントから抜粋

<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();
$sth->execute(array(':calories' => 175, ':colour' => 'yellow'));
$yellow = $sth->fetchAll();
?>
于 2012-08-18T22:49:51.377 に答える
0

データベースに挿入する場合は、Fluffehの方法を使用することをお勧めしますが、手っ取り早い回避策はmysql_real_escape_stringを使用することです。

于 2012-08-18T23:13:17.447 に答える