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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

websockets

RFC 6455提供了WebSockets安全注意事項(xiàng)的完整列表。 其中一些是在協(xié)議本身中烘焙的,其他一些則需要更多有關(guān)如何在特定服務(wù)器上實(shí)現(xiàn)它們的解釋。 讓我們來談?wù)剠f(xié)議本身內(nèi)置的一些安全性:

  • HTTP請(qǐng)求中的Origin頭僅包含標(biāo)識(shí)發(fā)起該請(qǐng)求的主體(網(wǎng)頁,JavaScript或任何其他客戶端)所需的信息(通常是發(fā)起源的方案,主機(jī)和端口)。 對(duì)于WebSocket,此標(biāo)頭字段包含在客戶端的打開握手中。 這用于通知服務(wù)器生成WebSocket連接請(qǐng)求的腳本來源。 服務(wù)器然后可以決定相應(yīng)地接受或拒絕握手請(qǐng)求。 這允許服務(wù)器防止使用瀏覽器中使用WebSocket API的腳本對(duì)WebSocket服務(wù)器進(jìn)行未經(jīng)授權(quán)的跨域使用。例如,如果Java EE 7 WebSocket聊天示例已部署到WildFly并通過localhost:8080 / chat /訪問, Origin標(biāo)頭為“ http:// localhost:8080”。 非瀏覽器客戶端可以使用Origin頭來指定請(qǐng)求的來源。 WebSocket服務(wù)器在接收此類請(qǐng)求時(shí)應(yīng)格外小心。
  • 來自客戶端的WebSocket打開握手必須包含Sec-WebSocket-Key和Sec-WebSocket-Version HTTP標(biāo)頭字段。 XMLHttpRequest可用于發(fā)出HTTP請(qǐng)求,并允許將標(biāo)頭作為該請(qǐng)求的一部分設(shè)置為: 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嘗試設(shè)置以Sec-開頭的任何頭字段,則將其忽略。 因此,惡意用戶無法使用HTML和JavaScript API模擬與服務(wù)器的WebSocket連接。

除了這兩種主要方式外,還可以使用任何HTTP服務(wù)器可用的客戶端身份驗(yàn)證機(jī)制來保護(hù)WebSocket。 本技術(shù)提示將顯示如何對(duì)WildFly上部署的Java EE 7 WebSocket進(jìn)行身份驗(yàn)證。

讓我們開始吧!

  • 克隆Java EE 7示例工作空間: git clone?https://github.com/javaee-samples/javaee7-samples.git
  • “ websocket / endpoint-security”示例顯示了如何從客戶端啟動(dòng)WebSocket握手之前完成客戶端身份驗(yàn)證。 通過包含以下部署描述符來觸發(fā)此操作: <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>

    有關(guān)此描述符的一些要點(diǎn):

    • <url-pattern>表示將提示對(duì)此應(yīng)用程序發(fā)出的任何請(qǐng)求進(jìn)行身份驗(yàn)證

    在我們的特定情況下,創(chuàng)建WebSocket連接的頁面受到基本身份驗(yàn)證的保護(hù)。

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

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

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

現(xiàn)在,當(dāng)通過localhost:8080 / endpoint-security訪問該應(yīng)用程序時(shí),將彈出一個(gè)安全對(duì)話框,如下所示:

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

成功驗(yàn)證請(qǐng)求后,將立即建立WebSocket連接,并在瀏覽器中顯示一條消息。

如果您只想保護(hù)WebSocket URL,請(qǐng)從以下位置更改URL模式:

/*

至:

/websocket

在websocket.js中,更改URL以從以下位置創(chuàng)建WebSocket端點(diǎn):

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

至:

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

請(qǐng)注意,如何在URL本身中傳遞憑據(jù)。 從Google Chrome 38.0.2125.104開始,如果僅WebSocket URL需要身份驗(yàn)證,則不會(huì)出現(xiàn)瀏覽器彈出窗口。

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

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

websockets

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。