Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
XSSǰ¶Ë·À»ðǽ¡ªÌìÒÂÎÞ·ìµÄ·À»¤
 
×÷Õß _×Þ²ËÍ·£¬»ðÁú¹ûÈí¼þ ·¢²¼ÓÚ£º2014-08-15
  3018  次浏览      38

½²½âÁ˹³×Ó³ÌÐòµÄ¹¥·Àʵս£¬²¢ÊµÏÖÁËÒ»Ì×¶Ô¿ò¼ÜÒ³µÄ¼à¿Ø·½°¸£¬½«·À»¤×÷Óõ½ËùÓÐ×ÓÒ³Ãæ¡£

µ½Ä¿Ç°ÎªÖ¹£¬ÎÒÃÇ·À»¤µÄÉî¶ÈÒѾ­²î²»¶à£¬µ«¹ã¶È»¹ÓÐËùǷȱ¡£

ÀýÈ磬ÎÒÃǵÄÊôÐÔ¹³×ÓÖ»¿¼ÂÇÁË setAttribute£¬È´ºöÊÓ»¹ÓÐÀàËÆµÄ setAttributeNode¡£¾¡¹Ü´ÓÀ´²»ÓÃÕâ·½·¨£¬µ«²¢²»ÒâζÈ˼Ҳ»ÄÜʹÓá£

ÀýÈ磬´´½¨ÔªËØÍ¨³£¶¼ÊÇ createElement£¬ÊÂʵÉÏ createElementNS ͬÑùÒ²¿ÉÒÔ¡£ÉõÖÁ»¹¿ÉÒÔÀûÓÃÏֳɵÄÔªËØ cloneNode£¬Ò²ÄܴﵽĿµÄ¡£Òò´Ë£¬ÕâЩ¶¼ÊDZßÔµ·½·¨¶¼ÊÇÖµµÃ¿¼Âǵġ£

ÏÂÃæÎÒÃǶÔ֮ǰÌÖÂÛ¹ýµÄ¼à¿Øµã£¬½øÐÐÖðÒ»ÉóºË¡£

ÄÚÁªÊ¼þÖ´ÐÐ eval

ÔÚµÚһƪÎÄÕ½áβ̸µ½£¬ÔÚÖ´Ðлص÷µÄʱºò£¬×îºÃÄÜ¼à¿Ø eval£¬setTimeout('...') ÕâЩÄܹ»½âÎö´úÂëµÄº¯Êý£¬ÒÔ·ÀÖ¹Ö´Ðд¢´æÔÚÆäËûµØ·½µÄ XSS ´úÂë¡£

ÏÈÀ´ÁоÙÏÂÕâÀຯÊý£º

eval
¡¡¡¡setTimeout(String) / setInterval(String)
¡¡¡¡Function
¡¡¡¡execScript / setImmediate(String)

ÊÂʵÉÏ£¬ÀûÓÃÉÏһƪµÄ¹³×Ó¼¼Êõ£¬ÍêÈ«¿ÉÒÔ°ÑËüÃǶ¼¼à¿ØÆðÀ´¡£µ«ÏÖʵ²¢Ã»ÓÐÎÒÃÇÏëÏóµÄÄÇÑù¼òµ¥¡£

eval ÖØÐ´ÓÐÎÊÌâÂð

eval ²»¾ÍÊǸöº¯Êý£¬ÎªÊ²Ã´²»¿ÉÒÔÖØÐ´£¿

var raw_fn = window.eval;
¡¡¡¡window.eval = function(exp) {
¡¡¡¡alert('Ö´ÐÐeval: ' + exp);
¡¡¡¡return raw_fn.apply(this, arguments);
¡¡¡¡};
¡¡¡¡console.log(eval('1+1'));

ÍêȫûÎÊÌâ°¡¡£ÄÇÊÇÒòΪ´úÂëÌ«¼òµ¥ÁË£¬ÏÂÃæÕâ¸ö Demo ¾Í¿ÉÒÔ¿´³öɽկ°æ eval µÄȱÏÝ£º

(function() {
¡¡¡¡eval('var a=1');
¡¡¡¡})();
¡¡¡¡alert(typeof a);
¡¡¡¡Run

