Slim 框架 - php - 如何防止注入?

Slim framework - php - how prevent injections?

作为一名 android 开发人员,我想为来自 android 应用程序的请求准备我的服务器。第一个目标是创建请求 link 以将项目添加到数据库中。所以我在 Slim framwork 的 php 文件中创建了类似下面的内容。

我的问题是:是否有机会注入 "bad text" 这会导致数据库丢失或通过调用 /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();

我建议您使用一些现有的 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) {

我建议使用 php 函数 filter_var 来清理输入值。除此之外,我建议使用 ORM,例如 RedBean 或 Eloquent 或 Doctrine。如果你想更轻松,请尝试使用一些库,例如 Dabble or Medoo。最后,我建议不要使用 php 原生函数。