PHP怎么过滤GET或者POST的参数?怎么样才能保证代码不被注入? 请问PHP怎么过滤GET或者POST的参数?防止js注入,或者一些html注入?请请提供代码参考?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 开启魔术转换可以过滤很多了,要怎么防,看看wordpress吧,你可以了解一些! 直接查查 魔术转换 相关东西吧不用去看wordpress了,学这么个东西还要去看wordpress,搞死人啊 addslashes($_POST);addslashes($_GET); if (!get_magic_quotes_gpc())//如果没有开启的话{ /****需要对这几个数组,遍历,注意数组多维的情况,addslashes($str)就可以 $_GET $_POST $_COOKIE $_REQUEST ****/} 看看wordpress好处还是有的。addslashes不能阻止所有情况。 addslashes基本上可以防止所有的sql注入了。防止js注入,直接把<和>替换了就可以了 如果传递的是数值,用ceil($_get['okid']),应该可以防范得住。 if (!get_magic_quotes_gpc()) { !empty($_POST) && Add_S($_POST); !empty($_GET) && Add_S($_GET); !empty($_COOKIE) && Add_S($_COOKIE); !empty($_SESSION) && Add_S($_SESSION);}!empty($_FILES) && Add_S($_FILES);function Add_S(&$array){ if (is_array($array)) { foreach ($array as $key => $value) { if (!is_array($value)) { $array[$key] = addslashes($value); } else { Add_S($array[$key]); } } }}过滤js的,直接把变量内容里的<>替换掉就可以了。不用写在这里面 <?phpif (!get_magic_quotes_gpc()){ foreach($_POST as $key => $value){ $_POST[$key] = addslashes($val); } foreach($_GET as $key => $value){ $_GET[$key] = addslashes($val); }}?> 使用这个可行?这个就直接放到一个公共文件里面供所有页面调用,这样过滤行不行?/* 过滤所有GET过来变量------------------------------------------------------------- */ foreach ($_GET as $get_key=>$get_var) { if (is_numeric($get_var)) { $get[strtolower($get_key)] = get_int($get_var); } else { $get[strtolower($get_key)] = get_str($get_var); } } /* 过滤所有POST过来的变量 */ foreach ($_POST as $post_key=>$post_var) { if (is_numeric($post_var)) { $post[strtolower($post_key)] = get_int($post_var); } else { $post[strtolower($post_key)] = get_str($post_var); } } /* 过滤函数 */ //整型过滤函数 function get_int($number) { return intval($number); } //字符串型过滤函数 function get_str($string) { if (!get_magic_quotes_gpc()) { return addslashes($string); } return $string; } $str = "Is your name O'reilly?";// 输出:Is your name O\'reilly?echo addslashes($str); 过滤html标签的是php内置函数:strip_tags(),转义html标签的是htmlspecialchars() if (!get_magic_quotes_gpc()) { !empty($_POST) && Add_S($_POST); !empty($_GET) && Add_S($_GET); !empty($_COOKIE) && Add_S($_COOKIE); !empty($_SESSION) && Add_S($_SESSION);}!empty($_FILES) && Add_S($_FILES);这段没理解,谁帮忙解释下。 //本人在 TP 框架中的过滤函数。// Input 类是 TP 提供的。function inputFilter($content){ if(is_string($content) ) { return Input::getVar($content); } elseif(is_array($content)){ foreach ( $content as $key => $val ) { $content[$key] = inputFilter($val); } return $content; } elseif(is_object($content)) { $vars = get_object_vars($content); foreach($vars as $key=>$val) { $content->$key = inputFilter($val); } return $content; } else{ return $content; }} 反对简单地使用addslashes来过滤输入,这个无法完全解决问题这样全部加上后,在输出的时候你必须再stripslashes, 更麻烦的是你得判断你输出的内容是否是addslashes过的,(比如有些/有时是从数据库来的,有些/有时是外部输入来的)而且这个只能提防sql注入,却又不如mysql_real_escapse_string那样对不同字符集安全.过滤必须针对你的允许输入范围!如果只能输入数字的地方,就过滤掉非数字,只能输入字母的地方,就过滤掉非字母,..... function insert($username, $password){ $username = mysql_escape_string( trim( $username)); .... $query = "INSERT ..."; ... } 请大家推荐个类似下面几个网站的图鉴数据库或者NPC数据库。php的。 phpmailer标题乱码的问题 发个贴子提问。。始终不明白。模版不好改 求一个关于rewrite的很简单的应用 php 中文网页 转换 中文pdf php --with-mysql编译问题 帮忙看下这个程序哪里错了 php如何抓取js动态载入的数据? 关于网站流量的问题 DHL快递有没有提供运费查询APi 哪位写过PHP自动上传本地图片文件到服务器的? Parse error: syntax error, unexpected T_IF in 的问题 期望高手解决
addslashes($_GET);
{
/****需要对这几个数组,遍历,注意数组多维的情况,addslashes($str)就可以
$_GET
$_POST
$_COOKIE
$_REQUEST
****/
}
防止js注入,直接把<和>替换了就可以了
if (!get_magic_quotes_gpc()) {
!empty($_POST) && Add_S($_POST);
!empty($_GET) && Add_S($_GET);
!empty($_COOKIE) && Add_S($_COOKIE);
!empty($_SESSION) && Add_S($_SESSION);
}
!empty($_FILES) && Add_S($_FILES);function Add_S(&$array){
if (is_array($array)) {
foreach ($array as $key => $value) {
if (!is_array($value)) {
$array[$key] = addslashes($value);
} else {
Add_S($array[$key]);
}
}
}
}过滤js的,直接把变量内容里的<>替换掉就可以了。不用写在这里面
if (!get_magic_quotes_gpc()){
foreach($_POST as $key => $value){
$_POST[$key] = addslashes($val);
}
foreach($_GET as $key => $value){
$_GET[$key] = addslashes($val);
}
}
?>
foreach ($_GET as $get_key=>$get_var)
{
if (is_numeric($get_var)) {
$get[strtolower($get_key)] = get_int($get_var);
} else {
$get[strtolower($get_key)] = get_str($get_var);
}
} /* 过滤所有POST过来的变量 */
foreach ($_POST as $post_key=>$post_var)
{
if (is_numeric($post_var)) {
$post[strtolower($post_key)] = get_int($post_var);
} else {
$post[strtolower($post_key)] = get_str($post_var);
}
} /* 过滤函数 */
//整型过滤函数
function get_int($number)
{
return intval($number);
}
//字符串型过滤函数
function get_str($string)
{
if (!get_magic_quotes_gpc()) {
return addslashes($string);
}
return $string;
}
echo addslashes($str);
!empty($_POST) && Add_S($_POST);
!empty($_GET) && Add_S($_GET);
!empty($_COOKIE) && Add_S($_COOKIE);
!empty($_SESSION) && Add_S($_SESSION);
}
!empty($_FILES) && Add_S($_FILES);
这段没理解,谁帮忙解释下。
//本人在 TP 框架中的过滤函数。
// Input 类是 TP 提供的。
function inputFilter($content)
{
if(is_string($content) ) {
return Input::getVar($content);
}
elseif(is_array($content)){
foreach ( $content as $key => $val ) {
$content[$key] = inputFilter($val);
}
return $content;
}
elseif(is_object($content)) {
$vars = get_object_vars($content);
foreach($vars as $key=>$val) {
$content->$key = inputFilter($val);
}
return $content;
}
else{
return $content;
}
}
而且这个只能提防sql注入,却又不如mysql_real_escapse_string那样对不同字符集安全.
过滤必须针对你的允许输入范围!
如果只能输入数字的地方,就过滤掉非数字,
只能输入字母的地方,就过滤掉非字母,
.....
$username = mysql_escape_string( trim( $username));
....
$query = "INSERT ...";
...
}