<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Lambda的 forEach 慎用,因為沒辦法跳出循環體啊

    VSole2022-08-12 17:27:49

    01、情景展示

    如上圖所示,我們想要終止for循環,使用return。

    執行結果如下:

    我們可以看到,只有趙六沒被打印出來,后續的數組元素依舊被執行了。

    也就是說,關鍵字"return",在這里執行的效果相當于普通for循環里的關鍵詞continue"。

    02、原因分析

    我們知道,在普通for循環里面,想要提前結束(終止)循環體使用"break";

    結束本輪循環,進行下一輪循環使用"continue";

    另外,在普通for里,如果使用"return",不僅強制結束for循環體,還會提前結束包含這個循環體的整個方法。

    而在Java8中的forEach()中,"break"或"continue"是不被允許使用的,而return的意思也不是原來return代表的含義了。

    我們來看看源碼:

    forEach(),說到底是一個方法,而不是循環體,結束一個方法的執行用什么?當然是return啦;

    java8的forEach()和JavaScript的forEach()用法是何其的相似,感興趣的可以去了解下(在文末)。

    Java不是萬能的,不要再吐槽它垃圾了。

    03、解決方案

    方案一:使用原始的foreach循環

    使用過eclipse的老鐵們應該知道,當我們輸入:foreach,再按快捷鍵:Alt+/,就會出現foreach的代碼提示。

    如上圖所示,這種格式的for循環才是真正意義上的foreach循環。

    在idea中輸入,按照上述操作是不會有任何代碼提示的,那如何才能在idea中,調出來呢?

    for循環可以提前終止。

    方式一:break

    方式二:return(不推薦使用)

    方案二:拋出異常

    我們知道,要想結束一個方法的執行,正常的邏輯是:使用return;

    但是,在實際運行中,往往有很多不突發情況導致代碼提前終止,比如:空指針異常,其實,我們也可以通過拋出假異常的方式來達到終止forEach()方法的目的。

    如果覺得這種方式不友好,可以再包裝一層。

    這樣,就完美了。

    這里,需要注意的一點是:要確保你forEach()方法體內不能有其它代碼可能會拋出的異常與自己手動拋出并捕獲的異常一樣;

    否則,當真正該因異常導致代碼終止的時候,因為咱們手動捕獲了并且沒做任何處理,豈不是搬起石頭砸自己的腳嗎?

    lambda
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    情景展示 原因分析 解決方案 情景展示如上圖所示,我們想要終止 for 循環,使用 return。 執行結果如下:
    前言 1、這篇文章講了什么? 文本圍繞三個問題 lambda會遇到什么攻擊場景 什么情況下,在lambda中讀取到的env環境變量密鑰可以讓我們接管服務器甚至整個賬號 什么情況下,可以通過lambda權限去橫向到其他的EC2服務器 本文會對這三個問題進行解答,并且進行演示
    盡管發現的首個樣本危害不大,但已經能夠看到攻擊者是如何利用云專業知識入侵復雜的云基礎設施。
    JDK8是近年來Java最重要的一次更新。其引入的一系列函數式編程特性,例如lambda表達式,已經被Java開發者廣泛使用。然而,lambda的使用也存在缺陷漏洞以及兼容性等問題。我們針對這些問題開展了實證研究并獲得了重要發現。
    這種新的惡意軟件被Cado安全研究人員稱為Dennia。
    他們直接聯系AWS API,進一步枚舉帳戶,進而收集信息和泄露數據。不幸的是,AWS集群角色錯誤配置,擁有過大的讀取權限。本意是允許讀取特定的S3存儲桶,但權限允許角色讀取帳戶中的一切,這使攻擊者得以進一步了解AWS帳戶,包括Lambda。受影響的AWS帳戶中有不同的Lambda函數,主要與帳戶自動化有關。還有證據表明攻擊者執行了盜取的軟件。
    日本國家級應急響應機構的職能由 NISC 與 JPCERT/CC 共同負責,JPCERT/CC 在惡意軟件分析領域中做了許多探索和實踐。
    根據代碼得出 sb的值為頁碼+時間戳 "page=21652931584"。再次hook Sign函數查看參數和返回值并與fiddler對比。此時已經可以斷定,這個Sign就是翻頁的加密函數 。我們用python實現一下。此時直接調用sign生成加密參數,抓取100頁的值相加得出flag:#!
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类