我一直在使用PHP自定义CMS,直到最近才遇到任何问题.测试时,我注意到字符串已经开始出现在索引页面的顶部.在整个代码中使用一些die语句进行测试,似乎输出是在一个文件包含之间.
档案A.
<?php
if (!defined('IN_CMS'))
{
exit;
}
require(INCLUDE_PATH . '/pages/homepage/main.php');
?>
Run Code Online (Sandbox Code Playgroud)
文件B(包含文件)
<?php
if (!defined('IN_CMS'))
{
exit;
}
$db->sql_query("SELECT * FROM `" . DB_PREFIX . "categories` active = 1");
$cats = $db->sql_results();
$categories = array();
foreach($cats as $cat)
{
$cat_info = array(
'name' => $cat['name'],
'description' => $cat['description'],
'image' => $setting['site_url'] . '/thumbnails/' . $cat['image'],
);
$categories[] = $cat_info;
}
include theme('index');
?>
Run Code Online (Sandbox Code Playgroud)
我无法理解输出的来源,但它似乎介于两个文件之间.我已经ob_start()在文件A中的包含行之前添加,并且ob_end_clean()在包含文件的最开头添加并且输出没有显示,但是在两个文件中的任何地方都没有杂散输出.
我正在为我一直在研究的项目开发一个数据库类.我想知道以下函数是否有任何漏洞或错误,允许有人使用MySQL注入.
public function sql_validate($var)
{
if (is_null($var))
{
return NULL;
}
else if (is_string($var))
{
return "'" . $this->sql_escape($var) . "'";
}
else if (is_bool($var))
{
return intval($var);
}
else
{
return $var;
}
}
Run Code Online (Sandbox Code Playgroud)
这是为字符串调用的函数sql_escape.
private function sql_escape($string)
{
if (!$this->db_connection)
{
return @mysql_real_escape_string($string);
}
return @mysql_real_escape_string($string, $this->db_connection);
}
Run Code Online (Sandbox Code Playgroud)