°´Àí˵Ӧ¸Ã undefined ²Å¶Ô£¬½á¹ûÈ´ÊÇ number¡£¾Ö²¿±äÁ¿¶¼Åܵ½È«¾ÖÉÏÀ´ÁË¡£ÕâÊÇʲôÇé¿ö£¿ÊÂʵÉÏ£¬eval ²¢²»ÊÇÕæÕýÒâÒåµÄº¯Êý£¬¶øÊÇÒ»¸ö¹Ø¼ü×Ö£¡ÏëÁ˽âÏêÇéÇë´ÁÕâÀï¡£

Function ÖØÐ´ÓÐÒâÒåÂð

Function ÊÇÒ»¸öÈ«¾Ö±äÁ¿£¬ÖØÐ´ window.Function ÀíÂÛÉÏÍêÈ«¿ÉÐаɡ£

var raw_fn = window.Function;
¡¡¡¡window.Function = function() {
¡¡¡¡alert('µ÷ÓÃFunction');
¡¡¡¡return raw_fn.apply(this, arguments);
¡¡¡¡};
¡¡¡¡var add = Function('a', 'b', 'return a+b');
¡¡¡¡console.log( add(1, 2) );

ÖØÐ´È·Êµ¿ÉÐС£µ«ÏÖʵȴÊDz»¿°Ò»»÷µÄ£ºÒòΪËùÓк¯Êý¶¼ÊÇ Function ÀàµÄʵÀý£¬ËùÒÔ·ÃÎÊÈκÎÒ»¸öº¯ÊýµÄ constructor ¼´¿ÉµÃµ½Ô­Ê¼µÄ Function¡£

ÀýÈç alert.constructor£¬¾Í¿ÉÒÔÈÆ¹ýÎÒÃǵĹ³×Ó¡£ÉõÖÁ¿ÉÒÔÓÃÄäÃûº¯Êý£º

¡¡(function(){}).constructor

ËùÒÔ£¬Function ÊÇÓÀÔ¶¹³²»×¡µÄ¡£

¶îÍâµÄÖ´Ðз½·¨

¾ÍËã²»ÓÃÕâÀຯÊý£¬ÈÔÓÐÏ൱¶àµÄ°ì·¨Ö´ÐÐ×Ö·û´®£¬ÀýÈ磺

´´½¨½Å±¾£¬innerHTML = ´úÂë

´´½¨½Å±¾£¬Â·¾¶ = data:´úÂë

´´½¨¿ò¼Ü£¬Â·¾¶ = javascript:´úÂë

......

¿´À´£¬ÏëÍêÈ«°ÑÀàËÆ eval µÄÐÐΪ¼à¿ØÆðÀ´£¬ÊDz»ÏÖʵµÄ¡£²»¹ý×÷ΪԤ¾¯£¬ÎÒÃÇÖ»¼à¿Ø eval£¬setTimeout/Interval Ò²¾Í×ã¹»ÁË¡£

¿ÉÒÉÄ£¿éÀ¹½Ø

µÚ¶þƪ̸ÁËÕ¾ÍâÄ£¿éµÄÀ¹½Ø¡£Ö®ËùÒÔ³ÆÖ®¡ºÄ£¿é¡»¶ø²»ÊÇ¡º½Å±¾¡»£¬²¢·ÇÖ»Óнű¾ÔªËزž߱¸Ö´ÐÐÄÜÁ¦¡£¿ò¼ÜÒ³¡¢²å¼þ¶¼ÊÇ¿ÉÒÔÔËÐдúÂëµÄ¡£

¿ÉÖ´ÐÐÔªËØ

ÎÒÃÇÁоÙÏ£¬ÄÜÖ´ÐÐÔ¶³ÌÄ£¿éµÄÔªËØ£º

½Å±¾
¡¡¡¡<script src="..." />
¡¡¡¡¿ò¼Ü
¡¡¡¡<iframe src="...">
¡¡¡¡<frame src="...">
¡¡¡¡²å¼þ£¨Flash£©
¡¡¡¡<embed src="...">
¡¡¡¡<object data="...">
¡¡¡¡<object><param name="moive|src" value="..."></object>
¡¡¡¡²å¼þ£¨ÆäËû£©
¡¡¡¡<applet codebase="...">

