【发布时间】:2015-01-28 23:21:22
【问题描述】:
作为一名 android 开发人员,我想为我的服务器准备来自 android 应用程序的请求。第一个目标是创建将项目添加到数据库的请求链接。所以我在 Slim 框架的 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();
【问题讨论】:
-
如果您使用的框架没有内置这种保护,您应该转义用户输入。阅读有关 sql injections 的信息,有很多示例。不推荐使用 mysql 函数。
-
查找
mysql_real_escape_string()作为权宜之计,直到您可以切换库。如果你通过这个函数传递所有将被注入 SQL 的用户输入,你会没事的。参数绑定仍然是要走的路! -
旁白:为什么要给
$app->run()打两次电话?
标签: php android security sql-injection slim