日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用用户名/密码和Servlet安全性保护WebSockets

發布時間:2023/12/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用用户名/密码和Servlet安全性保护WebSockets 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

RFC 6455提供了WebSockets安全注意事項的完整列表。 其中一些是在協議本身中烘焙的,其他一些則需要更多有關如何在特定服務器上實現它們的解釋。 讓我們談談協議本身內置的一些安全性:

  • HTTP請求中的Origin頭僅包含標識發起該請求的主體(網頁,JavaScript或任何其他客戶端)所需的信息(通常是發起源的方案,主機和端口)。 對于WebSocket,此標頭字段包含在客戶端的打開握手中。 這用于通知服務器生成WebSocket連接請求的腳本來源。 然后,服務器可以決定相應地接受或拒絕握手請求。 這樣一來,服務器就可以防止使用瀏覽器中使用WebSocket API的腳本對WebSocket服務器進行未經授權的跨域使用。例如,如果Java EE 7 WebSocket聊天示例已部署到WildFly并通過localhost:8080 / chat /訪問, Origin標頭為“ http:// localhost:8080”。 非瀏覽器客戶端可以使用Origin頭來指定請求的來源。 WebSocket服務器在接收此類請求時應格外小心。
  • 來自客戶端的WebSocket打開握手必須包含Sec-WebSocket-Key和Sec-WebSocket-Version HTTP標頭字段。 XMLHttpRequest可用于發出HTTP請求,并允許將標頭作為該請求的一部分設置為: xhr.onreadystatechange = function () {if (xhr.readyState == 4 && xhr.status == 200){document.getElementById("myDiv").innerHTML = xhr.responseText;} } xhr.open("GET", "http://localhost:8080", true); xhr.setRequestHeader("foo", "bar"); xhr.setRequestHeader("Sec-WebSocket-Key", "myKey"); xhr.send();

    如果XMLHttpRequest嘗試設置以Sec-開頭的任何頭字段,則將忽略它們。 因此,惡意用戶無法使用HTML和JavaScript API模擬與服務器的WebSocket連接。

除了這兩種主要方法外,還可以使用任何HTTP服務器可用的客戶端身份驗證機制來保護WebSocket。 該技術提示將顯示如何驗證在WildFly上部署的Java EE 7 WebSockets。

讓我們開始吧!

  • 克隆Java EE 7示例工作空間: git clone?https://github.com/javaee-samples/javaee7-samples.git
  • “ websocket / endpoint-security”示例顯示了如何從客戶端啟動WebSocket握手之前完成客戶端身份驗證。 這是通過包含以下部署描述符來觸發的: <security-constraint><web-resource-collection><web-resource-name>WebSocket Endpoint</web-resource-name><url-pattern>/*</url-pattern><http-method>GET</http-method></web-resource-collection><auth-constraint><role-name>g1</role-name></auth-constraint> </security-constraint><login-config><auth-method>BASIC</auth-method><realm-name>file</realm-name> </login-config><security-role><role-name>g1</role-name> </security-role>

    有關此描述符的一些關鍵點:

    • <url-pattern>表示將提示對此應用程序發出的任何請求進行身份驗證

    在我們的特定情況下,創建WebSocket連接的頁面受到基本身份驗證的保護。

  • 下載WildFly 8.1 ,解壓縮并通過調用以下腳本來添加新用戶: ./bin/add-user.sh -a -u u1 -p p1 -g g1

    這將在組“ g1”中添加密碼為“ p1”的用戶“ u1”。 此處指定的組需要匹配部署描述符中的<role-name>中定義。

  • 通過提供以下命令來部署樣本: mvn wildfly:deploy

現在,當通過localhost:8080 / endpoint-security訪問該應用程序時,將彈出一個安全對話框,如下所示:

輸入“ u1”作為用戶名,輸入“ p1”作為密碼進行身份驗證。 這些憑據在部署描述符中引用的組“ g1”中定義。 任何其他憑據將繼續使對話框恢復。

成功驗證請求后,將建立WebSocket連接,并在瀏覽器中顯示一條消息。

如果您只想保護WebSocket URL,請從以下位置更改URL模式:

/*

至:

/websocket

在websocket.js中,更改URL以從以下位置創建WebSocket端點:

var wsUri = "ws://" + document.location.host + document.location.pathname + "websocket";

至:

var wsUri = "ws://u1:p1@" + document.location.host + document.location.pathname + "websocket";

請注意,如何在URL本身中傳遞憑據。 從Google Chrome 38.0.2125.104開始,如果僅WebSocket URL需要身份驗證,則不會出現瀏覽器彈出窗口。

下一技巧提示將說明如何使用wss://協議保護WebSocket的安全。

翻譯自: https://www.javacodegeeks.com/2014/10/securing-websockets-using-usernamepassword-and-servlet-security.html

總結

以上是生活随笔為你收集整理的使用用户名/密码和Servlet安全性保护WebSockets的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。