超薄框架 - php - 如何防止注射?

时间:2015-01-28 23:21:23

标签: php android security sql-injection slim

作为Android开发人员,我想从Android应用程序准备我的服务器请求。第一个目标是创建用于将项目添加到数据库的请求链接。所以我在Slim framwork的php文件中创建了类似的东西。

我的问题是:有没有机会注入"糟糕的文字"这会导致数据库丢失或通过调用/addEntry做一些不那么糟糕的事情?我怎么能阻止这个?

p.s我希望你跟我说我的意思。

<?php

require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader(); 

$app = new \Slim\Slim();

$app->get(
    '/',
    function () {
        echo "working";
    }
);

ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);

$username = ;
$password = ;
$hostname = ;
$database = ;

$dbhandle = mysql_connect($hostname, $username, $password) or die("Unable to connect to MySQL");

if (!mysql_select_db($database)) {
    die("not connected");
}

//#addEntry
$app->post(
    '/addEntry',
    function () {
        $app = \Slim\Slim::getInstance();
        $cat_id = $app->request()->post('cat_id');
        $ent_name = $app->request()->post('ent_name');
        $ent_description = $app->request()->post('ent_description');

        if ($cat_id == NULL || $ent_name == NULL) {
            $app->halt(400);
        }

        mysql_query('SET CHARACTER SET utf8');
        mysql_query("insert into t_entries VALUES(NULL, '" . $ent_name . "', " 
                . (empty($ent_description) ? "NULL" : "'". $ent_description ."'")
                . "," . $cat_id . ", '0' );");

        return;
    }
);

$app->run();

$app->run();

2 个答案:

答案 0 :(得分:1)

我建议您使用一些现有的ORM,如Doctrine或Eloquent。然后你不必担心用户输入,因为他们正在为你做一切艰苦的工作。

如果您仍想使用本机php函数,请不要使用mysql_connect(),因为它已被弃用。请改用mysqli_connect()。要防止sql注入,请使用mysqli_prepare()准备SQL查询。

此外,您不必这样做:

$app->post('/addEntry',function () {
    $app = \Slim\Slim::getInstance();

您可以使用use关键字将变量传递给闭包:

$app->post('/addEntry',function () use ($app) {

答案 1 :(得分:1)

我建议使用php函数filter_var来清理输入值。除此之外,我建议使用ORM,例如RedBean或Eloquent或Doctrine。如果您想要更轻松,请尝试使用某些库,例如DabbleMedoo。最后,我建议不要使用php本机功能。