2011-08-26 76 views
2

我想寫一個在線編程測驗應用程序。所以,很多問題可能會是,「下面的代碼的輸出是什麼?」。如何防止從我的網頁複製文字?

用戶可能會複製粘貼整個代碼並嘗試在另一個窗口中運行它。有什麼好方法可以防止這種情況發生?我知道我們可以禁用右鍵單擊和Ctrl-C,但有沒有更優雅的方式?更妙的是,應用程序是否可以知道用戶正在嘗試複製內容,並通知用戶它不被允許?

(代碼JavaScript只是因爲我不知道是什麼標記這是請重新標記爲更有意義的,如果你,如果你能想到的東西)

+2

真的,唯一正確的答案是:不要試圖顛覆用戶的瀏覽體驗。大多數現代瀏覽器可以防止像Javascript那樣愚蠢的遊戲現在禁用右鍵單擊。 –

+0

解決方案可能會在文本上添加一個透明層。然後你*看到*文本,但你*'觸摸'*無用的圖層。不過,這可以很容易地被DOM檢查員等忽略。 – pimvdb

回答

2

要真正防止任何文本篡改,您可以將代碼片段轉換爲圖像併發布供用戶閱讀和解釋。

圖像解決方案仍然使用OCR應用程序解釋圖像的可能性,但使用OCR比單純複製和粘貼要複雜得多。

6

防止這種情況是沒有的最佳方式代碼在那裏。任何類型的js都不會阻止任何人(尤其是編碼者)。我見過的最好的選擇是使用圖像。

+1

+1:圖像是一個不錯的主意。 –

+0

啊!精彩.. :) –

+0

相信我,我是那個會提供代碼的人:P這是一個挫折是來自個人經驗XDDD –

2

這是在線世界中一個持續存在的問題。防止複製實際上是相當困難的。您可以使用Javascript來禁用右鍵單擊和Ctrl-C,但有很多方法。一種方法可能是將問題放在圖形中,而不是文本中。用戶仍然可以下載圖片,但對他們沒有多大用處。

+0

不過,用戶可以使用OCR軟件將圖像轉換爲純文本。 –

1

我覺得這個不能用JavaScript來實現......另外,如果你能夠阻止右側依序按一下,你不能使用curl阻止用戶,並顯示在源...

最好的解決方案可能會以渲染代碼服務器的圖像...或使用閃光燈。

1

如果您不希望用戶複製和粘貼代碼,請使用GD等庫將其渲染爲圖像並顯示此圖像。

1

實際上,處理此問題的最佳方式是disable text selection,但儘管這樣會阻止90%的用戶,但確定的用戶可以用Firebug之類的東西來顛覆你。有機會,如果他們正在查看代碼,他們很聰明,可以輕鬆應對。

如果您使用的是實時文字,沒有100%的解決方案。另一方面,你可以使用圖片或swf。無論哪種情況,用戶都必須手動輸入所有代碼,這可能足以阻止威脅。個人而言,如果它是我的網站,我會研究一個圖像處理程序,以便我可以輕鬆生成和緩存這些文件。

1

如果代碼在源代碼頁中以文本形式呈現,則無法阻止用戶在網頁上執行他想要的操作。

您可以讓用戶更難以複製代碼,但無法阻止它。

即使您將代碼渲染爲圖像,用戶仍然可以簡單地從圖像中讀取和寫回代碼。

1

試圖阻止用戶從您的網站複製+粘貼文本時,您會遇到實際問題。許多人已經嘗試過這種方式,並取得了不同程度的成功,但最終,即使是最好的解決方案也有一箇中途確定的用戶可以通過的廣泛的開放漏洞。

在您的具體示例中更好的解決方案可能是修改代碼,使其看起來正確但無法編譯。你可以通過將代碼中的字符替換爲看起來相同但會扼殺編譯器的其他字符來實現。

例如,但不能打破空格和其他空白字符而不是普通空格,大多數編譯器都會抱怨它。如果沒有這個技巧,那麼許多希臘字母與正常的ASCII字母在視覺上相同,但實際上是不同的字符代碼;用Μ取代一個「M」的實例,但不是其他的,你的代碼看起來很好,但會破壞編譯器。

如果你確定的副本+粘貼作弊者仍然設法讓程序在那之後工作,那麼他們可能應該得到答案的要點。 ;-)

請參閱this site瞭解HTML實體代碼的不常用字符列表,其中許多代碼適用於這種欺騙性的欺騙。

1

你不能。最好的方法是使用圖像。 或者你可以使用焦點的時候鉤來提供自己的功能

<body onselectstart="return false">