使用$ _GET更新数据库中的数据是不安全的吗?

use*_*378 2 php security xss get

使用$ _GET来更新/删除MySQL表中的数据是不安全的?

我不能使用$ _POST,因为它需要使用<form>标签

例如:

  <a href="status.php?approve='123'>Unapprove</a>
 <?php   
    if (isLoggedIn() && groupId() == 2) {
     if (isset($_GET['id']) && is_numeric($_GET['id']) {
      $query = $db->prepare("UPDATE table set unapprove='1' where id = :id");
      $query->bindParam(':id', $_GET['id'], PDO::PARAM_STR);
      $query->execute();
     }
    }
?>
Run Code Online (Sandbox Code Playgroud)

请举例说明如何保护我的示例或更好的方法.

Den*_*rdy 5

虽然不受SQL注入的影响,但您所做的事情并不安全,因为需要伪造跨站点请求.

考虑登录到您的网站的效果,并访问具有此图像的另一个:

<img src="yoursite.com/admin/status.php?approve=123" />
Run Code Online (Sandbox Code Playgroud)

理想情况下,始终对非幂等请求使用POST.

无论如何,您需要添加一个特定于会话和链接的秘密令牌:

href="status.php?approve=123&amp;token=[random_stuff]"
Run Code Online (Sandbox Code Playgroud)

顺便说一句,'123'链接应该是123.