这两天看了不少牛人的东西关于PHP的安全和漏洞。
自己就把以前用到的类给在做修改了下。
<?
//别相信一切输进来的,都要判断下。是不是真的。
function getpage($sql,$page_size=20)//每页20和传过来的sql
{
global $page,$totalpage,$sums; //out param
$page = intval(addslashes($_GET["page"]));//传参数。
//自己过滤下
//判断是不是数字
if(!is_numeric($page)){
echo "<scrīpt>alert('输入的不是数字');history.back();</scrīpt>";
exit;
}
//过滤。。
if(eregi("select|insert|update|delete|/'|///*|/*|/././/|/.//|union|into|load_file|outfile|for|while|when", $page)){
echo "<scrīpt>alert('注意:输入有非法字符');history.back();</scrīpt>";
exit;
}
//过滤:
$name_key = array("//",'&',' ',"'",'"','/','*',',','<','>',"/r","/t","/n",'#','$','(',')','%','+','?',';','^');
foreach($name_key as $value){
if (strpos($page,$value) !== false){
echo "<scrīpt>alert('输入非法或被屏蔽');history.go(-1);</scrīpt>";
exit;
}
}
$pagesql = strstr($sql," from ");//找到第一个FROM的。
$pagesql = "select count(*) as ids ".$pagesql;//查询sql
$result = @mysql_query($pagesql);
if($rs = mysql_fetch_array($result)) $sums = $rs[0];//得到总数
$totalpage = ceil($sums/$page_size);//有小数就进一位。
if((!$page)||($page<1)) $page=1;//判断是不是有第一页。
$startpos = ($page-1)*$page_size; //计算起点。
$sql .=" limit $startpos,$page_size ";//限制起点并要求一页20
return $sql;
}
function showbar($string="")
{
global $page,$totalpage;
//对参数进行过滤。
$string=addslashes($string);
//过滤下
//过滤。。
if(eregi("select|insert|update|delete|/'|///*|/*|/././/|/.//|union|into|load_file|outfile|for|while|when", $string)){
echo "<scrīpt>alert('注意:输入有非法字符');history.back();</scrīpt>";
exit;
}
//过滤:
$name_key = array("//",'&',' ',"'",'"','/','*',',','<','>',"/r","/t","/n",'#','$','(',')','%','+','?',';','^');
foreach($name_key as $value){
if (strpos($string,$value) !== false){
echo "<scrīpt>alert('输入非法或被屏蔽');history.go(-1);</scrīpt>";
exit;
}
}
$out="共<font color='red'><b>".$totalpage."</b></font>页 ";
$linkNum =4;
$start = ($page-round($linkNum/2))>0 ? ($page-round($linkNum/2)) : "1";
$end = ($page+round($linkNum/2))<$totalpage ? ($page+round($linkNum/2)) : $totalpage;
$prestart=$start-1;
$nextend=$end+1;
if($page<>1)
$out .= "<a href='?page=1&&".$string."'title=第一页>第一页</a> ";
if($start>1)
$out.="<a href='?page=".$prestart."&&".$string."' title=上一页>..<<</a> ";
$t='';//初始化。
for($t=$start;$t<=$end;$t++)
{
$out .= ($page==$t) ? "<font color='red'><b>[".$t."]</b></font> " : "<a href='?page=$t&&".$string."'>$t</a> ";
}
if($end<$totalpage)
$out.="<a href='?page=".$nextend."&&".$string."' title=下一页>>>..</a>";
if($page<>$totalpage)
$out .= " <a href='?page=".$totalpage."&&".$string."' title=最后页>最后页</a>";
return $out;
}
?>
<?
//####################################################
//连接数据库类和分页类。
$query="select * from 表 ORDER BY newsId DESC";
$result=getpage($query);//调用的。
$result=$db->command($result);
$total=$db->num_rows($result);
//在在下面显示
//当有参数。将参数放在showbar()这里面。
?>
<? echo showbar();?>
<?
//下面是个搜索条,就是分页查询。即有参数的。。。
##############################################
?>
<form action="你设定.php" name="sousuo" method="get">
<input type="hidden" name="action" value="listdomain" />
<table width="95%" align="center" class="leftmenu">
<tr><td width="60%">帐号:<input name="userno" type="text" id="userno" size="10" maxlength="30" /> </td>
<td width="40%"><input type="submit" name="Submit3" value="查询" />
<input type="reset" name="Submit2" value="重置" /></td></tr></table>
</form>
<?
//在这个里面FORM标签里METHOD尽量设成GET形式。
//得到参数。
$userno=trim($_GET['userno']);//这个地方需要你去过滤。
if($userno!=NULL){
$where = "and agentName like '".$userno."%'";
$query="select * from 表 level<>0"." ".$where." order by addTime desc";
$result=getpage($query);
$result=$db->command($result);
}
?>
<?
echo showbar("userno={$userno}");//这个地方的参数userno将------$userno=trim($_GET['userno']);//这个地方需要你去过滤。
?>
自己就把以前用到的类给在做修改了下。
<?
//别相信一切输进来的,都要判断下。是不是真的。
function getpage($sql,$page_size=20)//每页20和传过来的sql
{
global $page,$totalpage,$sums; //out param
$page = intval(addslashes($_GET["page"]));//传参数。
//自己过滤下
//判断是不是数字
if(!is_numeric($page)){
echo "<scrīpt>alert('输入的不是数字');history.back();</scrīpt>";
exit;
}
//过滤。。
if(eregi("select|insert|update|delete|/'|///*|/*|/././/|/.//|union|into|load_file|outfile|for|while|when", $page)){
echo "<scrīpt>alert('注意:输入有非法字符');history.back();</scrīpt>";
exit;
}
//过滤:
$name_key = array("//",'&',' ',"'",'"','/','*',',','<','>',"/r","/t","/n",'#','$','(',')','%','+','?',';','^');
foreach($name_key as $value){
if (strpos($page,$value) !== false){
echo "<scrīpt>alert('输入非法或被屏蔽');history.go(-1);</scrīpt>";
exit;
}
}
$pagesql = strstr($sql," from ");//找到第一个FROM的。
$pagesql = "select count(*) as ids ".$pagesql;//查询sql
$result = @mysql_query($pagesql);
if($rs = mysql_fetch_array($result)) $sums = $rs[0];//得到总数
$totalpage = ceil($sums/$page_size);//有小数就进一位。
if((!$page)||($page<1)) $page=1;//判断是不是有第一页。
$startpos = ($page-1)*$page_size; //计算起点。
$sql .=" limit $startpos,$page_size ";//限制起点并要求一页20
return $sql;
}
function showbar($string="")
{
global $page,$totalpage;
//对参数进行过滤。
$string=addslashes($string);
//过滤下
//过滤。。
if(eregi("select|insert|update|delete|/'|///*|/*|/././/|/.//|union|into|load_file|outfile|for|while|when", $string)){
echo "<scrīpt>alert('注意:输入有非法字符');history.back();</scrīpt>";
exit;
}
//过滤:
$name_key = array("//",'&',' ',"'",'"','/','*',',','<','>',"/r","/t","/n",'#','$','(',')','%','+','?',';','^');
foreach($name_key as $value){
if (strpos($string,$value) !== false){
echo "<scrīpt>alert('输入非法或被屏蔽');history.go(-1);</scrīpt>";
exit;
}
}
$out="共<font color='red'><b>".$totalpage."</b></font>页 ";
$linkNum =4;
$start = ($page-round($linkNum/2))>0 ? ($page-round($linkNum/2)) : "1";
$end = ($page+round($linkNum/2))<$totalpage ? ($page+round($linkNum/2)) : $totalpage;
$prestart=$start-1;
$nextend=$end+1;
if($page<>1)
$out .= "<a href='?page=1&&".$string."'title=第一页>第一页</a> ";
if($start>1)
$out.="<a href='?page=".$prestart."&&".$string."' title=上一页>..<<</a> ";
$t='';//初始化。
for($t=$start;$t<=$end;$t++)
{
$out .= ($page==$t) ? "<font color='red'><b>[".$t."]</b></font> " : "<a href='?page=$t&&".$string."'>$t</a> ";
}
if($end<$totalpage)
$out.="<a href='?page=".$nextend."&&".$string."' title=下一页>>>..</a>";
if($page<>$totalpage)
$out .= " <a href='?page=".$totalpage."&&".$string."' title=最后页>最后页</a>";
return $out;
}
?>
<?
//####################################################
//连接数据库类和分页类。
$query="select * from 表 ORDER BY newsId DESC";
$result=getpage($query);//调用的。
$result=$db->command($result);
$total=$db->num_rows($result);
//在在下面显示
//当有参数。将参数放在showbar()这里面。
?>
<? echo showbar();?>
<?
//下面是个搜索条,就是分页查询。即有参数的。。。
##############################################
?>
<form action="你设定.php" name="sousuo" method="get">
<input type="hidden" name="action" value="listdomain" />
<table width="95%" align="center" class="leftmenu">
<tr><td width="60%">帐号:<input name="userno" type="text" id="userno" size="10" maxlength="30" /> </td>
<td width="40%"><input type="submit" name="Submit3" value="查询" />
<input type="reset" name="Submit2" value="重置" /></td></tr></table>
</form>
<?
//在这个里面FORM标签里METHOD尽量设成GET形式。
//得到参数。
$userno=trim($_GET['userno']);//这个地方需要你去过滤。
if($userno!=NULL){
$where = "and agentName like '".$userno."%'";
$query="select * from 表 level<>0"." ".$where." order by addTime desc";
$result=getpage($query);
$result=$db->command($result);
}
?>
<?
echo showbar("userno={$userno}");//这个地方的参数userno将------$userno=trim($_GET['userno']);//这个地方需要你去过滤。
?>