ÕâÐ©ÔªËØµÄ·¾¶ÊôÐÔ£¬¶¼Ó¦¸Ã×÷ΪÅŲéµÄ¶ÔÏó¡£

²»¹ý£¬ÓÐÕâô¸öÔªËØµÄ´æÔÚ£¬¿ÉÄܵ¼ÖÂÎÒÃǵÄ·¾¶¼ì²âʧЧ£¬Ëü¾ÍÊÇ£º

<base href="...">

ËüÄÜÖØ¶¨ÒåÒ³ÃæµÄÏà¶Ô·¾¶£¬ÏÔÈ»ÊDz»ÈݺöÊӵġ£

ÊÂʵÉÏ£¬³ýÁËʹÓÃÔªËØÀ´Ö´ÐÐÕ¾ÍâÄ£¿é£¬»¹¿ÉÒÔʹÓÃÍøÂçͨÐÅ£¬»ñµÃÕ¾ÍâµÄ½Å±¾´úÂ룬ȻºóÔÙµ÷Óà eval Ö´ÐУº

AJAX

ĿǰÖ÷Á÷ä¯ÀÀÆ÷¶¼Ö§³Ö¿çÓòÇëÇó£¬Ö»Òª·þÎñ¶ËÔÊÐí¾Í¿ÉÒÔ¡£Òò´Ë£¬ÎÒÃÇÐè¼à¿Ø XMLHttpRequest::open ·½·¨¡£Èç¹ûÇëÇóµÄÊÇÕ¾ÍâµØÖ·£¬¾ÍµÃ×ö²ßÂÔÆ¥Åä¡£²»Í¨¹ýÔò·ÅÆúÏòÉϵ÷Ó㬻òÕßÅ׳öÒ»¸öÒì³££¬»òÕ߸ø XHR ²úÉúÒ»¸ö 400 ״̬¡£

WebSocket

WebSocket ºÍ XHR ÀàËÆ£¬Ò²ÄÜͨ¹ý¹³×ӵķ½·¨½øÐÐ¼à¿Ø¡£

²»¹ý£¬ÖµµÃ×¢ÒâµÄÊÇ£¬WebSocket ²¢·ÇÊǸöº¯Êý£¬¶øÊÇÒ»¸öÀà¡£Òò´Ë£¬ÔÚ·µ»ØÊµÀýµÄʱºò£¬±ðÍüÁ˽« constructor ¸Ä³É×Ô¼ºµÄ¹³×Ó£¬·ñÔò¾Í»áй¶ԭʼ½Ó¿Ú£º

var raw_class = window.WebSocket;
¡¡¡¡window.WebSocket = function WebSocket(url, arg) {
¡¡¡¡alert('WebSocket ÇëÇó£º' + url);
¡¡¡¡var ins = new raw_class(url, arg);
¡¡¡¡// ÇмÇ
¡¡¡¡ins.constructor = WebSocket;
¡¡¡¡return ins;
¡¡¡¡};
¡¡¡¡var ws = new WebSocket('ws://127.0.0.1:1000');

ÁíÍ⣬ÒòΪËüÊÇÒ»¸öÀ࣬ËùÒÔ²»ÒªºöÂÔÁ˾²Ì¬·½·¨»òÊôÐÔ£º

WebSocket.CONNECTING
¡¡¡¡WebSocket.OPEN
¡¡¡¡...

Òò´Ë£¬»¹Ð轫ËüÃÇ¿½±´µ½¹³×ÓÉÏ¡£

¿ò¼ÜÒ³ÏûÏ¢

HTML5 ¸³ÓèÁË¿ò¼ÜÒ³¿çÓòͨÐŵÄÄÜÁ¦¡£Èç¹ûûÓÐΪ¿ò¼ÜÔªËØ½¨Á¢°×Ãûµ¥µÄ»°£¬¹¥»÷Õß¿ÉÒÔǶÈë×Ô¼ºµÄ¿ò¼ÜÒ³Ãæ£¬È»ºó½« XSS ´úÂë postMessage ¸øÖ÷Ò³Ãæ£¬Í¨¹ý eval Ö´ÐС£

²»¹ýΪÁ˰²È«¿¼ÂÇ£¬HTML5 ÔÚÏûϢʼþÀï±£´æÁËÀ´Ô´µØÖ·£¬ÒÔʶ±ðÏûÏ¢ÊÇÄĸöÒ³Ãæ·¢³öµÄ¡£

