В Использование WebSocket в двухточечной связи в Adobe ColdFusion 10 Dev Guide, объект javascript mysocket
, созданный <cfwebsocket>
может вызвать метод invoke()
, который может буквально вызывать любой публичный метод для любого CFC из JavaScript.
Как этот Не риск для безопасности? Как защищать cfc/function от вызова websocket?
1. Создайте страницу CFM index.cfm.
<script type="text/javascript"> function msgHandler(msgobj){ var txt = document.getElementById("myDiv"); var message = ColdFusion.JSON.encode(msgobj); txt.innerHTML += message + "<br >" + "<br>"; } function invokecfcfn(){ var fname= document.getElementById("fnname").value; if (fname == "f2") { alert("f2 selected"); mysocket.invoke("mycfc", "f2", ["echo"]); } else mysocket.invoke("mycfc", fname); } </script> <cfwebsocket name="mysocket" onmessage="msgHandler"/> <form> <select id="fnname"> <option>f1</option> <option>f2</option> <option>f3</option> </select> <input id="invokefn" name="invokefn" value="Invoke CFC function " type="button" onclick="invokecfcfn();"> <div id="myDiv"> </div> </form>
2. Создайте CFC mycfc.cfc, который содержит функцию, вызванную с клиентской страницы.
<cfcomponent> <cffunction name="f1" > <cfreturn "Message returned from f1"> </cffunction> <cffunction name="f2" returntype="string" > <cfargument name="arg1" type="string" required="true" > <cfset msg= "Message from wsssendmessage of f2 which you called with arg " & arg1> <cfset wssendMessage(msg)> <cfreturn "Message returned from f2"> </cffunction> <cffunction name="f3" > <cfthread action="run" name="t1" > <cfloop index="i" from="1" to="10"> <cfset sleep(20000)> <cfset wssendMessage("Message #i# from wsssendmessage of f3 #now()#")> </cfloop> </cfthread> <cfreturn "Thread initiated in f3"> </cffunction> </cfcomponent>
EDIT: не любая функция, возвращается частная функция:
{
"clientid":39550088,
"ns":"coldfusion.websocket.channels",
"reqType":"invoke",
"code":4001,
"type":"response",
"msg":"The method f1 was not found in component mycfc.cfc."
}
UPDATE:
Я попробовал переместить mycfc.cfc
в /com
(за пределами webroot) и добавил сопоставление в /com
, и функции могут успешно запускаться STILL.
ОБНОВЛЕНИЕ: 3 июля 2013 г.
Команда реагирования на инциденты с безопасностью продуктов Adobe (PSIRT) знает о этот вопрос, и он активно сотрудничает с группой продуктов ColdFusion для освободить исправление.
http://blogs.coldfusion.com/post.cfm/coldfusion-10-websocket-vulnerebility
ОБНОВЛЕНИЕ: 9 июля 2013 г.
Adobe выпустила исправление для системы безопасности для ColdFusion 10 для Windows, Macintosh и Linux. Это исправление устраняет уязвимость (CVE-2013-3350), которые могут позволить злоумышленнику использовать общедоступные методы на компонентах ColdFusion (CFC) с использованием WebSockets.
http://www.adobe.com/support/security/bulletins/apsb13-19.html