0

MySQL データベースからのデータが入力されたフォームがあります。フォームを更新/編集するには、そのレコードの主キーを使用したいと考えています。ページが送信されたら、主キーをページに安全に渡すにはどうすればよいですか。私は $_GET を使用したくありません。これは、ユーザーが URL でこれを変更でき、非表示のフォーム フィールドに主キーを埋め込むことも妨害され、html ソースに表示される可能性があるためです。アクションは同じページで実行されています (以下のコード ブロックを参照)。処理は同じページで行われているため、セッションが機能するかどうかはわかりません。

//Load the data from the database
  if(isset($_GET['menu_id'])){
       $menu_id = (int)$_GET['menu_id'];
       $menu = new Menu();
       $menu_item = $menu->get_menu_items_by_id($menu_id);
  }
  else{
       //The user has possibly edited the URL
       $message = "Please select an option to edit";
       redirect_to($PHP_SELF . '?message=' . $message);
  }
?>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>">

<div>
<label>Name</label>
<input type="text" name="name" value="<?php echo $menu_item->name ?>">
</div>


<div>
<label>Title</label>
<input type="text" name="title" value="<?php echo $menu_item->title ?>">
</div>


<div>
<label>Is default page</label>
<input type="radio" name="is_default_page" value="1" 
    <?php 
        if($menu_item->is_default_page == 1) 
            {
            echo "checked"; 
            }?>
     >Yes
<input type ="radio" name="is_default_page" value="0" 
        <?php 
        if($menu_item->is_default_page == 0) 
            {
            echo "checked"; 
            }?>

     >No    
</div>

<div>
<label>Page name</label>
<input type="text" name="page" value="<?php echo $menu_item->page ?>" />
</div>

<div>
<label>Menu type</label>
<select name="menu_type">
    <?php
    //Display the options of the menu types available
    $menu_type_array = $menu->get_menu_types();
    draw_select($menu_type_array, 'name', 'id', $menu->menu_type_id);
    ?>
</select>
</div>

<div>
    <label>Page type i.e what is the page used for</label>
    <select name="page_type">
        <?php
        $page = new Page();
        $page_type_array  = $page->get_page_types();
        draw_select($page_type_array, 'name', 'id', $menu->page_type_id)
        ?>
    </select>
</div>

<div>
    <label>Position</label>
    <select name="position">
        <?php
        //Count the number of menus in the database

        $number_of_menu_items = $menu->count_menu_items() + 1;
        for($i=1; $i<=$number_of_menu_items; $i++){
            echo "<option value=\"{$i}\"";
            if($i==$menu->position){
                echo "selected = \"selected\"";
            }
            echo ">";
            echo "{$i}";
            echo "</option>";
        }

        ?>
    </select>
</div>

<div>
    <input type="submit" value="Add Menu" name="edit_menu" />
</div>


<form>
4

2 に答える 2

2

ここでの懸念は何ですか?はい、ユーザーは編集中のレコードの ID を変更できるため、入力したデータは別のレコードに保存されます。

...

だから何?ユーザーが他のレコードのページに移動して、そこで直接編集するのと何ら変わりはありません。そもそも、ユーザーがレコードの編集を許可されているかどうかを確認するアクセス制御がまだありますよね? また、送信されたデータが特定のレコードに対して有効であることを検証するデータ検証も実施していますよね?

それから、ここでは本当の懸念はありません。ユーザーが特定のレコードを編集できる場合、何らかの方法で編集できます。ID を URL に入れるだけで十分です。

于 2012-09-05T08:44:23.830 に答える
0

ユーザーが $_GET または $_POST データを簡単に変更できる場合、それはセキュリティ上の問題ではありません。実際、表示リクエストのみの場合は $_GET url に配置できます (もちろん、その場合、php コードはユーザーが表示できるようにする必要があります)。データベースに保存されているデータを変更する場合は、datas。

get と post リクエストの目的であり、他のツールで何かを発明しようとしないでください。将来的にそれを機能させ続けることは混乱になるでしょう。

于 2012-09-05T08:44:00.813 に答える