我是一名php安全菜鸟。我在我的网站上有两件事我查询我的数据库(它只包含有关组成我网站的页面的信息,例如标题,关键字......)
a)我动态创建菜单。我通过url传递一个变量,然后将其舀起并在查询中使用它,如下所示:
User clicks on subpage.php?someid=12
我查询数据库:
if(isset($_GET["someid"])) {
if (preg_match('/[0-9]+/', $_GET["someid"])) {
$input = mysqli_real_escape_string($connect, $_GET["someid"]);
$sql_3 = "SELECT link, title FROM pages WHERE parent_page = ".$input."";
这样安全吗?
b)我有一点关键字搜索。我的数据库表包含带有关键字的文本字段。用户可以在输入字段中输入几个关键字,然后查询数据库:
if(isset($_POST["keywords"])) {
if (preg_match('/^([a-zA-Z\-0-9]+(?:\s|$))+$/', $_POST["keywords"])) {
$input = mysqli_real_escape_string($connect, $_POST["keywords"]);
$sql_8 = 'SELECT id FROM pages WHERE match(keywords) against ("'.$input.'")';
这样安全吗?
感谢您的提示和帮助!
答案 0 :(得分:1)
只需在连接字符串后面添加以下行。
/*Start Security Purpose*/
if (get_magic_quotes_gpc()) {
function stripslashesGpc(&$value)
{
$value = stripslashes($value);
}
array_walk_recursive($_GET , 'stripslashesGpc');
array_walk_recursive($_POST , 'stripslashesGpc');
array_walk_recursive($_COOKIE , 'stripslashesGpc');
array_walk_recursive($_REQUEST , 'stripslashesGpc');
}
//Prevent Sql Injection
$_POST = isset($_POST)?$_POST:"";
array_walk($_POST, function(&$string) use ($conn) { $string = mysqli_real_escape_string($conn, $string);});
/*End Security Purpose*/
您可以查看https://github.com/jewelhuq/Simple-php-crud-project/blob/master/dbconnect.php