ÒòΪÊǸöʼþ£¬ÎÒÃÇ¿ÉÒÔʹÓõÚһƪÎÄÕÂÀïÌáµ½µÄ·½·¨£¬¶ÔÆä½øÐв¶»ñ¡£Ã¿µ±ÓÐÏûÏ¢ÊÕµ½Ê±£¬¿ÉÒÔ¸ù¾Ý²ßÂÔ£¬¾ö¶¨ÊÇ·ñ×èÖ¹¸ÃʼþµÄ´«µÝ¡£

// ÎÒÃǵķÀÓùϵͳ
(function() {
window.addEventListener('message', function(e) {
if (confirm('·¢ÏÖÀ´×Ô[' + e.origin + ']µÄÏûÏ¢£º\n\n' + e.data + '\n\nÊÇ·ñÀ¹½Ø£¿')) {
e.stopImmediatePropagation();
}
}, true);
})();
window.addEventListener('message', function(e) {
alert('ÊÕµ½:' + e.data)
})
postMessage('hello', '*');
Run

µ±È»£¬Èç¹ûÅäÖÃÁË¿ò¼ÜÒ³µÄ°×Ãûµ¥£¬¾ÍÄÜÍêÈ«±ÜÃâÕâ»ØÊÂÁË¡£ËùÒÔÕâÏî·ÀÓù¿ÉÒÔÑ¡ÔñÐԵĿªÆô¡£

ʼþÔ´

HTML5 ÐÂÔöÁËÒ»¸ö½Ð EventSource µÄ½Ó¿Ú¡£²»¹ýÆäÓ÷¨Óë WebSocket ·Ç³£ÏàËÆ£¬Òò´Ë¿ÉÒÔʹÓÃÀàËÆµÄ¹³×Ó½øÐзÀÓù¡£

µ½´Ë£¬ÎÒÃÇÁоÙÁ˸÷ÖÖÄÜÖ´ÐÐÔ¶³ÌÄ£¿éµÄ·½Ê½¡£ÊÂʵÉÏ£¬¶ÔÆä·ÀÓù²¢²»ÄÑ£¬ÄѵÄÊÇÊÕ¼¯ÕâЩ¼à¿Øµã£¬×öµ½µÎË®²»Â©¡£

API ¹³×Ó

¶ÔÓÚ¶¯Ì¬´´½¨µÄ¿ÉÖ´ÐÐÄ£¿é£¬ÎÒÃÇͨ¹ýÊôÐÔ¹³×Ó£¬À´¼à¿ØÆäÔ¶³Ì·¾¶¡£

´´½¨ÔªËصķ½·¨

ÕâÒ»½ÚÊÇÕë¶Ô Chrome µÄ£¬ÒòΪËü²»Ö§³ÖÔ­Éú·ÃÎÊÆ÷¡£

createElement / createElementNS ÎÞÖÐÉúÓÐ

cloneNode ¿Ë¡ÏÖÓÐ

innerHTML / outerHTML ¹¤³§´´½¨

ǰÁ½ÖÖ£¬Í¨¹ý¹³×Ó³ÌÐòºÜÈÝÒ×ʵÏÖ¡£

µÚÈýÖÖ£¬ÒòΪ inner/outerHTML ÊÇÔªËØµÄ property£¬¶ø·Ç attribute¡£ÓÉÓÚ Chrome ÊÇÎÞ·¨»ñȡԭÉú·ÃÎÊÆ÷µÄ£¬ËùÒÔʹÓù³×ӻᵼÖÂÎÞ·¨µ÷ÓÃÉϼ¶½Ó¿Ú¡£

ÔÙÕߣ¬inner/outerHTML ´«½øÀ´µÄÊÇ×Ö·û´®¡£±êÇ©ºÍÊôÐÔÓãÁú»ìÔÓ£¬½âÎö×Ö·û´®¿Ï¶¨ÊDz»¿¿Æ×µÄ¡£ËùÒÔ»¹µÃÏȵ÷ÓÃÔ­Éú innerHTML ÅúÁ¿¹¹½¨³ö½Úµã£¬È»ºóÔÙɨÃèÆäÖеÄÔªËØ¡£¶øÕâ¸ö¹ý³ÌÖУ¬½Úµã¹ÒÔØÊ¼þÒѾ­´¥·¢ÁË¡£

