2015-10-08 4 views
0

Как предотвратить пользователя от удара URL непосредственно в браузере, так что он не может редактировать запись так:Предотвращение от редактирования записи непосредственно ударять URL в торт PHP

http://localhost/demo_cake/users/edit/7

Мой код редактирования в контроллере, как указано ниже, Пожалуйста, дайте какие-либо предложения:

public function edit() { 

    $id = $this->request->params['pass'][0]; 

    $this->User->id = $id; 

    if($this->User->exists()){ 

     if($this->request->is('post') || $this->request->is('put')){ 

      if($this->User->save($this->request->data)){ 

       $this->Session->setFlash('User was edited.'); 

       $this->redirect(array('action' => 'index')); 

      }else{ 
       $this->Session->setFlash('Unable to edit user. Please, try again.'); 
      } 

     }else{ 

      $this->request->data = $this->User->read(); 
     } 

    }else{ 

     $this->Session->setFlash('The user you are trying to edit does not exist.'); 
     $this->redirect(array('action' => 'index')); 

    } 
    } 

index.php

<h2>Users</h2> 

<!-- link to add new users page --> 
<div class='upper-right-opt'> 
    <?php echo $this->Html->link('+ New User', array('action' => 'add')); ?> 
</div> 

<table style='padding:5px;'> 
    <!-- table heading --> 
    <tr style='background-color:#fff;'> 
     <th>ID</th> 
     <th>Firstname</th> 
     <th>Lastname</th> 
     <th>Username</th> 
     <th>Email</th> 
     <th>Actions</th> 
    </tr> 

<?php 


    //loop to show all retrieved records 
    foreach($users as $user){ 

     echo "<tr>"; 
      echo "<td>{$user['User']['id']}</td>"; 
      echo "<td>{$user['User']['firstname']}</td>"; 
      echo "<td>{$user['User']['lastname']}</td>"; 
      echo "<td>{$user['User']['username']}</td>"; 
      echo "<td>{$user['User']['email']}</td>"; 

      //here are the links to edit and delete actions 
      echo "<td class='actions'>"; 
       echo $this->Html->link('Edit', array('action' => 'edit', $user['User']['id'])); 

       //in cakephp 2.0, we won't use get request for deleting records 
       //we use post request (for security purposes) 
       echo $this->Form->postLink('Delete', array(
         'action' => 'delete', 
         $user['User']['id']), array(
          'confirm'=>'Are you sure you want to delete that user?')); 
      echo "</td>"; 
     echo "</tr>"; 
    } 
?> 

</table> 
+0

Если бы я был вами, я не буду использовать ссылку для редактирования/удаления данных ... вместо этого используйте кнопку. –

+0

BTW Это ваш локальный хост. : P –

+0

, но мне нужно использовать ссылку, и я обновил свой код, чтобы показать, как я использую ссылку. – user3653474

ответ

0

что-то вроде этого

<button type="submit" name="cmd_edit" value="id_here">Edit</button> 
+0

Это не относится к указанной проблеме. – dbarthel

+0

@dbarthel вы знаете, что плохого в обновлении и удалении с помощью строки запроса url? ... любой пользователь может испортить ваши данные, поместив любой идентификатор на url ... лучше всего поставить его на кнопку ... –

+0

, но у меня есть использовать ссылку, и я обновил свой код, чтобы показать, как я использую ссылку. – user3653474

3

Обычно вы бы проверить, если идентификатор пользователя в сессии является тот же идентификатор пользователя из записи, он пытается изменить или идентификатор пользователя в сессии имеет достаточно привилегий, чтобы сделать так, чтобы других пользователей.

+0

Нет i Julio, мне не нужно использовать сеанс здесь, я хочу, чтобы это не позволяло пользователю редактировать записи, введя url в браузере что-то вроде этого: http: // localhost/demo_cake/Users/edit/7. – user3653474

+0

** Первый ** ... мы ничего не видим в вашем 'localhost/demo ...'. Это видно только на вашей машине, поэтому ... никто из нас не знает, что вы пытаетесь показать нам. ** Второй ** - Это то, что вы хотите. Даже если вы еще этого не знаете ... нет способа предотвратить создание GET, пытаясь перейти к действительному URL-адресу или даже выполнить действительный POST, смоделировав действительную форму.Единственное, что вы можете (должны) сделать, это проверить все, что приходит от пользователя. –

0

Вы должны использовать свою собственную функцию isAuthorized(user=null){} и проверить, действительно ли пользователь имеет достаточные права для выполнения этой операции. Посмотрите на Authorization (who’s allowed to access what).

Смежные вопросы