【发布时间】:2012-04-04 13:46:56
【问题描述】:
我有针对网站的会话,这就是我使用它们的方式:
$username = CleanMe($_SESSION["username"]);
$password = CleanMe($_SESSION["password"]);
//return clean values
$_SESSION["username"] = $username;
$_SESSION["password"] = $password;
CleanMe 是:
function CleanMe($strWords){
$bad_string = array("select", "drop", ";", "--", "insert","delete",
"xp_", "%20union%20", "/*", "*/union/*", "+union+", "load_file",
"outfile", "document.cookie", "onmouse", "<script", "<iframe", "<applet",
"<meta", "<style", "<form", "<img", "<body", "<link", "_GLOBALS", "_REQUEST",
"_GET", "_POST", "include_path", "prefix", "http://", "https://",
"ftp://", "smb://", "'", "\"");
for ($i = 0; $i < count($bad_string); $i++){
$strWords = str_replace ($bad_string[$i], "", $strWords);
}
return $strWords;
}
现在,使用 mysql_real_escape_string 或我所拥有的 CleanMe 是否更安全?
【问题讨论】:
-
这些值从何而来?它们是否用于数据库查询?如果它们被用于数据库查询,请使用
mysql_real_escape_string,不要重新发明轮子。 -
对于初学者,您的
CleanMe()函数可能应该使用str_ireplace()来区分大小写;虽然我建议最好不要重新发明轮子,而只使用mysql_real_escape_string()。 -
值是用户拥有的用户名和密码。
-
所以如果用户的密码是“dropselect”,它会作为“”进入你的数据库吗?这对我来说似乎不是一个好主意。
mysql_real_escape_string()的编写有很多原因,其中一个原因是这样的函数没有被编写。 -
你指的是什么其他类型的攻击?
标签: php security mysql-real-escape-string