• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • WEB自動化測試中針對驗證碼的解決方案(2)

    發表于:2011-12-02來源:未知作者:領測軟件測試網采編點擊數: 標簽:Web自動化測試
    1.1 Xbm圖片格式及其動態生成 x-xbitmap格式的圖片(以下簡稱為Xbm格式)由于其特殊性,是一種廣泛被用于驗證碼的圖片格式。該圖片格式之所以特殊,在于它

      1.1 Xbm圖片格式及其動態生成

      x-xbitmap格式的圖片(以下簡稱為Xbm格式)由于其特殊性,是一種廣泛被用于驗證碼的圖片格式。該圖片格式之所以特殊,在于它并不跟gif,jpg等圖片格式一樣,是一個二進制圖片格式,而是采用ASCII碼來表示圖形——換句話說,它是一個純文本文件,必須由操作系統對其進行解釋才能顯示出相應的圖片。

      以下是一個xbm文件的內容:

      #define counter_width 32

      #define counter_height 10

      static unsigned char counter_bits[] = { 0x3c, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x1c, 0x66, 0xc0, 0xc3, 0x18, 0xc3, 0x60, 0xc3, 0x18, 0xc3, 0x1c, 0xc3, 0x18, 0xc3, 0x60, 0xc3, 0x18, 0xc3, 0xc0, 0xc3, 0x18, 0xc3, 0xc0, 0xc3, 0x18, 0xc3, 0x66, 0x66, 0x18, 0x66, 0x38, 0x7e, , 0x7e };

      初看起來,這個文件和圖形并沒有什么關聯,但如果我們新建一個文件,將以上內容復制到文件內并將其保存為test.xbm,然后打開IE窗口,并將該文件直接拖拽到它上面后,我們會驚奇地發現,仿佛變魔術一樣,顯示出來的并不是這個文件的內容,而是一副圖片(見圖2)。

      熟悉C語言的讀者肯定一眼就能看出,上面給出的xbm文件的內容完全就是C代碼中的一個數組定義。沒錯,xbm文件就是采用了一個數組來表示一幅圖片的。

      在上面的文件內容中,#define counter_width 32 定義的是圖片的以象素表示的寬度,一般來說,8個象素的寬度可以用來表示一個字符,因此這里的32可以用來表示本圖片顯示4個字符。

      #define counter_height 10定義了圖片的高度,表示該圖片中每個字符的高度為10象素。而接下來的數組表示的就是圖片顯示內容的16進制代碼了。

      一個16進制的字節可以表示為8位二進制數據,xbm文件用二進制的1表示一個黑色的象素,用二進制的0表示一個白色的象素,因此,一個字節可以表示8個象素。以上面的xbm文件為例,一個32×10象素的圖片就需要40個字節來表示。xbm文件是按行描述的,對上面的例子來說,每4個字節表示了一行。

      因此,如果我們把上述的數組按照4個字節分組進行排列,就會發現字符和數字之間的對應關系。從圖3可以看到,由于一個字節能夠表示8個象素,而一個圖片上的字符寬度也正好是8個象素,因此,對本例來說,按照4個一組的方式排列,很容易得到數組和圖片上顯示字符的對應關系。

      xbm文件可以表示任意的黑白兩色圖形,而且非常易于生成,因此不少的asp論壇/聊天室的登陸驗證碼都是采用這樣的方法在asp中動態生成的。不過由于攻擊者可以利用這種圖形格式的處理過程中的漏洞,制造一個超大的圖片而導致系統資源耗盡的情況,在Windows XP的SP2以后,就取消了對該圖片格式的默認支持,用戶必須通過修改注冊表才能獲得對該圖片格式的支持。

      1.2 其他圖片格式的驗證碼圖形的動態生成

      xbm圖片文件格式簡單,易于生成,但也存在明顯的不足——因為圖片只能為黑白兩色,因此較為容易被自動工具識別。有鑒于此,目前大部分JSP、PHP和ASP.NET網站都利用這些語言本身提供的圖形函數在運行時生成圖形。

      典型的生成圖形的過程包括以下幾個步驟:

      生成圖形對象;

      用背景色填充圖形對象;

      隨機生成字符串,隨機選擇前景顏色,利用程序語言的圖形庫函數以圖形方式向圖形對象中寫入該字符串;

      向圖形對象中增加隨機產生的點或者線;

      輸出圖片文件頭,輸出圖片文件內容。

      下面是一段使用PHP編寫可以用來產生驗證碼的代碼:

    //生成驗證碼圖片

    Header("Content-type: image/PNG");

    session_start();

    $auth_num="";

    session_register('auth_num');

    srand((double)microtime()*1000000);

    $auth_num_k = md5(rand(0,9999));

    $auth_num = substr($auth_num_k,17,5);

    $im = imagecreate(58,28);

    $black = ImageColorAllocate($im, 0,0,0);

    $white = ImageColorAllocate($im, 255,255,255);

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>