如何繞過博客園對 <script> 的屏蔽

来源:https://www.cnblogs.com/conmajia/archive/2019/01/21/bypass-script-filtering.html
-Advertisement-
Play Games

做過小試驗,主要用於美化界面、增強頁面內容交互性,無關安全性討論,一切全靠自覺. ...


Conmajia
January 20, 2019

警告 這是試驗,警告個屁,請不要多多嘗試用它做多餘的事。

果不其然,這篇文章立刻被移出主頁了,我就說嘛,這博客園哪兒會那麼包容和坦然呢?

原文


document.title = "[我是 JS 生成的!] " + document.title

標題其實是有點問題的,會讓人覺得我在搞破壞,找漏洞。NONONO,這是誤會,最多就是想拿 JS 改改預設的主題什麼的。實際上,這種擔心是不存在的。 BKY 本身並沒有屏蔽 JS 腳本,甚至在後臺主動開放了 HTML 許可權,以一個 BK 網站來說,比較良心了。加上現在改成 Markdown 編輯器,還支持文章正文內插入 HTML,整個 BK 的可玩性更高了。

畢竟它壓根兒就沒有擴展功能的插件和可編輯的主題,再不開放許可權還玩您 呢?

只是總有人不小心搞出一些事來,為了網站安全,不得不屏蔽掉文章里的 <script> 標簽。

當然,這功能早在十幾年前就屏蔽了,所以也不關我們鳥事兒

所以現在你如果在文章里寫上 JS,它沒法運行。如果做試驗,你寫:

前面的正文

<script type="text/javascript">
    document.title = Math.random()
</script>

後面的正文

然後把文章發表出來,你會發現這段壓根兒就不顯示、不執行,煙兒似的就消失了,屁反應沒有。

那怎麼辦啊,就沒招改改預設主題了嗎?好些人說,

預設主題也挺好的啊,還有那麼多五顏六色的可以選呢。

您是認真的嗎?啊?預設的那些主題實在是太難看了啊,難道這就是傳說中的程式員的審美觀麽?9021 年了,醒醒,大清已經亡了!村裡通網多少年了,Web 都已經 4.0,5.0,6.0 了,老鐵!

好看嗎?那您還挺淳樸的呢 :)

如果某天你意識到了這一點,精通增刪改查的你也許會想要給自己的 BK 整個容?加點料?刪點自帶的垃圾?在讀者打開你每篇文章時都跳出點不同的東西?

你知道我在說什麼,畢竟你那麼聰明。

—Conmajia

都已經開放 HTML 了,你當然可以用各種姿勢咯美化界面咯,我這個 BK 就有很多東西是代碼生成的。還有一個好處是增強了文章的互動性,提高讀者參與度。比如你要講隨機數,編了無數代碼,作者寫得天花亂墜,讀者看得暈頭轉向:

Math.random()

吧啦吧啦逼逼半天,能有我一個按鈕的效果好?

或者用較小的篇幅展示更多內容?比如點下麵的按鈕:

如何評價程式員的審美?

走進地鐵的一瞬間,大家就感受到了前所未有的尷尬,有人說這是程式員下班了……


$(document).ready(function(){
$("#flip").click(function(){
$("#panel").slideToggle("slow");
});
});

所以現在我來說說怎麼運行文章正文里的 JS 代碼。你知道的,JS 有一個 eval 函數專門 evaluate 字元串形式的代碼。那麼,look at 管理→設置自定義 HTML 的地方:


非常幸運,eval 函數可以執行,這就簡單至極了。既然正文里的 <script> 屏蔽了,改從外圍執行代碼就好啦。舉個例子,在正文里用一個標簽 <run> 包住要執行的代碼,直接 eval

<!-- 頁面底部 HTML 設置 -->
<script>
$(function(){
    $('run').each(function(){eval($(this).text())});
});
</script>

這樣,頁面載入完後,就會依次執行正文里所有 <run> 標簽內的代碼了。美觀一點,可以把所有 <run> 都隱藏起來:

/* CSS 設置 */
run {
    display: none;
}

一開始那個例子改改,文章里寫上:

前面的正文

<run>
    document.title = Math.random()
</run>

後面的正文

發表文章就能看到效果了(↑↑ 你再看看本文的標題欄?):

Safari,macOS 10.14

這不就繞過屏蔽了?但是吧,我給的例子里只簡單地使用了 eval它有時候是不靈光的。因為 Markdown 編輯器會把代碼里的 $*_ 這些特殊符號識別成格式開關,然後把代碼渲染得面目全非,根本沒法用。所以你需要想辦法阻止編輯器解析你的代碼!來看個稍微複雜點的例子

<run>
    $('html').attr('lang', 'zh-CN');
    $('title').text(Math.random() * 100 * 99);