ËùÒÔ£¬ÎÞÐ迼ÂǵÚÈýÖÖÇé¿ö¡£

Äã¿ÉÄÜ»áÓÐÒÉÎÊ£¬¼ÈÈ»Óýڵã¹ÒÔØÊ¼þ¶¼Äܸ㶨£¬ÎªÊ²Ã´»¹ÒªÇ°ÃæµÄ¹³×Ó£¿Æäʵ£¬ÔÚµÚ¶þƪÎÄÕ ÀïÒѾ­ÏêϸÌÖÂÛÁË£¬¶¯Ì¬´´½¨µÄ½Å±¾Ã»·¨±»Ê¼þÀ¹½Ø£¬ËùÒÔ²ÅÓù³×Ó¡£

¶øÍ¨¹ý innerHTML ²úÉúµÄ½Å±¾£¬ÊDz»»áÖ´Ðеģ¡Õâ¸ö´ó¼Ò¶¼Ìý˵¹ý°É¡£

ÐÞ¸ÄÊôÐԵķÃÎÊÆ÷

ͨ¹ýÔ­ÐÍÁ´µÄ·ÃÎÊÆ÷¹³×Ó£¬¿ÉÒÔÖ±½Ó¼à¿ØÌض¨ÔªËصÄÌØ¶¨ property£¬ÍêÈ«²»Ó°ÏìËûÈË£¬ËùÒÔЧÂʷdz£¸ß¡£¸Õ²ÅÁоÙÁË¿ÉÒÔÖ´ÐÐÔ¶³ÌÄ£¿éµÄÔªËØ£¬ÕâÐ©ÔªËØµÄ·¾¶ÊôÐÔ£¬¶¼µÃ½øÐÐÖØÐ´·ÃÎÊÆ÷¡£

µ±È» Chrome ¿ÉÒÔºöÂÔÕâ½Ú¡£

ÐÞ¸ÄÊôÐԵķ½·¨

¿ªÍ·Ò²Ìáµ½ÁË£¬³ýÁË setAttribute Í⣬ʹÓà setAttributeNode Ò²ÄÜÉèÖÃÊôÐÔ£¬ÉõÖÁ»¹ÓÐ setAttributeNS °æ±¾µÄ¡£

ÓÉÓÚ setAttribute ÊǸö¾­³£µ÷Óõķ½·¨£¬Òò´Ë¹³×Ó³ÌÐò±ØÐë×ö×ã¹»µÄÓÅ»¯£¬½«¶îÍâµÄ¼ì²âÏûºÄ½µµ½×îµÍ¡£

ÐÂÒ³Ãæ»·¾³

³ýÁËʹÓÃ×î¼òµ¥µÄ¿ò¼Ü£¬Æäʵ»¹ÓÐÆäËû¿ÉÒÔ»ñµÃÐÂÒ³ÃæµÄ;¾¶¡£

µ¯´°

ͨ¹ýµ¯´°Ò²ÄÜ»ñµÃÐÂÒ³Ãæ»·¾³£¬´ó¼Ò¶¼ÖªµÀ¡£µ«ÊÇ´°¿Ú¹Ø±Õ£¬Ò²ËæÖ®Ïú»ÙÁË£¬ÄѵÀ»¹ÄÜʹÓÃÂ𣿲»·Á²âÊÔһϣº

<style> .aa { color: red }</style>
<button id="btn">POPUP</button>
<script>
btn.onclick = function() {
var win = window.open();
var raw_fn = win.Element.prototype.setAttribute;
win.close();
setTimeout(function() {
console.log(raw_fn);
raw_fn.call(btn, 'class', 'aa');
}, 1000);
};
</script>
Run

¾¡¹Ü»áÓÐ˲¼äµÄÉÁ¶¯£¬µ«´Óд°¿ÚÀï»ñÈ¡µÄ±äÁ¿È·Êµ±»±£ÁôÏÂÀ´ÁË£¬²¢ÇÒÒÀÈ»Æð×÷Óá£ÒòΪÎÒÃÇÒýÓÃ×ÅËü£¬ËùÒÔ¼´Ê¹´°¿Ú¹Ø±Õ£¬ÈÔÈ»²»»á¶ÔÆäÄÚ´æ»ØÊյġ£

