0

現時点では使用しています。

<html>
<head>
</head>
<body>
<form name="frmSearch" method="get" action="<?=$_SERVER['SCRIPT_NAME'];?>">
  <table width="599" border="1">
    <tr>
      <th>Keyword
        <input name="txtKeyword" type="text" id="txtKeyword" value="<?=$_GET["txtKeyword"];?>">
        <input type="submit" value="Search"></th>
    </tr>
  </table>
</form>
<?
if($_GET["txtKeyword"] != "")
    {


    $objConnect = mysql_connect("XXXXX","XXXX","XXXX") or die(mysql_error());
    $objDB = mysql_select_db("XXXX");
    // Search By Name or Email
    $strSQL = "SELECT * FROM blogs WHERE (title LIKE '%".$_GET["txtKeyword"]."%' or metadescription LIKE '%".$_GET["txtKeyword"]."%')";
    $objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
    $Num_Rows = mysql_num_rows($objQuery);


    $Per_Page = 2;   // Per Page

    $Page = $_GET["Page"];
    if(!$_GET["Page"])
    {
        $Page=1;
    }

    $Prev_Page = $Page-1;
    $Next_Page = $Page+1;

    $Page_Start = (($Per_Page*$Page)-$Per_Page);
    if($Num_Rows<=$Per_Page)
    {
        $Num_Pages =1;
    }
    else if(($Num_Rows % $Per_Page)==0)
    {
        $Num_Pages =($Num_Rows/$Per_Page) ;
    }
    else
    {
        $Num_Pages =($Num_Rows/$Per_Page)+1;
        $Num_Pages = (int)$Num_Pages;
    }


    $strSQL .=" order  by id ASC LIMIT $Page_Start , $Per_Page";
    $objQuery  = mysql_query($strSQL);

    ?>
<table width="600" border="1">
  <tr>
    <th width="91"> <div align="center">CustomerID </div></th>
    <th width="98"> <div align="center">Name </div></th>
    <th width="198"> <div align="center">Email </div></th>
  </tr>
  <?
    while($objResult = mysql_fetch_array($objQuery))
    {
    ?>
  <tr>
    <td><div align="center">
        <?=$objResult["id"];?>
      </div></td>
    <td><?=$objResult["title"];?></td>
    <td><?=$objResult["metadescription"];?></td>
  </tr>
  <?
    }
    ?>
</table>
<br>
Total
<?= $Num_Rows;?>
Record :
<?=$Num_Pages;?>
Page :
<?
    if($Prev_Page)
    {
        echo " <a href='$_SERVER[SCRIPT_NAME]?Page=$Prev_Page&txtKeyword=$_GET[txtKeyword]'><< Back</a> ";
    }

    for($i=1; $i<=$Num_Pages; $i++){
        if($i != $Page)
        {
            echo "[ <a href='$_SERVER[SCRIPT_NAME]?Page=$i&txtKeyword=$_GET[txtKeyword]'>$i</a> ]";
        }
        else
        {
            echo "<b> $i </b>";
        }
    }
    if($Page!=$Num_Pages)
    {
        echo " <a href ='$_SERVER[SCRIPT_NAME]?Page=$Next_Page&txtKeyword=$_GET[txtKeyword]'>Next>></a> ";
    }

    mysql_close($objConnect);

    }   
?>
</body>
</html>

これは問題なく動作しますが、インジェクションや xss 攻撃などに耐えられるように、より安全にしたいと考えています。基本的には、100% 安全にする必要があります。

私はそれを PDO に変更しようとしていますが、これまでのところ次のようになっています。

$stmt = $pdo->prepare('SELECT * FROM blogs WHERE title LIKE = ?');
$stmt->execute($_POST['txtKeyword']);

どちらが正しいと思います.DBとの2つの別々の相互作用として、インジェクションから保護する必要があります(私は思いますか?)

問題は; 1) これを実装する方法がわからない 2) 検索が安全であることを確認するために他に何が必要か

何か助けていただければ幸いです

4

1 に答える 1