我正在構建一個使用(動態插入)JavaScript修改網頁的工具。任何網頁。導航後立即執行代碼:瀏覽器插件?
這個想法是允許用戶使用它來記錄對現有網頁(如google.com
)的一系列更改(例如,假設更改是將10像素純黑色邊框應用於所有<img>
標籤,這種變化顯然可以編碼爲jQuery的簡短小貼士),如果您願意(在這種情況下爲google.com
),該工具會生成一個包含此元數據和表示「起點」的url的鏈接(或標識符)。
現在我遇到的問題是整個同源安全策略,其目的是明確否認它看起來像我需要做的確切類型的事情。
我需要做的是本質上導航到一個特定的網站,然後在該網站的上下文中執行JavaScript。我(工具的作者)以及我與我分享我的腳本的用戶都不必控制站點,因此理論上,安全模型如果得到正確實施,應該可以防止這個概念發揮作用。
正因爲如此,我不能有一個單一的可點擊的鏈接,啓動一些網站上運行我的代碼的過程。這完全有意義。如果攻擊者網站發送一個變相的可點擊鏈接,它將運行代碼,在任何他們想要的網站上扮演我的角色,這將變得微不足道。
但是,解決此問題的方法是告訴收件人執行單個附加步驟。首先,他們像通常一樣打開網站的URL,然後他們將一點點javascript:(function(){.....})();
粘貼到URL/omni欄中。這是(AFAICT)完全合法的,應該是允許的,因爲用戶知道這個腳本正在執行。現在是否應該允許它輕鬆運行JS或多或少不相關,因爲它現在基本上都可以工作。
這並不算太壞,但我認爲用戶體驗不必要地受到影響。例如,它看起來像一個本地應用程序將有必要獲得比將iOS粘貼到iOS設備上的URL欄更好的效果,但是在插件接受的完整瀏覽器上,它看起來像一個插件可以實現我想要的效果。
這是一個導航到一個任意的URL,然後執行代碼(這個代碼來自一個授權的源代碼)只需點擊一下。
但我不確定從哪裏開始。什麼API可以爲我提供這種能力?我希望能夠脫離Greasemonkey類型的腳本(因爲Greasemonkey兼容插件幾乎適用於所有優秀的瀏覽器),但我不知道是否有足夠的可用功率。
對於與安全相關的問題,我仍然有點不確定。我以前在這裏有一個很大的段落,但這一切都歸結爲「社會工程」。
哦,我喜歡那樣!在服務器端更新腳本。那裏有好的見解。 – 2013-02-22 16:30:15