簡體   English   中英

使用Javascript XmlHttpRequest和PHP保護Web服務調用

[英]Secure web service calls using Javascript XmlHttpRequest and PHP

因此,在游戲中,我希望能夠讓客戶端(Web瀏覽器)和服務器之間的所有功能通過AJAX調用與PHP Web服務進行交互。 這是實現此類功能的一種非常簡單的方法,除了它有一些主要缺點:

  1. 使用網絡嗅探器的任何人都可以看到請求的格式(除非他們使用SSL)並復制它們
  2. 任何使用瀏覽器玩游戲的人都可以查看包含的Javascript文件,看看提交XHR的情況

因此,為了解決這些問題中的第一個問題,我將使用與服務器的HTTPS連接(這是我如何實現SSL的正確性?),對於這兩個問題中的第二個,我能想到的是混淆/最小化我的Javascript碼。

有沒有人對我如何驗證我的PHP文件正在使用的Web服務調用有任何想法? 如果我在客戶端使用用戶名/ PW,則攻擊者只需查看Javascript文件即可查找憑據。 如果我嘗試使用IP地址作為一種身份驗證方法,那么我覺得這只會打開另外一堆蠕蟲。 我基本上想確保Web服務調用來自游戲客戶端。

Sneaky:在游戲情況下驗證用戶生成內容的真實性並不容易。 我建議在JavaScript和服務器之間發送混亂的亂碼命令。 例如,如果您要將用戶的x坐標發送到服務器而不是:

ajax.send('userXLocation=80');

嘗試一些不是簡單英語的東西:

ajax.send('J{};;%FI=80');

當然不是防彈,但是如果用一些好的JS縮小/混淆,用戶將難以區分發送的命令,如果他們能夠理解的是數字。 在您的JS代碼中,亂碼必須是硬編碼的,但在PHP中,您可以使用一個將亂碼映射到實際命令的數組。

額外鬼鬼祟祟:使用固定長度預先插入的數字作為命令,而不是亂碼。 用戶X移動到80可能是: 24080


Sneaky:您還可以嘗試偶爾發送一個唯一的會話標識符(類似於半公鑰),並指示JS使用該會話標識符對所有消息進行編碼。 這可能會被破解,但它增加了任何破解嘗試的時間。

額外偷偷摸摸:這個會話標識符可能是服務器最后一次響應的文本,所以每次請求都會改變,但黑客不會看到任何明顯的消息告訴JS密鑰已經改變。 這將只是JS和PHP之間無害的溝通。


Sneaky:這是另一個臨時解決方案,但是為了混淆數字,您可以決定在發送之前添加或減去每個數字的常量(可能是會話中唯一的一個)。 因此,如果黑客知道他在X位置80並且尋找包含80的通信他/她將不會看到任何因為JS和PHP已經決定在每個數字上添加5。 85將能夠通過未被發現的。

Super Sneaky:與上面類似,不是同意數字混淆常量,而是使用服務器最后發送給JS的數字。 黑客再次感到困惑,為什么數字不斷變化,但沒有消息通知JS改變其數字。


Sneaky:再次暫時,但是當混淆代碼嘗試混合邏輯與基礎東西(創建一個ajax對象)時,即使對於Chrome黑客的漂亮打印也會發現你的代碼難以破譯。 要考慮的其他事情可能是完全放棄在帖子中放置變量。 它不會持續很長時間,但通過cookie(將與ajax請求一起發送)傳遞命令將是偷偷摸摸的。 為了更加偷偷摸摸,你可以讓PHP和JavaScript決定何時在post和cookie通信之間來回切換,或者只使用post來表示非敏感的東西。

超級偷偷摸摸:將核心游戲邏輯和通信放在名為jquery-1.6.2.min.js的文件中。 我保證大多數試圖破解你的腳本的人會忽略它。

Ninja Worthy:如果您選擇在cookie和發布請求之間切換,請在未使用的傳輸上創建蜜罐。 因此,在PHP發送響應后說:“嘿,讓我們轉向cookie!” 和JavaScript說,“當然,”PHP應該監聽通過POST進行通信的嘗試。 它應該假設,因為JS正在通過cookie進行通信(現在)如果嘗試發布請求,則涉及一些黑客行為。 然后它應該用“你被破壞”的消息嚇唬用戶,甚至暫時禁止。 這當然應該在他們切換回POST通信時翻轉。

超越忍者:您還可以發送與POST / Cookie相同的GET請求,這些請求將永久保存為蜂蜜。 如果GET和POST / COOKIE之間存在差異,那么黑客就會認為它就像更改一些獲取變量一樣簡單,並且您可以顯示相同的“你被抓住”消息,可能會暫時或永久禁止你的游戲。


最后幾件事:

  • 利用新的網絡技術。 如果可用,您可以使用Web套接字作為傳輸,使其成為蜜罐四方(WebSockets,POST,Cookies和GET)。 您還可以使用Web worker隱藏特殊代碼的執行。 雖然您可以為工作人員打開JS文件,但我無論如何都不知道從控制台或FireBug直接訪問worker的范圍。
  • 使用愚蠢的黑客對您有利。 置於黑客所期望的愚蠢事物中。 如果某些安全措施看起來很糟糕或容易破解,那么黑客可能會變得孤獨或認為你是一個糟糕的程序員。 然后,他們會繼續搞亂像蜜罐運輸系統這樣的事情並被破壞!
  • 最后,始終關注奇怪的請求模式。 如果一個玩家的最大速度是每秒10個像素,但是在兩個請求中,彼此間隔只有一秒,行進的距離是20個像素,PHP應該知道某些東西已經上升。 您甚至可以通過發送快速AJAX消息來允許PHP跟蹤消息操作和發送時間,嘿嘿我即將向您發送消息。 如果用戶篡改實際消息,則第一消息和包含數據的消息之間的時間將在許多秒內變化。 PHP可以注意這一點,因為它通常不會花費5秒多的時間來處理數據並發送AJAX請求。

這里根本沒有勝利。 嚴重的沒有。 混淆不是安全。 對於游戲而言,它可能已足夠,但不要將其用於安全性非常重要的任何事情。

你可能會喜歡嘗試智取黑客的挑戰,但你不能,有太多的計算機科學巫師無限期地掌握他們的手。 嘗試將FTP服務器保持打開狀態一天。

暫無
暫無

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

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