カランのブログ

ソフトウェアエンジニア / 台湾人 / 福岡生活

今のモード ライト

今天在日本軟體開發圈中,最熱門的新聞應該就是「Coinhive 事件」了。這個訴訟是因為網站經營者在網站裡放挖礦腳本,當瀏覽網頁的使用者進入網頁時便會開始挖礦。這個行為被以「不正指令電磁的記録(妨礙電腦使用罪)」起訴,開始了一連串的訴訟過程。

這個訴訟之所以對開發者很重要的原因,在於身為網頁開發者的我們,是最容易與使用者打交道的一群人,只要有網域、伺服器,全世界的人都可以自由瀏覽你寫的網頁,然而這伴隨而來也是風險。我想身為開發者,自己寫的程式碼莫名其妙被判決有罪是一件很可怕的事。

身為開發者,一般具有比較高的學歷,所得也相對比較高一些,開發者通常也很守法,沒有前科。他們的人生裡面從來沒有「跑法院」這個選項,也不會想像自己有一天會被警察逮捕、搜查,自己的生財工具被收押。另外,面對警察的調查、筆錄,對於沒有經驗的人來說,很容易會因為緊張而說出對自己不利的論述,或是覺得只要好好說他們一定會明白,結果最後跳到黃河也洗不清。在台灣訊問時還可以跟律師會面、一起做筆錄,但是在日本只能隻身一人面對警察,壓力又更上一層樓。1

儘管最後真的無罪,光是跑法院的過程,諮詢律師,辯護費用等等,這些金錢成本與身心的消耗就足以對你的人生造成巨大的影響。


事件大綱

當事人經營了一個月流量大約 3 萬的網站,他覺得可以使用埋挖礦腳本的方式當作收益來維持經營網站所需要的費用。他使用的服務叫做 coinhive,這個服務會提供挖礦腳本,網頁的經營者只要將腳本塞進網頁,當使用者瀏覽網頁時就會自動執行。

這邊需要稍微解釋一下挖礦的原理,發送一筆交易時,各個礦工們需要開始計算是否承認這筆交易,而計算的方式就是算數學,而這個演算通常需要大量的計算力。 因此只要成功執行演算,礦工就可以拿到小部分的虛擬貨幣作為獎勵。只要有 CPU,大家都可以做到這個計算,因此執行瀏覽器的 JavaScript 腳本就能利用使用者的 CPU 資源達成挖礦目的。當然,跟專業的礦機跟 GPU 比起來,這種方式能夠挖到的回饋其實是相當微薄的,根據判決書的描述,當事人也只拿到 800 日幣的利益。

後來當事人就被檢察官起訴了,原本在一審判決無罪,二審時在東京高等法院被判有罪,終於到了今天最高法院判決出爐以無罪定讞2,判決書可以在網路上取得。

使用者雖然事前不知道挖礦程式的存在,這點雖然違反了使用者的意圖,然而像是網路廣告也沒有事先經過同意就執行腳本。「這是普遍被認可的範圍」,五位法官的意見皆為一致。最高法院並不是一般性地允許這樣的行為,而是僅限於這個案件。如果目的帶有惡意的話仍然需要負擔刑事責任。

原文:閲覧者があらかじめこうしたプログラムの存在を知らされていなかった点は、閲覧者の意図に反するとしたが、事前同意がないまま利用者のパソコンを一定程度使うという手法そのものはネット広告と同様と判断。「社会的に許容しうる範囲内だ」と結論づけた。5人の裁判官の全員一致だった。 もっとも最高裁は、一般論として同種行為を許容したのではなく、今回の事件に限って無罪と判断したにとどまる。利用目的などが悪質なら刑事責任を問われる可能性はありそうだ。

摘錄自日經新聞3

討論重點

整個訴訟攻防的重點在於這個行為的正當性,也就是有沒有符合要件當中的「不當使用」與違反「使用者意圖」。(刑法第168条の2(不正指令電磁的記録作成等))4

人が電子計算機を使用するに際してその意図に沿うべき動作をさせず、又はその意図に反する動作をさせるべき不正な指令を与える電磁的記録

法條上雖然寫著「不當使用」,然而「不當使用」的定義為何,不能只光從程式的內容判斷,而是要根據事件當下的情況、對使用者的影響等來做判斷。

關於不當使用這件事情,挖礦腳本在一般大眾眼中會覺得不舒服,自己的 CPU 資源平白被拿來用當然會不舒服。然而從判決書來看(參照前一段原文),本案件中被告人有調降 CPU 的使用率,判決書也有提到不告知使用者的案例像是網路廣告也是一樣。因此這種行為儘管不討喜,它並沒有實際造成使用者的損失或是不法獲取使用者的個人資料,只要關閉分頁程式馬上就會停止。

另外關於違反「使用者意圖」的角度來看,辯護方的論點是雖然事先並沒有告知使用者挖礦腳本的事,但像是 Google Analysis、廣告等等通常也不會經過使用者同意才執行,在網頁瀏覽中這是普遍被大眾認可的行為,因此挖礦腳本也應該算在認可範圍裡面。如果因為「沒有告知使用者」被判決有罪的話,那麼在座每位開發者應該都有罪了。

補充

1. 關於 coinhive 挖礦腳本

被告人當初是為了將網站的廣告移除,改由 coinhive 挖礦腳本當作收入來源來維持網站運營所需要的費用。 這裡有個插曲是 coinhive 曾經有將腳本以及服務條款改版,改為「必須要使用者同意」才可以進行挖礦。然而被告人並沒有得知這個公告,因此還是用原本的挖礦腳本。被告人也有收到推特私訊說要加入使用者同意的條款不然會有點灰色地帶,後來被告覺得要加入使用者同意的實作太麻煩了,因此直接將挖礦腳本刪除了。(設置腳本的時間為一個半月)

2. 警察搜查與筆錄

隔年的二月收到警察聯絡,有一天突襲他家,並且什麼都沒說明就開始搜查,收押了手機跟電腦。在訊問時也用採取高壓脅迫的方式要求被告人反省。5 原本是檢察官是提出 10 萬日圓罰金的簡易訴訟(日文稱略式起訴),但被告不服所以最後演變成了正式訴訟。然而考量到交通與律師費用,總共需要的錢恐怕不止 10 萬。

簡易訴訟與正式訴訟的差別在於,簡易訴訟當中,法院只會單純以檢察官的文件來審理,不會額外開庭或是讓雙方有說話的機會,像是水電催繳這類很明顯的案例,只要數十分鐘就會結束。而正式訴訟則會實際跑法院,像日劇那樣來回雙方辯護人(或檢察官)來回攻防,也需要花比較長時間進行。

3. 上訴書與意見書

被告人在二審的時候被改判有罪。然而如果要繼續上訴到最高法院,就需要「非常上訴」。然而有一個大難題就是基本上最高法院只會審核法律適用是否有問題,而不會審理事件本身,也不能再請求調查。

為了順利上訴,被告人與辯護律師向日本黑客協會(日本ハッカ協会)6蒐集來自四面八方的工程師意見書,試圖讓最高法院受理。

結論

身為網頁開發者,我們會去嘗試新技術,提升自己對技術理解與專業知識。然而對於大部分的警察、檢察官、法官來說,電腦並非他們的專業,不一定能掌握所有的知識,甚至會因為對這方面的了解不足擅自貼上「有罪」的標籤。對於社會大眾來說,也會因為不了解背後的原理,而抱持著有罪的態度。從近期層出不窮的虛擬貨幣詐騙也可以得知,未來像是這種電腦犯罪的事件只會越來越多,首當其衝的就是身為開發者的我們。

警察、律師、法官,大部分都沒有對這方面有太多理解,也因為這個領域本身的專業度導致打官司時會出現障礙,甚至在筆錄的時候警方也時常誤解被告人對於技術的解釋。(像是搞不清楚 head 跟 header 的差別等等7) 如果開發者的心態不好,很容易面臨崩潰。加上開發者誠實、尊重專業的態度,在訊問時反而容易被警察牽著鼻子走,做出不利於自己的筆錄,最後要翻轉可以說是難上加難。看完新聞後我覺得是個很好的機會給開發者思考,如果自己哪天遇到這種事要怎麼處理。

後記

後來將文章分享到前端社團後8,部分留言跟反應蠻讓我失望的,不過也讓我了解到目前這一塊的確就是灰色地帶,容易造成意見分歧跟爭議,再加上是以法律角度出發,在技術社群上討論反而容易失焦,算是一次學習。 當初是覺得身為開發者,應該大部分都沒想過自己會被警察找上,甚至要跑法院打官司。如果開發者遇到類似的情形要怎麼處理,又是日本很熱門的新聞因此覺得蠻值得分享的。

像是「這種說法真是噁心」之類的評論,會讓我覺得哇難道你平常和同事溝通的方式都是這樣嗎?由於在社團上的風向已經很明顯沒辦法繼續討論了,只會演變成口水戰,因此我也就沒有繼續留言了。 有幾個評論還蠻不錯的,是從使用者體驗角度出發,認為像這種行為應該要告知使用者,有些人覺得這種行為要擔心的是對網路文化帶來的影響或傷害。

另外,原文跟判決書也有提到蠻多次被告是有主動調降 CPU 使用率到不會讓使用者明顯感受到的程度(判決書上描述的是 50%,其實還是跑蠻兇的),雖然實際上的運作沒有相關數據佐證,但影響大不大這件事我覺得蠻主觀的。在判決書上的意見就是影響不大,如果硬要把通則(CPU 風扇狂轉)套到特例(被告人有調降 CPU),那我也沒辦法QQ。

法律面

我想先補充一下法律面的角度,有人留言說「偷別人資源挖礦賺大錢怎麼沒犯罪?」,這其實點出了幾個問題。

首先,在原文跟判決裡都有提到,並不是所有挖礦無罪,而是在「本次事件」中,是在社會所允許的範圍內。文中也有提到被告人有特地調整過參數,讓 CPU 不要跑那麼兇。是的,挖礦腳本普遍的印象就是觀感不佳,但程度上是否需要負擔刑事責任?這是需要針對每個案件討論的問題。

