0

シナリオがあります。誰かが私の Web サイトにいて、たとえばイベントを追加するフォームがあり、次のようなフィールドがあるとします。

<input type="text" name="title" id="title">

その人が F12 開発者ツールを使用して id="title" を id="whatever" に変更したり、id 属性を削除したりした場合、MySQL に何も投稿されないように PHP スクリプトの実行を停止するにはどうすればよいでしょうか?

これが私が持っているブックマーク機能の例です: (フロントエンドフォーム)

<form action="bookmarks.php" method="post" enctype="multipart/form-data">
  <div class="control-group">
    <label class="control-label" for="input-mini">Title*</label>
    <div class="controls">
       <input class="span12" id="title" name="title" type="text" placeholder="e.g. Oliver's pet cat...">
    </div>
  </div><!-- /control-group -->
  <div class="control-group">
    <label class="control-label" for="input-mini">Link*</label>
    <div class="controls">
       <input class="span12" id="link" name="link" type="text" placeholder="e.g. http://boopeo.com">
       <input type="hidden" name="parse_var" id="parse_var" value="addbookmark" />
       <br /><input name="submit" type="submit" class="btn btn-success span12" value="Bookmark" /></form>

バックエンド PHP:

if (isset($_POST['parse_var'])){
             $parser = $_POST['parse_var'];
             $parser = htmlspecialchars($parser);
    if ($parser == "addbookmark"){


             $title = $_POST['title'];
             $title = htmlspecialchars($title);
             $linkurl = $_POST['link'];
             $linkurl = htmlspecialchars($linkurl);

    $sqlrecentmark = $db->query("SELECT link_url FROM tablenamehere WHERE mem_id='$id' ORDER BY id DESC LIMIT 20");
    while($row = $sqlrecentmark->fetch(PDO::FETCH_ASSOC)) {
      $recent_link = $row["link_url"]; 
    }

    if ( $linkurl != $recent_link ){
         $dataact = array( 'mem_id' => $id, 'title' => $title, 'link_url' => $linkurl );  

    $sqlactivity = $db->prepare("INSERT INTO tablenamehere (mem_id, title, link_url) value (:mem_id, :title, :link_url)");  
    $sqlactivity->execute($dataact);
    } else {
        $not_msg = '<br /><br /><div class="alert alert-error">Oops! You have added that bookmark before. Just look and you shall find!</div>';
    }
    }
    }
4

2 に答える 2

1

ユーザーからのデータを決して信頼しないでください。常にサニタイズして検証します。優れた準備済みステートメントを使用しているため、ほとんどの場合、インジェクションから保護されます。もう 1 つは、ユーザーが送信したデータが期待どおりのものかどうかを判断することです。一致する場合は、データベースでの使用に進みます。(ほとんどの場合、あなたはこれを行っているので、正直なところ、悪意のあるユーザーからの悪影響はないはずです)

于 2013-07-19T22:17:57.360 に答える