从url安全获取id

时间:2012-09-09 10:33:02

标签: php mysql get

我正在创建一个基本博客,我正在使用以下代码。

它正在从网址收集id(总是一个数字),在我使用之前,我想知道是否有人可以检查代码的安全性并让我知道它是否正常?

我真的不想要任何注射等,我希望尽可能保持安全。

<?php
    if(is_numeric($_GET['id']) && $_GET['id'] > 0){

        include("connectionfile.php");

        $ia = intval($_GET['id']);
        $ib = mysql_real_escape_string($ia);
        $ic = strip_tags($ib);

        $qProfile = "SELECT * FROM #### WHERE id='$ic'  ";
        $rsProfile = mysql_query($qProfile);
        $row = mysql_fetch_array($rsProfile);
        extract($row);
        $title = trim($title);
        $post = trim($post);
        $date = trim($date);
        mysql_close();
    }else{
       echo 'hack error here';
    }
?>

3 个答案:

答案 0 :(得分:0)

$ia = intval($_GET['id']);
$ib = mysql_real_escape_string($ia);
$ic = strip_tags($ib);

strip_tags没用,因为它只与HTML上下文相关。其他两种方法中的任何一种都足以阻止SQL注入。通常,只需使用适当的转义机制来处理您正在处理的语言。在这种情况下,你正在处理SQL,所以mysql_real_escape_string就好了。有关转义的逐步方法,请参阅The Great Escapism (Or: What You Need To Know To Work With Text Within Text)

更好的是,使用预处理语句而不是已弃用的mysql_函数来学习PDO,这样可以更好地解决SQL注入问题。

答案 1 :(得分:0)

  1. 请勿使用mysql_个功能。它们已被弃用。使用mysqli或 PDO。
  2. 使用参数化查询
  3. 不要使用“extract”,因为它污染了本地范围。在极少数情况下,它是安全的,通常是ORM内部的,它是安全的 在对象内。这是危险的,否则就像所有形式的那样 可以引入令人讨厌的变量名,特别是成功的 SQL注入。
  4. 执行异常处理,以便数据库错误不会完全破坏页面,并且在通过SQL注入强制查询的情况下,不会显示任何内容以指示查询已损坏。
  5. 即使您执行了以上所有操作,仍然要确保使用htmlentities()或以其他方式验证数据是否符合您的预期。

答案 2 :(得分:0)

这段代码很乱; - )

  1. if语句可以简化为“if(($ id =(int)$ _ GET ['id'])&gt; 0){”
  2. 如果你承认我的1.点,那么可以删除$ ia,$ ib和$ ic
  3. 不修剪()数据库数据!在INSERT进入数据库之前,应该对数据进行评估。
  4. 阅读@FilmJ回答你的内容