ÏÖʵÖУ¬¿ÉÒ԰ѵã»÷ʼþ°óÔÚ document ÉÏ£¬ÕâÑùÓû§Ëæ±ãµãÄÄÀï¶¼ÄÜ´¥·¢£¬ÒÔ´Ë»ñµÃ´¿¾»µÄ»·¾³¡£

Òò´Ë£¬ÎÒÃÇ»¹µÃ°Ñµ¯´°º¯Êý£¬Ò²Í¨¹ý¹³×Ó±£»¤ÆðÀ´¡£

³ýÁË×î³£ÓÃµÄ window.open£¬Æäʵ»¹ÓУº

showModalDialog
¡¡¡¡showModelessDialog
¡¡¡¡opener

Èç¹ûµ±Ç°ÍøÒ³ÊÇ´ÓÆäËûÒ³Ãæµã»÷´ò¿ªµÄ£¬ÎÞÂÛÊǵ¯´°»¹Êdz¬Á´½Ó£¬window.opener ¶¼¼Ç¼×ÅÀ´Ô´Ò³µÄ»·¾³¡£

Èç¹ûÊÇÀ´Ô´Ò³ºÍ×Ô¼ºÓÖÊÇͬԴվµã£¬ÉõÖÁ»¹ÄÜ·ÃÎʵ½À´Ô´Ò³ÀïÃæµÄ±äÁ¿¡£

ÕâÖÖÇé¿öÏ൱³£¼û¡£ÀýÈç´ÓÌû×ÓÁбíÒ³£¬µã¿ªÒ»¸öÌû×ÓÏêÇéÒ³£¬ÄÇôÏêÇéÒ³ÊÇÍêÈ«¿ÉÒÔ²Ù¿ØÁбíÒ³µÄ¡£

Òª½â¾öÕâ¸öÎÊÌâÒ²²»ÄÑ£¬Ö±½Ó¸ø window.opener ×¢Èë·À»¤³ÌÐò²»¾Í¿ÉÒÔÁË£¬¾ÍÏñ¶Ô´ýгöÏֵĿò¼ÜÒ³ÄÇÑù¡£

µ«ÊÇ£¬window.opener ¿ÉÄÜÒ²ÓÐ×Ô¼ºµÄ opener£¬Ò»²ã²ãµÝ¹éÉÏÈ¥»òÐíÓкܶࡣÿ¸öÒ³ÃæÒ²ÐíÓÖÓÐ×Ô¼ºµÄ¿ò¼ÜÒ³£¬Òò´Ë·À»¤ window.opener ¿ÉÄÜ»áÖ´Ðзdz£¶àµÄ´úÂë¡£Èç¹ûÔÚ³õʼ»¯Ê±¾Í½øÐУ¬»òÐí»áÓÐÐÔÄÜÎÊÌâ¡£

ÊÂʵÉÏ£¬Õâ¸öÀäÃŵÄÊôÐÔ¼¸ºõ²»ÔõôÓõ½¡£ËùÒÔ²»Èç×ö¸öÑÓʱ²ßÂÔ£ºÖ»ÓеÚÒ»´Î·ÃÎÊ opener µÄʱºò£¬²Å¶ÔÆä½øÐзÀ»¤¡£

ÎÒÃǽ« window.opener ½øÐÐÖØÐ´£¬°ÑËü±ä³ÉÒ»¸ö getter ·ÃÎÊÆ÷£º

var raw_opener = window.opener;
var scanned;
window.__defineGetter__('opener', function() {
if (!scanned) {
installHook(raw_opener);
scanned = true;
}
return raw_opener;
});

ÕâÑù£¬Ö»Òª²»·ÃÎÊ opener£¬¾Í²»»á´¥·¢¶ÔËüµÄ·À»¤£¬×öµ½ÕæÕý°´ÐèÖ´ÐС£

ºó¼Ç

¹ØÓÚ·À»¤¼à¿Øµã£¬Ò²Ã»ÓÐÒ»¸öÍêÕûµÄ´ð°¸£¬ÄÜÏëµ½¶àÉÙËã¶àÉÙ£¬ÒÔºó¿ÉÒÔÂýÂý²¹³ä¡£

