doulun1939 2015-04-22 17:46
浏览 62

php - 正确的GET处理

I have file users.php and i want to display user's information when is set for example users.php?id=5

my "users.php" file is:

<?php 

$page_title = "Administrace - Uživatelé";
require_once($_SERVER['DOCUMENT_ROOT']."/core/main.php");

if(!Admin::is_admin() or !User::is_logged()) // check if user is logged and is admin
{
    redirect($url."index.php"); //get out of here
}

$user = new User();

if(isset($_GET["id"]))
{
    $id = test_input($_GET["id"]); // = htmlspecialchars() & trim() & stripslashes()
    $is_valid = ctype_digit($id);
    if($is_valid && $user->check_user_available($id)) // check if $id is number AND if user with the $id is in database
    {
        // show user's information
    } else {
        // get out of here
        redirect($url."admin/");
    }
} else {

?>

        <i>...toto je random text...</i>

        <section>
            <div class="content">
                <h1>Administrace -> Uživatelé</h1>
                <p>
                    <?php 
                    echo ($user->get_all_users()); // get all users (<a href="users.php?id=X">User</a>)
                    ?>
                </p>


            </div>
        </section>
            <aside>
            <?php
            $login = new Panel("login");
            $partneri = new Panel("partners");
            ?>
            </aside>


<?php  } require_once($_SERVER['DOCUMENT_ROOT']."/template/footer.php");?>

my check_user_availabe() function:

<?php
public function check_user_available($id)
{
    $id = trim($id);
    $id = stripslashes($id);
    $id = htmlspecialchars($id);
    if(ctype_digit($id))
    {
        $query = Database::dotaz('SELECT * FROM `users` WHERE `id`=?', array($id));
        if($query > 0)
        {
            return true;
        } else {
            return false;
        }
    }
}
?>

I'm also using PDO prepared statements.. Here is my class database and function dotaz() (dotaz = query)

<?php
class Database {

    // Databázové spojení
    private static $connection;

    // Výchozí nastavení ovladače
    private static $nastaveni = array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
        PDO::ATTR_EMULATE_PREPARES => false,
    );

    // Připojí se k databázi pomocí daných údajů
    public static function connect($host, $username, $password, $dbname) {
        if (!isset(self::$connection)) {
            self::$connection = @new PDO(
                "mysql:host=$host;dbname=$dbname",
                $username,
                $password,
                self::$nastaveni
            );
        }
    }
    public static function dotaz($dotaz, $parametry = array()) {
        $navrat = self::$connection->prepare($dotaz);
        $navrat->execute($parametry);
        return $navrat->rowCount();
    }?>

Could you say me if the $_GET part is well-secured or help me to secure it better ? Thank you all

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
    • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
    • ¥15 手机接入宽带网线,如何释放宽带全部速度
    • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
    • ¥15 ETLCloud 处理json多层级问题
    • ¥15 matlab中使用gurobi时报错
    • ¥15 这个主板怎么能扩出一两个sata口
    • ¥15 不是,这到底错哪儿了😭
    • ¥15 2020长安杯与连接网探
    • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么