PHP安全新闻早8点_1123

//2011-11-23 星期三 
//Cookie篇 
/* 
序 
*/ 
讲起注入,就要从防住入说起,但防注入一般只对QueryString和Form做了防范,却忽略了Cookies,自然,注入就产生了,我们从实战出发。 
//程序员思想 
//Micropoor.asp代码片段 
<%  
//略  
Set rsnews=Server.CreateObject("ADODB.RecordSet")   
sql="update news set hits=hits+1 where id="&cstr(request("id"))  
conn.execute sql  
//略 
%> 
单纯的reuqest(),并没用指定是request.querystring(),还是request.form,或request.cookie (). 
//我们的思想 
[url]http://hi.baidu.com/micropoor/Micropoor.asp[/url]  
javascript:alert(document.cookie="id="+escape("107 and 1=2 union select 1,username,password,4,5,6,7,8,9,10,11 from admin")) 
 
//新闻也发言----Asp程序员要说话 
Request.QueryString (GET) 或 Request.Form (POST)是用于读取用户发给WEB服务器的指定键中的值,但是往往,我们就写成了:ID=Request("ID") 
于是今天的PHP安全新闻早8点也就产生了。 
WEB服务先取GET中的数据,如果没有再取POST中的数据,还有Cookies中的数据.了解了这些,我们回头再看方注入系统。检测GET和POST中的数据(部分带有关键词,select and 等) 
于是就出现了//我们的思想。 
//站在Asp程序员考虑 
如果程序员使用Request.QueryString或者Request.Form是无法利用Cookies绕过防注入系统进行注入的。服务程序是直截从GET或POST中读取数据的,Cookies是否有数据,服务程序是不处理的。 
 
//新闻也发言----.Net程序员要说话 
//程序员思想 
//Micropoor.aspx代码片段 
Response.Cookies["id"].Value = uid; 
//COOKIES记录了用户的ID,当需要用到ID时,就通过用户搜索信息 
if(Request.Cookies["id"]!=null) 
{ 
id=Request.Cookies["id"].value; 
string str="select * from userTable where id="+id; 
//略 
} 
//我们的思想 
Cookies["id"]的值改成Sql;实现COOKIES注入。 
//站在.Net程序员考虑 
加强对ID的过滤,这里对懒程序员说针对数字参数搞了一个类来判断是否为数字 
if(Request.Cookies["id"]!=null) 
{ 
uid=Request.Cookies["id"].value; 
isnumeric cooidesID = new isnumeric();//这是一个类 
if (cooidesID.reIsnumeric(ruid))//如果是数字就运行下面的 
{ 
string str="select * from userTable where id="+id; 
//略 
} 
} 
//参考类: 
public class isnumeric 
{ 
 public isnumeric() 
 { 
  // 
  // TODO: 在此处添加构造函数逻辑 
  // 
 } 
    public bool reIsnumeric(string num) 
    { 
        Regex IsN = new Regex(@"^\d+$");//这里使用正则表达式 
        bool reNum; 
        if (IsN.IsMatch(num)) 
        { 
            reNum=true; 
        } 
        else 
        { 
            reNum=false; 
        } 
        return reNum; 
    } 
} 
//前台调用: 
isnumeric InNum = new isnumeric(); 
            if (InNum.reIsnumeric(id.ToString())) 
            { 
//你的代码  
} 
else 
{ 
                Response.Redirect("Micropoorr.aspx"); 
                Response.End(); 
} 
 
//新闻也发言----Php程序员要说话 
//程序员思想 
//Micropoor.php代码片段 
<?php 
//略 
if (!isset($_COOKIE['userid']) || empty($_COOKIE['userid'])){ 
setcookie(lastURL,get_url());//上次访问地址   
header("Location: login.php");   
}  
?> 
//我们的思想 
通过cookie伪造userid=任意值。 
//程序员思想 
//Micropoor.php代码片段 
<?php 
$cookie = $_COOKIE[admin]; 
if (($cookie == "" OR $_GET[stop] == 1 OR !is_admin($cookie)) && $_GET[op] != "login"&& $_GET[op] != "logout") { 
include("../templates/wr_header.php"); 
echo "Enter admin username and password to log in"; 
//略 
?> 
 
//新闻也学习 
//判断cookies注入的js语句 
javascript:alert(document.cookie="参数= "+escape("参数值 and 1=1"));self.open("http://+"document.location.host+document.location.pathname);void(0); 
javascript:alert(document.cookie="参数="+escape("参数值 and 1=2"));self.open("http://+"document.location.host+document.location.pathname);void(0); 
posted @ 2011-11-21 20:12  noevil  阅读(259)  评论(0编辑  收藏  举报