请问一下PHP中过滤用户名输入的函数

请叫我王哥 项目主管  2009-08-16 10:59:04
我想过滤掉,URL中的危险字符以及用户在表单中输入的危险字符
下面是我用的过滤表单输入的函数
本意是过滤用户输入的危险字符和过滤HTML格式
请问,对不

我用这个函数过滤时,用户输入的内容,比如空格类的全没有了,就是没有格式了

请问这是什么原因?

//过滤注射以及HTML字符
function htmldecode($str){
if(empty($str)) return;
if($str=="") return $str;
$str=str_replace("&","&",$str);
$str=str_replace(">",">",$str);
$str=str_replace("<","<",$str);
$str=str_replace(" ",chr(32),$str);
$str=str_replace(" ",chr(9),$str);
$str=str_replace("&",chr(34),$str);
$str=str_replace("'",chr(39),$str);
$str=str_replace("<br />",chr(13),$str);
$str=str_replace("''","'",$str);
$str=str_replace("select","select",$str);
$str=str_replace("join","join",$str);
$str=str_replace("union","union",$str);
$str=str_replace("where","where",$str);
$str=str_replace("insert","insert",$str);
$str=str_replace("delete","delete",$str);
$str=str_replace("update","update",$str);
$str=str_replace("like","like",$str);
$str=str_replace("drop","drop",$str);
$str=str_replace("create","create",$str);
$str=str_replace("modify","modify",$str);
$str=str_replace("rename","rename",$str);
$str=str_replace("alter","alter",$str);
$str=str_replace("cas","cast",$str);
return $str;
}
...全文
484 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
CYBEREXP2008 2009-08-20
<?php
function unhtml($content)
{
$content=htmlspecialchars($content);
$content=str_replace(chr(13),"<br>",$content);
$content=str_replace(chr(32)," ",$content);

return $content;
}
?>
回复
CYBEREXP2008 2009-08-20
/* 对用户传入的变量进行转义操作。*/
if (!get_magic_quotes_gpc())
{
if (!empty($_GET))
{
$_GET = addslashes_deep($_GET);
}
if (!empty($_POST))
{
$_POST = addslashes_deep($_POST);
}

$_COOKIE = addslashes_deep($_COOKIE);
$_REQUEST = addslashes_deep($_REQUEST);
}
回复
CunningBoy 2009-08-20
[Quote=引用 2 楼 byyy521 的回复:]
楼上的能不能说详细点
也好让我明白
难道PHP用了这个函数
就不用过滤了么

比如注入之类的
[/Quote]
PHP有urlencode这个函数。
防止注入的话,用urlencode先过滤一遍,然后在数据库查询时使用bindParam的方式来传递参数(请参看PHP手册),基本上就可以了。
回复
mlsml 2009-08-20
对于多用户输入多字符过滤可以用
mysql_real_escape_string("用户输入字符串")
回复
请叫我王哥 2009-08-20
不好意思,7楼8楼的代码还没有写完善就发了出去,之后发现错误
却没办法修改
回复
lypfriends 2009-08-20
学习
回复
请叫我王哥 2009-08-20
请问一下,下面这个函数足够安全么?
如果不足够的话,请问怎么修改?

//www.zzcms.com
//过滤POST和GET传递值
function check_str(){
//过滤以GET传递的信息
foreach($_Get as $str_row=>$str){
if(is_numeric($str)){
return intval($str);
}else{
return check_safe_str($str);
}
}
//过滤以POST传递的信息
foreach($_POST as $str_row=>$str){
if(is_numeric($str)){
return intval($str);
}else{
return check_safe_str($str);
}
}
}

//过滤安全字符
function check_safe_str($str){
if (!get_magic_quotes_gpc()) {
return addslashes($str);
}
return $str;
}

回复
请叫我王哥 2009-08-20
请问一下,下面这个函数足够安全么?
如果不足够的话,请问怎么修改?

//www.zzcms.com
//过滤POST和GET传递值
function check_str(){
//过滤以GET传递的信息
foreach($_Get as $str_row=>$str){
if(is_numeric($str)){
return intval($str);
}else{
return check_safe_str($str);
}
}
//过滤以POST传递的信息
foreach($_POST as $str_row=>$str){
if(is_numeric($str)){
return intval($str);
}else{
return check_safe_str($str);
}
}
}

//过滤安全字符
function check_safe_str($str){
if (!get_magic_quotes_gpc()) {
return addslashes($str);
}
return $str;
}
回复
请叫我王哥 2009-08-19
楼上的能不能说详细点
也好让我明白
难道PHP用了这个函数
就不用过滤了么

比如注入之类的
回复
CunningBoy 2009-08-16
用urlencode就可以了,至于"insert"这些有可能是SQL语句的单词可以全部当做字符串来处理。
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告