跳至內容
主選單
主選單
移至側邊欄
隱藏
導覽
首頁
近期變更
隨機頁面
MediaWiki說明
Taiwan Tongues 台語維基
搜尋
搜尋
外觀
建立帳號
登入
個人工具
建立帳號
登入
檢視 JSFuck 的原始碼
頁面
討論
臺灣正體
閱讀
檢視原始碼
檢視歷史
工具
工具
移至側邊欄
隱藏
操作
閱讀
檢視原始碼
檢視歷史
一般
連結至此的頁面
相關變更
特殊頁面
頁面資訊
外觀
移至側邊欄
隱藏
←
JSFuck
由於以下原因,您無權編輯此頁面:
您請求的操作只有這些群組的使用者能使用:
使用者
、taigi-reviewer、apibot
您可以檢視並複製此頁面的原始碼。
'''JSFuck'''(抑是為著欲忌剋話 Fuck 寫作'''JSF \ * ck''')是一種深奧的 JavaScript 程式設計風格。用這款風格寫做的代碼中干焦使用 ` [`、`] `、` ( `、` ) `、` ! ` 和 ` + ` 六種字元。現此程式設計風格的名衍生自從使用較少符號寫代碼的 Brainfuck 語言。佮其他深奧的程式語言無仝,以 JSFuck 風格寫出的代碼無需要另外的編譯器抑是直譯器來執行,無論瀏覽器抑是 JavaScript ia̋n-jín 中的原生 JavaScript 直譯器攏會當直接執行。鑑於 JavaScript 是弱型別語言,編寫者會當用數量有限的字元重寫 JavaScript 中的所有功能,而且會當用這種方式執行任何類型的表達式。 ==緣起== 長谷川陽介(Yosuke Hasegawa)佇二空空九年七月建立一个叫做「jjencode」的網路應用程式,我會當將一切的 JavaScript 代碼透濫為 ` [ ] ( ) ! + , \ " $ . : ; _ { } ~=` 這十八字元的排列組合。 二空一空年一月,佇一个 Web 應用程式安全徛點上的「透濫」版塊內底,舉行一場非正式的競賽。這場競賽的目標是欲予 JavaScript 程式設計共所需要的上少字元降至八个以下(` [ ] ( ) ! + , / `), 這帖文的回覆者設法消除了著 ` , ` 和 ` / ` 字元的需求。截至二空一空年三月,網路頂懸有一个名「JS-NoAlnum」線頂編碼器,伊只使用六字元來透濫 JavaScript。 二空一空年底,長谷川陽介製作一个叫做 JSF \ * ck 的新編碼器,伊只使用六字元來混淆 JavaScript。二空一二年,馬丁 ・ 克萊普佇 GitHub 上建立一个編碼器專案「jsfuck」,並建立了 JSFuck . com 網站,𫞼一个使用這編碼器實現的 Web 應用程式。 ==用途佮安全性== JSFuck 會當用佇咧代碼透濫,一个最佳化版 JSFuck 編碼器已經予人用於混淆 jQuery 代碼,使這一流行的 JavaScript 函式庫會當干焦使用六字元來實現原本的所有功能。 此外,JSFuck 會當用著踅過惡意代碼檢測,而且會當予人用佇跨站指令碼攻擊。因為欠原生 JavaScript 應該有的特徵,類似 JSFuck 的 JavaScript 透濫技術會當幫助惡意代碼踅過入去侵防禦系統抑是內容過濾器。現實中,因為乎 JSFuck 中欠字母數字元,而且 eBay 中的內容過濾器捌存在欠缺,共賣的曾經會當佇𪜶的 eBay 拍賣頁面中樞入任意 JSFuck 指令碼。 ==編碼方式== JSFuck 代碼是躼躼長。佇咧 JavaScript 中,` alert ( " Hello World " ) ; ` 這代碼會致使彈窗並顯示「Hello World」字捾,這代碼的長度為二十一字元。咧使用 JSFuck . com 提供的 JSFuck 透濫程式了後,轉換出對應的仝款效果代碼長度是二石四千六百九十一字元。自本節概述此轉換方式的工課原理。 ===數字=== 數字零使用 ` + [] ` 來構造,其中 ` [] ` 代表空陣列,而且 ` + ` 是一箍加運算子。 數字一則以 ` + ! ! [] ` 抑是 ` + ! + [] ` 來構造,其中 ` ! ! [] ` 抑是 ` ! + [] ` 代表布林值為真(` true `), 前輩的一箍加運算子將真值轉換做數字一。 數字二至九則以將「真」加佮濟改轉換做數值的類似方式來構造。比如講,由 ` true + true ` 這一表達式佇 JavaScript 中輸出結果為二,閣 ` true ` 通好寫作 ` ! ! [] ` 抑是 ` ! + [] `,故二可轉寫作 ` ! ! [] + ! ! [] ` 抑是 ` ! + [] + ! + [] `。 多位的整數則會當將各數位分別表示,並使用串接運算子 ` + ` 進行字串串接。譬如講字捾 ` " 十 " ` 會當表達為兩个陣列串接的形式(` [一] + [零] `), 共各數位替換做對應的 JSFuck 表達式了後,即可將這字串表達為 ` [+ ! + [] ] + [+ [] ] `;若欲共字串轉化做數字,會當共前述的表達式括號抑是括號,並且加一个 ` + ` 運算子,所以,數字值十會當佇咧 JSFuck 中表達為 ` + ( [+ ! + [] ] + [+ [] ] ) `。 ===字母=== 通過使用索引器(即方括號中的數字)的方式,會當存取簡單布林值抑是數值對應字串表示形式(如 ` false `、` true `、` NaN `、` undefined `)中的單字元,而且 JSFuck 會當藉此轉換一部份的字母。此外,轉換另外一部份的字母需要其他的技巧,比如講共字串 ` 一 e 一千 ` 轉換做數字,按呢就會產生無窮大值(` Infinity `), 而且 ` Infinity ` 中的字元會當用取得字母 ` y `。 ===其他構造方法=== 佇咧 JavaScript 中,` Function ` 函式這款構造器會當予人用於觸發執行包含佇字串中的 JavaScript 代碼,當如像執行原生 JavaScript 代碼彼號。比如講,語句 ` alert ( 一 ) ` 等價於 ` Function ( " alert ( 一 ) " ) ( ) `。而且 ` Function ` 構造器佇 JavaScript 中是任何常用函式的 ` constructor ` 屬性,此所講的常見函式指出來是像 ` [] [ " filter "] `(即 Array . prototype . filter)類的函式。所以,這个構造器便會當通過存取一个空陣列的 ` filter ` 屬性下的 ` constructor ` 屬性來構造。比如講,` alert ( 一 ) ` 會當予人等價轉換做 ` [] [ " filter "] [" constructor "] ( " alert ( 一 ) " ) ( ) `,並使用 JSFuck 進一步轉換。 ==備註== '''對於「編碼方式」章節內底的內容:''' ==參考來源== ==外部連結== * [/ / web . archive . org / web / 二十五空一千八百空七孵空一百空三孵一千四百三十九 / http : / / www . jsfuck . com / 頁面存檔備份,存在網路檔案館)JSFuck-Write any JavaScript with 六 Characters : [] ( ) ! + ]–共原生 JavaScript 轉換做 JSFuck 的 Web 應用程式 * Yosuke Hasegawa 創作的 JSF \ * ck 線頂應用 * JSfuck . com 咧用的轉換指令碼 [[分類: 待校正]]
返回到「
JSFuck
」。