안드로이드 개발자로서 안드로이드 앱의 요청을 위해 서버를 준비하고 싶습니다. 첫 번째 목표는 데이터베이스에 항목을 추가하기위한 요청 링크를 만드는 것이 었습니다. 그래서 Slim framwork에 의해 PHP 파일에서 아래와 같은 것을 만들었습니다.Slim framework - 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 인젝션에 대해 읽어보십시오. 많은 예제가 있습니다. 또한 mysql 함수는 더 이상 사용되지 않습니다. – Whirlwind
라이브러리를 바꿀 때까지'mysql_real_escape_string()'을 stop-gap으로 찾는다. 이 함수를 통해 SQL에 삽입 될 모든 사용자 입력을 전달하면 OK가됩니다. 매개 변수 바인딩은 여전히 갈 방법입니다! – halfer
:'$ app-> run()'을 두 번 호출하는 이유는 무엇입니까? – halfer