作为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();
答案 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)