2

ユーザー入力を受け入れるために考えていたコードでこの質問を更新しました。基本的に、ユーザー入力があるため、このコードが SQL インジェクションから安全であることを確認しようとしています。

<?php
$username = "XXXX";
$password = "XXXX";
?>

<font size="+3" face="Verdana">XXXX</font>
<br><br>
<form name="form" action="XXX.PHP" method="get">
<input type="text" name="q" size="60" />
<input type="submit" name="Submit" value="Search">
</form>

<table>

<?

$var = $_GET['q'];

try {
$conn = new PDO('mysql:host=localhost;dbname=XXXX', $username, $password);
$stmt = $conn->prepare("SELECT * FROM XXXX WHERE XXXX LIKE '%$var%' OR XXXX LIKE '%$var%' OR XXXX LIKE '%$var%'");
$stmt->execute(array());

$result = $stmt->fetchAll();

if ( count($result) ) {
foreach($result as $row) {
echo "<tr>";
echo "<td>" .$row['XXXX']. "</td>";
echo "<td>" .$row['XXXX']. "</td>";
echo "<td>" .$row['XXXX']. "</td>";
echo "</tr>";    
}  
} 
else {
echo "No results found.";
}
} 
catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
?>
</table>
4

1 に答える 1

4

悪意のあるユーザーから提供されたデータを適切に処理しない場合にのみ、SQL インジェクションの危険にさらされます。

クエリにはユーザー提供のデータがないため、SQL インジェクション側で何も心配する必要はありません。

検索ボックスの追加

ユーザーが指定した値を SQL クエリに使用した瞬間に、SQL インジェクションにさらされます。したがって、ユーザー提供のデータは慎重に適切に処理する必要があります。検索ボックスの文字列をデータベース クエリに使用しますね。

次に、SQLインジェクションを回避するために文字列を処理する必要があります

データベース アクセスに PHP の PDO を使用する理由

pstが示唆したように、PDO を使用することが推奨される方法です。

このトピックに関するいくつかの優れた記事を次に示します。

mysql_real_escape_string の使用

廃止されました。PHPドキュメントから:

この拡張機能は の時点で廃止さPHP 5.5.0れており、将来的に削除される予定です。代わりに、MySQLiまたはPDO_MySQL拡張子を使用する必要があります。詳細については、こちらも参照MySQL: choosing an API guide and related FAQしてください。この機能の代替手段は次のとおりです。

于 2013-03-23T22:38:46.810 に答える