被告人當初是想要去除廣告,取而代之用腳本挖礦的方式當作貼補運營網站的費用。而去除廣告改為腳本挖礦=運營者獲益=經費用來改善網站=使用者體驗變好,其實是間接讓使用者受益,出發點是好的。雖然 CPU 使用量變多了,不過對我來說這就是比例問題。因此有沒有犯罪是要看意圖、比例、當下的狀況、實際造成的影響,而不是直接去脈絡化看到挖礦就開槍,被告人也沒有因為挖礦賺大錢。

另外一個問題就是法條的定義了,在日本的「不正指令電磁的記録作成等」,其實定義非常曖昧,像是「不當使用」、「違反使用者意圖」,這些都是相對不明確的定義,也因此會產生爭議的地方也很多,也有人認為這種曖昧的法條會容易導致濫用。從這點也可以知道帶來的影響是什麼,這個官司打了 3 ~ 4 年好不容易才有結果,但對一般人來說,三、四年要蒙上這個人可能有犯罪,同事、鄰居的質疑、身邊的人的眼光等等,這些都是折磨。

從留言也能看出有些開發者對於法律常識還有待加強,犯罪犯了哪條罪,構成要件是什麼要先定義清楚才能討論,而不是用自己的「感覺」來判斷有沒有罪,更何況開發者應該對背後的原理有更深的認知才對。開發功能的時候也要先釐清 spec 吧?

使用者面

有人提到說只要不是使用者預期的行為就應該告知,這點雖然很貼心,但看到一堆網站都是 cookie 使用的對話框後,不禁會讓我懷疑這真的是使用者要的嗎?打開一個網站先問 cookie、再問廣告行不行、挖礦行不行,如果不行就無法使用網站?另外一個想法是,所以問了,就可以了?

我的部落格雖然沒有任何廣告跟挖礦腳本,因為我覺得要犧牲掉的體驗實在太大了,但我是支持廣告的,很多無償做網站的開發者就是靠著廣告收入來維持網站運作,因此也沒有安裝 AdBlock,YouTube 也是買 Premium 無廣告來支持創作者。

但我自己也很不喜歡挖礦腳本,雖然現在已經進入了效能過剩的時代,但平白讓別人隨意跑 CPU 的資源還是很反感。可是有一件事情我認為蠻重要的是,觀感不佳、道德感跟有沒有構成犯罪要另當別論。而人們往往容易將他們混為一談,畢竟「唯一死刑」是不需要花心思思考的。

我並不希望挖礦腳本成為主流,但能夠擺脫網路廣告,開始挖掘一些新的獲益模式,讓網站運營能夠細水長流,同時又能提供良好的體驗,我覺得是好事一樁(像是 SocialFi、LikeCoin、Buy me a coffee 等等)。身為開發者更應該感到開心才對。身處於網路前線的我們,我們的專業能夠幫助我們看清事物運作的本質,而非只是用感覺來評斷而已。

Coinhive 關閉服務其實一部分也說明了這個運作方式不太管用,除了挖礦動用的 CPU 資源太多了,普遍使用者接受率不高,再來就是挖礦效率實在太差了,隔著瀏覽器又隔著 JavaScript 的執行環境(不過聽說 coinhive 是使用 WebAssembly),遠遠比不上家裡放一台礦機,或是就乾脆老實地放廣告還比較好賺。

Footnotes

  1. 精確一點來說應該是沒有法條保障當事人跟律師會面的權利。然而在台灣刑事訴訟法第 34 條-2 規定:辯護人與偵查中受拘提或逮捕之被告或犯罪嫌疑人接見或互通書信,不得限制之。

  2. https://www.courts.go.jp/app/hanrei_jp/detail2?id=90869

  3. https://www.nikkei.com/article/DGXZQOUE178IR0X10C22A1000000/

  4. https://www.soumu.go.jp/main_sosiki/joho_tsusin/security_previous/kiso/k05_02.htm

  5. https://twitter.com/itm_nlab/status/1096620265633660928

  6. https://www.hacker.or.jp/coinhiveopinion/

  7. https://twitter.com/moritomoya/status/1090590741783445505

  8. https://www.facebook.com/groups/f2e.tw/posts/4673733325997329/

次の記事

VSCode Vim を使って開発効率を爆上げする

前の記事

Sentry の Web Vitals を slack に統合する

この文章が役に立つと思うなら、下のリンクで応援してくれると大変嬉しいです✨

Buy me a coffee

作者

Kalan 頭像照片,在淡水拍攝,淺藍背景

愷開 | Kalan

Kalan です。台湾出身で、2019年に日本へ転職し、福岡に住んでいます。フロントエンド開発に精通しているだけでなく、IoT、アプリ開発、バックエンド、電子工作などの分野にも挑戦しています。 最近、エレキギターを始めました。ブログを通じて、より多くの人と交流できればと思っています。気軽に絡んでください