</run>

只有兩句話的代碼,被 Markdown 編輯器解析成了一大堆 HTML 標簽:

<run><br>
  <span class="MathJax_Preview" style="color: inherit; display: none;"></span>
<span class="MathJax" id="MathJax-Element-2-Frame" tabindex="0" style="position: relative;" data-mathml="
<math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;><msup><mo stretchy=&quot;false&quot;>(</mo>
<mo>&amp;#x2032;</mo></msup><mi>h</mi><mi>t</mi><mi>m</mi><msup><mi>l</mi><mo>&amp;#x2032;</mo>
</msup><mo stretchy=&quot;false&quot;>)</mo><mo>.</mo><mi>a</mi><mi>t</mi><mi>t</mi><mi>r</mi><msup>
<mo stretchy=&quot;false&quot;>(</mo><mo>&amp;#x2032;</mo></msup><mi>l</mi><mi>a</mi><mi>n</mi><msup>
<mi>g</mi><mo>&amp;#x2032;</mo></msup><msup><mo>,</mo><mo>&amp;#x2032;</mo></msup><mi>z</mi>
<mi>h</mi><mo>&amp;#x2212;</mo><mi>C</mi><msup><mi>N</mi><mo>&amp;#x2032;</mo></msup>
<mo stretchy=&quot;false&quot;>)</mo><mo>;</mo></math>" role="presentation">

<!-- (省略幾十行) -->

  <script type="math/tex" id="MathJax-Element-2">('html').attr('lang', 'zh-CN'); 
</script>('title').text(Math.random() * 100 * 99);<br>
</run>

大部分是 MathJax 的數學公式解析,因為它用 $ 作為行間公式的識別符,而 jQuery 好死不死幾乎全是 $……至於解決方案,你可以在選項里禁用數學公式,

或者換一個不支持 Markdown 的編輯器,

或者你可以想點別的招。有一種臨時的解決方案是把代碼放在 <run> 的某個屬性里,eval 改成從屬性中讀取,比如:

<run code="$('html').attr('lang', 'zh-CN');$('title').text(Math.random() * 100 * 99);"></run>
</code>
$('run').each(function(){eval($(this).attr('code'))});

需要說明的是,這篇文章寫的東西並不是找出 BKY 的 bug,最多算留出了非常大的自由度。至於怎麼使用,還是得看個人素質了。
我說明個幾把。

我強烈懷疑有些重要的語句是無法執行的,不過我沒有試過,我也不知道事實如何。

The End. \(\Box\)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 字元集是指一種從二進位編碼到某類字元符號的映射,校對是一組用於某個字元集的排序規則。每一類編碼字元都有其對應的字元集和校對規則 ...
  • 資源下載地址 Redis安裝包:https://github.com/MicrosoftArchive/redis/releases Redis客戶端: 鏈接:https://pan.baidu.com/s/1upNpZuQx8ErAgsnqVERHlg 提取碼:rqah ps:鑒於官方貌似收費了, ...
  • 又開了一個新的坑,筆者工作之後維護著一個 NoSQL 資料庫 。而筆者維護的資料庫正是基於 社區版本的 Aerospike 打造而來。所以這個踩坑系列的文章屬於工作總結型的內容,會將使用開發 Aerospike 的各種問題進行總結梳理,希望能夠給予大家啟發和幫助。第一篇開山之文,就先從Aerospi ...
  • 本文以一個小例子,簡述Android開發中ListView的相關應用,僅供學習分享使用。 ...
  • 一,效果圖。 二,代碼。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>CSS 樣式列表(url)</title> <style> ul.a { list-style: circle; } ul.b { list-style: ...
  • 2019-01-21 09:11:21 以下代碼包含: 1.alert彈窗 confirm彈窗 2.prompt 可輸入彈窗 3.創建對象的兩種方式:obj obj2 4.方法創建及調用 5.控制台函數 6.判斷是否是合法郵箱地址(正則表達式的應用) ...
  • 得益於大數據的技術時代,工業互聯網的革命正在進行著,通過智能機器間的鏈接並最終將人機鏈接,結合軟體和大數據分析的工業互聯網也將變得越來越容易實現! 基於 HTML5 WebGL 的技術支持,從技術上實現工控數字化管理模式變得簡單易行,核心提高對工控設備信息的可視化與管理效率,可以實時掌握設備每個參數... ...
  • 製作一套自己的 3D 的管道控制系統!運用了 HT 的 Graph3dView 組件通過對 WebGL 底層技術的封裝,與 HT 其他組件一樣,基於 HT 統一的 DataModel 數據模型來驅動圖形顯示。本篇主要包含動畫和思路等技術點。HT For Web 提供完整的基於 HTML5 圖形界面組... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...