呵呵,继续分析下,高手帮忙喽!
POST的字串:
/od/admin.php?cmd=categories_add &name=%E7%B3%BB%E7%BB%9F%E5%A2%9E%E5%BC%BA&description=%E7%B3%BB%E7%BB%9F%E5%A2%9E%E5%BC%BA&keywords=%E7%B3%BB%E7%BB%9F%E5%A2%9E%E5%BC%BA&parent_id=6&sort=1&Submit=%E6%96%B0%E5%A2%9E&submit=1
<?php
其中%E7%B3%BB%E7%BB%9F%E5%A2%9E%E5%BC%BA为"系统增强",用 urlencode(iconv("GB2312","UTF-8",“系统增强))可得到。
现在看了一下源码中关于写数据库的部分 ,
[php]
if (isset($_REQUEST['submit']))
{
validate_types($_REQUEST, array('name' => 'STR', 'description' => 'STR', 'parent_id' => 'INT', 'order' => 'INT', 'keywords' => 'STR'));
$dbim->query('INSERT INTO '.DB_PREFIX.'categories
SET name = "'.$_REQUEST['name'].'",
description = "'.$_REQUEST['description'].'",
parent_id = "'.$_REQUEST['parent_id'].'",
sort = "'.$_REQUEST['sort'].'",
keywords = "'.$_REQUEST['keywords'].'"');
$success = true;
$categories_add->assign_var('success', $success);
}
?>
在global.php中发现了validate_types函数
<?php
function validate_types(&$array, $names)
{
// Get rid of magic quotes
if (get_magic_quotes_gpc())
{
$array = array_map('stripslashes', $array);
}
// Cycle through array
foreach ($names as $name => $type)
{
// Set types
if (isset($array["$name"]))
{
switch ($type)
{
// Set as integer
case 'INT':
$array["$name"] = intval($array["$name"]);
break;
// Set as float
case 'FLOAT':
$array["$name"] = floatval($array["$name"]);
break;
// string - trim data, strip slashes, banish HTML
case 'STR':
$array["$name"] = mysql_real_escape_string(htmlspecialchars(strip_tags(trim($array["$name"]))));
break;
// string with html
case 'STR_HTML':
$array["$name"] = mysql_real_escape_string(trim($array["$name"]));
break;
// Do nothing, i.e. arrays, etc.
default:
}
}
}
return $array;
}
?>
我思考的方法为当把 %E7%B3%BB%E7%BB%9F%E5%A2%9E%E5%BC%BA POST后经过validate_types后,变成了mysql_real_escape_string(htmlspecialchars(strip_tags(trim("%E7%B3%BB%E7%BB%9F%E5%A2%9E%E5%BC%BA"))));
不过这样得到的值似乎没变,还是%E7%B3%BB%E7%BB%9F%E5%A2%9E%E5%BC%BA。
然后进行INSERT INTO的操作,它的流程应该是这样了,可我这样操作后数据库和前台页面中还是%E7%B3%BB%E7%BB%9F%E5%A2%9E%E5%BC%BA这些字串,根本不是我想的“系统增强”。
希望大家一起帮我分析下,我说错的地方也请不要笑话,
[ 本帖最后由 millken 于 2006-11-25 03:33 PM 编辑 ]