簡體   English   中英

當網頁和ajax調用來自同一台服務器時,JSON.parse()是否比eval()更安全?

[英]Is JSON.parse() really safer than eval() when web page and ajax call come from same server?

我知道JSON.parse()可以防止攻擊者將javascript注入到響應中,因為JSON解析器只是一個文本解析器,而不是腳本解析器所以請不要關閉這個是關於這個問題的所有其他問題的重復。 這是一個不同的問題。

如果攻擊者可以劫持你的Ajax調用並將javascript放入Ajax調用,那么他們是否有可能劫持你的實際網頁並將任意javascript放入你的頁面中,他們可以完成同樣的攻擊?

當然,通過使用JSON.parse()而不是eval(),你沒有什么可失去的(除非你的環境中還沒有JSON解析器,並且必須添加更多代碼才能獲得),但是它真的是什么情況呢如果您的網頁由與ajax呼叫相同的主機提供服務,請增加安全性嗎?

是的,這真的更安全。 您不采取的每項預防措施都是一組您無法阻止的潛在攻擊。

攻擊者可能無法控制服務器的輸出而無法完全更改它。 沒有人認為這是一個神奇的子彈,但它可能更快,你不會創造一個潛在的漏洞,可能會回來並傷害你。

也許運行你的服務器的人有一個糟糕的一天,並通過連接未經過驗證的用戶輸入來做一些愚蠢的事情來構建JSON:

<?php
    print '{"foo": ' . $_GET['bar'] . '}';
?>

如果你正在使用JSON.parse ,他們能做的最糟糕的事情就是將一個大對象推入你的記憶中。 如果你使用eval他們可以劫持一切。

好吧,如果他們能夠注入你的AJAX響應,他們可能已經成功地以某種方式讓你中間(ARP,DNS或其他)。

有關這些類型的攻擊的詳細信息,請參見http://en.wikipedia.org/wiki/Man-in-the-middle_attack

你是正確的,如果他們可以注入你的AJAX響應,他們也可以注入整個頁面。 實際上,除非使用HTTPS \\ SSL之類的東西,否則您收到的任何內容或通過網絡發送的內容現在都會在MitM中受到攻擊。

這是一個非常好的觀點。 我唯一能想到的是JSON.parse有機會比eval更快。

一個不太可能的優點是,如果瀏覽器已經緩存了HTML / JavaScript,並且服務器使用Cache-Control來表示它不需要重新加載。 如果發生這種情況,那么當然攔截的人將無法修改頁面。 但這是一種非常罕見的情況。 有可能,您將需要瀏覽器檢查HTML / JavaScript的較新版本,這是默認行為。

至於安全性差異,我認為你是對的。

至於我自己,我只使用HTTPS確認的系統。 但是我有一個使用JSON.parse的函數(如果可用)並且僅僅為了提高速度而退回到eval

嗯...我不是在提倡使用eval ,但我認為它不構成Javascript中的安全問題,因為Javascript是客戶端語言。 如果您不在代碼中使用eval ,那么是什么阻止我在控制台或地址欄中運行javascript:my_own_evil_code() 它是Javascript,我可以運行自己的代碼或修改你的代碼,創建我自己的HTTP請求,並對HTTP響應做任何事情,甚至可以將自己的eval添加到你的函數中。

如果有另一個類似的解決方案可用,你不應該使用eval ,但如果為了簡單起見,你想做eval('('+jsonstring+')')來模擬JSON.parse ,我不認為它是一個大錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM