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 原生函数。
作为一名 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 原生函数。