µ«ÊÇ£¬×°ÁËÄÇô¶àµÄ¹³×Ó¼°Ê¼þ£¬¶ÔÒ³ÃæµÄÐÔÄÜÓ°ÏìÓжà´óÄØ£¿

ËùÒÔ£¬ÎÒÃÇ»¹µÃ¿ª·¢Ò»¸ö²âÊÔ¿ØÖÆÌ¨£¬À´¸ú×ÙÕâÌ×ϵͳ¡£¿´¿´¼à¿ØÈ«¿ªÊ±£¬»á¶ÔÒ³Ãæ²úÉú¶à´óÓ°Ïì¡£

   
3018 ´Îä¯ÀÀ       38
 
Ïà¹ØÎÄÕÂ

iOSÓ¦Óð²È«¿ª·¢£¬Äã²»ÖªµÀµÄÄÇЩÊÂÊõ
Web°²È«Ö®SQL×¢Èë¹¥»÷
ÒÆ¶¯APP°²È«ÔÚÉøÍ¸²âÊÔÖеÄÓ¦ÓÃ
´ÓGoogle±¸·Ý»¥ÁªÍø¿´¡°Êý¾Ý°²È«¡±
 
Ïà¹ØÎĵµ

web°²È«Éè¼ÆÓë·À»¤
»¥ÁªÍøº£Á¿ÄÚÈݰ²È«´¦Àí¼¼Êõ
ºÚ¿Í¹¥»÷Óë·À·¶¼¼Êõ
WEBºÚºÐ°²È«¼ì²â
 
Ïà¹Ø¿Î³Ì

WEBÍøÕ¾ÓëÓ¦Óð²È«Ô­ÀíÓëʵ¼ù
webÓ¦Óð²È«¼Ü¹¹Éè¼Æ
´´½¨°²È«µÄJ2EE WebÓ¦ÓôúÂë
ÐÅÏ¢°²È«ÎÊÌâÓë·À·¶
×îл¼Æ»®
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ 12-11[±±¾©]
LLM´óÄ£ÐÍÓëÖÇÄÜÌ忪·¢ÊµÕ½ 12-18[±±¾©]
ǶÈëʽÈí¼þ²âÊÔ 12-25[±±¾©]
AIÔ­ÉúÓ¦ÓõÄ΢·þÎñ¼Ü¹¹ 1-9[±±¾©]
AI´óÄ£Ðͱàд¸ßÖÊÁ¿´úÂë 1-14[±±¾©]
ÐèÇó·ÖÎöÓë¹ÜÀí 1-22[±±¾©]

iOSÓ¦Óð²È«¿ª·¢
Web°²È«Ö®SQL×¢Èë¹¥»÷
APP°²È«ÔÚÉøÍ¸²âÊÔÖеÄÓ¦ÓÃ
³õ̽PHPµÄSQL×¢Èë¹¥»÷µÄ¼¼Êõ
´ÓGoogle±¸·Ý¿´¡°Êý¾Ý°²È«¡±


WEBÍøÕ¾ÓëÓ¦Óð²È«Ô­ÀíÓëʵ¼ù
webÓ¦Óð²È«¼Ü¹¹Éè¼Æ
´´½¨°²È«µÄJ2EE WebÓ¦ÓôúÂë
×¢²áÐÅÏ¢°²È«×¨ÒµÈËÔ±(CISP)
ÐÅÏ¢°²È«¹ÜÀí
ÐÅÏ¢°²È«ÎÊÌâÓë·À·¶


ÖйúÒøÐÐ ÐÅÏ¢°²È«¼¼Êõ¼°Éî¶È·ÀÓù
WebÓ¦Óð²È«¼Ü¹¹¡¢ÈëÇÖ¼ì²âÓë·À»¤
ij²ÆË°ÁìÓòÖªÃûIT·þÎñÉÌ Web°²È«²âÊÔ
ÆÕÈð¿Ë˹ web°²È«Éè¼Æ¡¢²âÊÔÓëÓÅ»¯
±±¾©ºÍÀûʱ ÐÔÄܺͰ²È«ÐÔ²âÊÔ
SUNÖйú¹¤³ÌÑо¿Ôº JSF¿ò¼Ü¡¢°²È«