±¾ÎÄÒªµã£º
Á˽âÕë¶ÔNoSQLµÄÐµİ²È«Â©¶´
ÎåÀàNoSQL¹¥»÷ÊֶΣ¬±ÈÈçÖØÑÔʽ¡¢ÁªºÏ²éѯ¡¢JavaScript ×¢Èë¡¢±³¸ºÊ½²éѯ£¨Piggybacked
queries£©£¬ÒÔ¼°¿çÓòÎ¥¹æ
OWASP×éÖ¯Õë¶Ô¼ì²éNoSQL×¢Èë´úÂëµÄ½¨Òé
Á˽âÈçºÎ»º½â°²È«·çÏÕ
ÈçºÎÔÚÕû¸öÈí¼þ¿ª·¢ÖÜÆÚÖÐÕûºÏNoSQLÊý¾Ý¿â©¶´µÄ¹ÜÀí
±¾ÆªÎÄÕÂÒѾÔÚIEEE Software ÔÓÖ¾ÉÏÊ×·¢¡£IEEE Software ¾Í½ñÌìµÄÕ½ÂÔÐÔ¼¼ÊõÎÊÌâÌṩÁ˿ɿ¿µÄ¡¢¾×¨¼ÒÆÀÉó¹ýµÄÐÅÏ¢¡£IT¹ÜÀíÕߺͼ¼ÊõÁìµ¼Ó¦ÒÀ¿¿ÐÂÏȽø½â¾ö·½°¸µÄITרҵÈËÔ±£¬ÒÔÓ½ÓÔËÐпɿ¿µÄ¡¢Áé»îµÄÆóÒµÕâÒ»ÌôÕ½¡£
NoSQL£¨²»½ö½öÊÇNoSQL£©Êý¾Ý´æ´¢ÏµÍ³ÒѾ·Ç³£Á÷ÐУ¬ÒòΪËüÃÇÒ×À©Õ¹ÇÒÒ×ÓÚʹÓ᣾¡¹ÜNoSQLÊý¾Ý´æ´¢µÄеÄÊý¾ÝÄ£ÐͺͲéѯ¸ñʽÁîÔÀ´µÄ¹¥»÷²»ÔÙÓÐЧÁË£¬µ«¹¥»÷ÕßÈ´¿ÉÒÔѰÕÒÐÂµÄÆõ»ú²åÈë¶ñÒâ´úÂë¡£
Êý¾Ý¿â°²È«ÊÇÐÅÏ¢°²È«µÄÒ»¸öÖØÒªÄÚÈÝ¡£·ÃÎÊÆóÒµÊý¾Ý¿âÊÚȨ¹¥»÷ÕßÄܹ»³ä·Ö¿ØÖƹؼüÐÔÊý¾Ý¡£ÀýÈ磬SQL×¢Èë¹¥»÷°Ñ¶ñÒâ´úÂë²åÈëµ½Ó¦ÓÃÏòÊý¾Ý¿â²ã·¢Ë͵ÄÓï¾äÖС£Õâʹ¹¥»÷Õß¼¸ºõÄܶÔÊý¾Ý×öÈκβÙ×÷£¬°üÀ¨·ÃÎÊδÊÚȨµÄÊý¾Ý£¬ÒÔ¼°Ð޸ġ¢É¾³ýºÍ²åÈëÊý¾Ý¡£¾¡¹ÜÓÉÓÚ¿ò¼Ü¸ü°²È«¡¢ÈËÃÇÒâʶ¸üÇ¿£¬SQL×¢ÈëÕâÖÖÊֶεÄÀûÓÃÂʽü¼¸ÄêÀ´ÒѾÎȲ½Ï½µ£¬µ«ËüÈÔÈ»ÊǸö¸ßΣµÄϵͳ©¶´¡£ÀýÈ磬WebÓ¦ÓÃÿÔÂÊܵ½ËĴλò¸ü¶à´ÎWeb¹¥»÷»î¶¯£¬¶øSQL×¢ÈëÈÔÈ»Êǹ¥»÷ÁãÊÛÉÌ×îÁ÷Ðеķ½Ê½1¡£´ËÍ⣬SQL×¢Èë©¶´¶Ô32%µÄWebÓ¦Óö¼ÓÐÓ°Ïì¡£
NoSQL£¨²»½ö½öÊÇSQL£©ÊÇÊý¾Ý´æ´¢µÄÒ»¸öÁ÷ÐÐÇ÷ÊÆ£»Ëü·ºÖ¸ÒÀÀµÓÚ²»Í¬´æ´¢»úÖÆµÄ·Ç¹ØÏµÐÍÊý¾Ý¿â£¬ÕâЩ´æ´¢»úÖÆ°üÀ¨Îĵµ´æ´¢¡¢¼üÖµ¶Ô´æ´¢ºÍͼ¡£ÕâЩÊý¾Ý¿âµÄ¹ã·ºÓ¦ÓÃÊÇÓÉÏÖ´ú´óÐÍÓ¦ÓÃÍÆ¶¯ÆðÀ´µÄ£¬±ÈÈçFacebook¡¢AmazonºÍTwitter£¬ËüÃÇÐèÒª°ÑÊý¾Ý·Ö²¼µ½Ðí¶àµÄ·þÎñÆ÷ÉÏ¡£´«Í³¹ØÏµÐÍÊý¾Ý¿â²»Âú×ãÕâÖÖÀ©Õ¹ÐÔÐèÇó£¬ËüÃÇÐèÒªÒ»¸öµ¥¶ÀµÄÊý¾Ý¿â½ÚµãÈ¥Ö´ÐÐͬһÊÂÎñµÄËùÓвÙ×÷¡£
ÓÚÊÇ£¬·¢Õ¹³öÒ»Åú·Ö²¼Ê½µÄ¡¢NoSQL¼üÖµ¶Ô´æ´¢À´Âú×ãÕâЩ´óÐÍÓ¦ÓõÄÀ©Õ¹ÐÔÐèÇó¡£ÕâЩÊý¾Ý´æ´¢°üÀ¨ÏñMongoDBºÍCassandraÖ®ÀàµÄNoSQLÊý¾Ý¿â£¬Ò²ÓÐÏñRedisºÍMemcachedÕâÑùµÄÄÚ´æºÍ»º´æ´æ´¢¡£È·Êµ£¬NoSQLµÄÊÜ»¶Ó³Ì¶ÈÔÚ¹ýÈ¥¼¸ÄêÀ´Ò»Ö±ÔÚÎȶ¨ÉÏÉý£¬ÆäÖÐMongoDBÔÚ10¸ö×îÁ÷ÐеÄÊý¾Ý¿âÖÐÅŵ½Á˵ÚËÄ룬Èçͼ1Ëùʾ¡£

ͼ1 db-engines.com 2015Äê8ÔÂÁ÷ÐжÈÅÅÃûÖÐǰʮ¸ö×îÊÜ»¶ÓµÄÊý¾Ý¿â¡£ÆäÖÐNoSQLÊý¾Ý¿âÓÐMongoDB¡¢CassandraºÍRedis¡£ÕâÈý¿îµÄÊÜ»¶Ó³Ì¶ÈÈÔÔÚÉÏÉý¡£
ÔÚ±¾ÎÄÖУ¬ÎÒÃǽ«·ÖÎöNoSQLµÄÍþвºÍ¼¼Êõ£¬ÒÔ¼°ËüÃǵĻº½â»úÖÆ¡£
NoSQL ©¶´
¼¸ºõ¾ÍÏñÿÖÖм¼ÊõÒ»Ñù£¬NoSQLÊý¾Ý¿âÔÚ¸Õ³öÏÖʱ»¹²»¹»°²È«3¨C5¡£ËüÃǵ±³õȱ·¦¼ÓÃÜ¡¢Êʵ±µÄÈÏÖ¤¡¢½ÇÉ«¹ÜÀíºÍϸÁ£¶ÈµÄÊÚȨµÈ6¡£´ËÍ⣬ËüÃÇ»¹»á³öÏÖΣÏյķçÏÕ±©Â¶ºÍ¾Ü¾ø·þÎñ¹¥»÷3¡£Èç½ñ£¬Çé¿öÒѾºÃתÁË£¬Á÷ÐеÄÊý¾Ý¿âÒѾÒýÈëÁËÄÚÖõı£»¤»úÖÆ7¡£
NoSQLÊý¾Ý¿âʹÓò»Í¬µÄ²éѯÓïÑÔ£¬Õâʹ´«Í³µÄSQL×¢Èë¼¼ÊõÒѾÎÞЧÁË¡£µ«ÕâÊÇ·ñÒâζ×ÅNoSQLϵͳ¶Ô×¢ÈëÃâÒßÄØ£¿ÎÒÃǵÄÑо¿±íÃ÷£¬¾¡¹ÜÕâ¸ö²éѯÓïÑÔ¼°ÆäÇý¶¯µÄ°²È«ÐÔÒѾ´óÐÍÌáÉý£¬µ«ÈÔÈ»´æÔÚ×Å×¢Èë¶ñÒâ²éѯµÄÊֶΡ£ÒѾÓÐÈËÕûÀí³öÁËNoSQL×¢Èë¼¼ÊõµÄÁбí1,3,4¡£ÓÐЩ³õ²½Ó¦ÓÃɨÃèÏîÄ¿ÒѾӿÏÖ³öÀ´ÁË£¨ÀýÈçnosqlproject.com£©£¬¶øÇÒ¿ª·ÅʽWebÓ¦ÓóÌÐò°²È«ÏîÄ¿£¨OWASP£¬Open
Web Application Security Project£©ÒѾ¹«²¼Á˼ì²éNoSQL×¢Èë´úÂëµÄ½¨Ò顣Ȼ¶ø£¬ÕâЩ»¹½ö½öÊdzõ²½³É¹û£¬ÕâЩÎÊÌâÉÐδµÃµ½³ä·ÖµÄÑо¿£¬²¢ÇÒδµÃµ½Ó¦ÓеĹØ×¢¡£
NoSQL¹¥»÷;¾¶
WebÓ¦ÓúͷþÎñͨ³£Ê¹ÓÃNoSQLÊý¾Ý¿âÈ¥±£´æ¿Í»§Êý¾Ý¡£Í¼2չʾÁËÒ»¸öµäÐ͵ļܹ¹£¬ÔÚ´ËNoSQLÓÃÓÚ±£´æÍ¨¹ýWebÓ¦ÓÃÀ´´æÈ¡µÄÊý¾Ý¡£Í¨¹ýÒ»¸öÇý¶¯³ÌÐòÀ´½øÐÐÕâ¸öÊý¾Ý¿âµÄ·ÃÎÊ£¬¼´Ò»¸ö´æÈ¡ÐÒé°ü×°Æ÷£¬ËüΪ¶àÖÖ±à³ÌÓïÑÔ±àдµÄÊý¾Ý¿â¿Í»§¶ËÌṩÀà¿â¡£¾¡¹Ü¸ÃÇý¶¯³ÌÐò×ÔÉí¿ÉÄܲ»Ò×Êܵ½¹¥»÷£¬µ«ÓÐʱËüÃÇÌṩÁ˲»°²È«µÄAPI£¬µ±Ó¦Óÿª·¢ÈËÔ±´íÎóµØÊ¹ÓÃËüÃÇʱ£¬¾Í»á¸ø¸ÃÓ¦ÓÃÒýÈë©¶´ÁË£¬ÕâЩ©¶´»á±»ÈËÀûÓöÔÊý¾Ý¿â½øÐÐÈÎÒâ²Ù×÷¡£Èçͼ2Ëùʾ£¬¹¥»÷Õß¿ÉÒÔαÔìÒ»¸ö´øÓÐ×¢Èë´úÂëµÄWeb·ÃÎÊÇëÇ󣬵±Êý¾Ý¿â¿Í»§¶Ë»òÐÒé°ü×°Æ÷½øÐд¦Àíʱ£¬½«»áÖ´ÐÐÔ¤ÆÚµÄ·Ç·¨Êý¾Ý¿â²Ù×÷¡£

ͼ2 µäÐÍWebÓ¦Óüܹ¹¡£NoSQLÓÃÓÚ±£´æÍ¨¹ýWebÓ¦ÓÃÀ´´æÈ¡µÄÊý¾Ý¡£Í¨¹ýÒ»¸öÇý¶¯³ÌÐòÀ´½øÐÐÕâ¸öÊý¾Ý¿âµÄ·ÃÎÊ£¬¼´Ò»¸ö´æÈ¡ÐÒé°ü×°Æ÷£¬ËüΪ¶àÖÖ±à³ÌÓïÑÔ±àдµÄÊý¾Ý¿â¿Í»§¶ËÌṩÀà¿â¡£¾¡¹Ü¸ÃÇý¶¯³ÌÐò×ÔÉí¿ÉÄܲ»Ò×Êܵ½¹¥»÷£¬µ«ÓÐʱËüÃÇÌṩÁ˲»°²È«µÄAPI£¬µ±Ó¦Óÿª·¢ÈËÔ±´íÎóµØÊ¹ÓÃËüÃÇʱ£¬¾Í»á¸ø¸ÃÓ¦ÓÃÒýÈë©¶´ÁË¡£
NoSQLÏà¹ØµÄSQL¹¥»÷Ö÷Òª»úÖÆ¿ÉÒÔ´óÖ·ÖΪÒÔÏÂÎåÀࣺ
ÖØÑÔʽ¡£ÓÖ³ÆÎªÓÀÕæÊ½¡£´ËÀ๥»÷ÊÇÔÚÌõ¼þÓï¾äÖÐ×¢Èë´úÂ룬ʹÉú³ÉµÄ±í´ïʽÅж¨½á¹ûÓÀÔ¶ÎªÕæ£¬´Ó¶øÈƹýÈÏÖ¤»ò·ÃÎÊ»úÖÆ¡£ÀýÈ磬ÔÚ±¾ÎÄÖУ¬ÎÒÃǽ«Õ¹Ê¾¹¥»÷ÕßÈçºÎÓÃ$ne²Ù×÷£¨²»ÏàµÈ£©µÄÓï·¨ÈÃËûÃÇÎÞÐèÏàÓ¦µÄƾ֤¼´¿É·Ç·¨½øÈëϵͳ¡£
ÁªºÏ²éѯ¡£ÁªºÏ²éѯÊÇÒ»ÖÖÖÚËùÖÜÖªµÄSQL×¢Èë¼¼Êõ£¬¹¥»÷ÕßÀûÓÃÒ»¸ö´àÈõµÄ²ÎÊýÈ¥¸Ä±ä¸ø¶¨²éѯ·µ»ØµÄÊý¾Ý¼¯¡£ÁªºÏ²éѯ×î³£ÓõÄÓ÷¨ÊÇÈÆ¹ýÈÏÖ¤Ò³Ãæ»ñÈ¡Êý¾Ý¡£ÔÚ±¾ÎÄÖУ¬ÎÒÃǽ«Õ¹Ê¾Ò»¸ö¹¥»÷ʾÀý£¬Ëü½«Í¨¹ýÔö¼ÓÓÀÕæµÄ±í´ïʽÀûÓò¼¶ûORÔËËã·û½øÐй¥»÷£¬´Ó¶øµ¼ÖÂÕû¸öÓï¾äÅж¨³ö´í£¬½øÐзǷ¨µÄÊý¾Ý»ñÈ¡¡£
JavaScript×¢Èë¡£ÕâÊÇÒ»ÖÖеĩ¶´£¬ÓÉÔÊÐíÖ´ÐÐÊý¾ÝÄÚÈÝÖÐJavaScriptµÄNoSQLÊý¾Ý¿âÒýÈëµÄ¡£JavaScriptʹÔÚÊý¾ÝÒýÇæ½øÐи´ÔÓÊÂÎñºÍ²éѯ³ÉΪ¿ÉÄÜ¡£´«µÝ²»¸É¾»µÄÓû§ÊäÈëµ½ÕâЩ²éѯÖпÉÒÔ×¢ÈëÈÎÒâJavaScript´úÂ룬Õâ»áµ¼Ö·Ƿ¨µÄÊý¾Ý»ñÈ¡»ò´Û¸Ä¡£
±³¸ºÊ½²éѯ¡£ÔÚ±³¸ºÊ½²éѯÖУ¬¹¥»÷Õßͨ¹ýÀûÓÃתÒåÌØ¶¨×Ö·û£¨±ÈÈçÏñ»Ø³µºÍ»»ÐÐÖ®ÀàµÄ½áÊø·û£©²åÈëÓÉÊý¾Ý¿â¶îÍâÖ´ÐеIJéѯ£¬ÕâÑù¾Í¿ÉÒÔÖ´ÐÐÈÎÒâ´úÂëÁË¡£
¿çÓòÎ¥¹æ¡£HTTP REST APIsÊÇNoSQLÊý¾Ý¿âÖеÄÒ»¸öÁ÷ÐÐÄ£¿é£¬È»¶ø£¬ËüÃÇÒýÈëÁËÒ»Ààеĩ¶´£¬ËüÉõÖÁÄÜÈù¥»÷Õß´ÓÆäËûÓò¹¥»÷Êý¾Ý¿â¡£ÔÚ¿çÓò¹¥»÷ÖУ¬¹¥»÷ÕßÀûÓúϷ¨Óû§ºÍËûÃǵÄÍøÒ³ä¯ÀÀÆ÷Ö´ÐÐÓк¦µÄ²Ù×÷¡£ÔÚ±¾ÎÄÖУ¬ÎÒÃǽ«Õ¹Ê¾´ËÀà¿çÕ¾ÇëÇóαÔ죨CSRF£©¹¥»÷ÐÎʽµÄÎ¥¹æÐÐΪ£¬ÔÚ´ËÍøÕ¾ÐÅÈεÄÓû§ä¯ÀÀÆ÷½«±»ÀûÓÃÔÚNoSQLÊý¾Ý¿âÉÏÖ´ÐзǷ¨²Ù×÷¡£Í¨¹ý°ÑHTML¸ñʽµÄ´úÂë×¢Èëµ½ÓЩ¶´µÄÍøÕ¾»òÕßÆÛÆÓû§½øÈëµ½¹¥»÷Õß×Ô¼ºµÄÍøÕ¾ÉÏ£¬¹¥»÷Õß¿ÉÒÔÔÚÄ¿±êÊý¾Ý¿âÉÏÖ´ÐÐpost¶¯×÷£¬´Ó¶øÆÆ»µÊý¾Ý¿â¡£
JSON²éѯÒÔ¼°Êý¾Ý¸ñʽ
¾¡¹ÜÏà¶Ô°²È«£¬µ«Á÷ÐеÄJSON±íÊö¸ñʽÈÔ¿ÉÊܵ½ÐÂÀàÐ͵Ä×¢Èë¹¥»÷¡£ÎÒÃǽ«¾ÙÀý˵Ã÷MongoDBÖеĴËÀ๥»÷£¬MongoDBÊÇÒ»¸öÃæÏòÎĵµµÄÊý¾Ý¿â£¬ÒѾÓжà¸ö´óÐ͹©Ó¦ÉÌÓèÒÔ²ÉÓã¬ÆäÖаüÀ¨eBay¡¢FoursquareºÍLinkedIn¡£
ÔÚMongoDBÖУ¬²éѯºÍÊý¾ÝÒÔJSON¸ñʽÃèÊö£¬ÕâÔÚ°²È«·½ÃæÒªÓÅÓÚSQL£¬ÒòΪËüÊǸü³ä·Ö¶¨ÒåµÄ£¬ÈÝÒ×½øÐмÓÃܺͽâÃÜ£¬¶øÇÒÔÚÿÖÖ±à³ÌÓïÑÔÖж¼Óв»´íµÄÔÉúʵÏÖ¡£ÏñSQL×¢ÈëÄÇÑù¶Ô²éѯ½á¹¹µÄÆÆ»µ£¬ÔÚJSON½á¹¹µÄ²éѯÖлá¸üÄÑʵÏÖ¡£ÔÚMongoDBÖг£¼ûµÄ²åÈëÓï¾äÓ¦¸ÃÊÇÕâÑùµÄ£º
db.books.insert({
title: ¡®The Hobbit¡¯ , author: ¡®J.R.R. Tolkien¡¯
}) |
Õâ»á²åÈëÒ»¸öеÄÎĵµµ½booksµÄ¼¯ºÏÖУ¬Ëü¾ßÓÐtitle£¨±êÌ⣩ºÍauthor£¨×÷Õߣ©×ֶΡ£³£¼ûµÄ²éѯÌõ¼þÓ¦¸ÃÊÇÕâÑùµÄ£º
db.books.find({
title: ¡®The Hobbit¡¯ }) |
³ýÏÞÖÆÒª²éѯµÄ×Ö¶ÎÖ®Í⣬²éѯÖл¹¿ÉÒÔ°üÀ¨ÕýÔò±í´ïʽºÍÌõ¼þ¡£
PHPÖØÑÔʽעÈë
ÈÃÎÒÃÇÉóÊÓÒ»ÏÂͼ3ÖÐËù»µÄ¼Ü¹¹£¬Ò»¸öʹÓÃPHPʵÏÖºó¶ËµÄWebÓ¦Óã¬Ëü½«ÓÃÓÚ²éѯÊý¾Ý´æ´¢µÄÇëÇó±àÂëΪJSON¸ñʽ¡£ÈÃÎÒÃÇʹÓÃÒ»¸öMongoDBʾÀýÈ¥ÑÝʾÊý×é×¢Èë©¶´°É£¬´Ó¼¼ÊõºÍ½á¹ûÉÏÀ´¿´ÕâÊÇÒ»¸öÓëSQL×¢ÈëÓÐЩÀàËÆµÄ¹¥»÷ÊֶΡ£

ͼ3 ʹÓÃMongoDBµÄPHPÓ¦Óá£Ò»¸öʹÓÃPHPʵÏÖºó¶ËµÄWebÓ¦Óã¬Ëü°ÑÓÃÓÚ²éѯÊý¾Ý´æ´¢µÄÇëÇó±àÂëΪJSON¸ñʽ¡£
PHP±àÂëÊý×éΪÔÉúJSON¡£àÅ£¬Êý×éʾÀýÈçÏ£º
array(¡®title¡¯
=> ¡®The Hobbit¡¯ , ¡®author¡¯ => ¡®J.R.R. Tolkien¡¯); |
½«ÓÉPHP±àÂëΪÒÔÏÂJSON¸ñʽ£º
db.books.find({
title: ¡®The Hobbit¡¯ }) |
Èç¹ûÒ»¸öPHP¾ßÓеǼ»úÖÆ£¬ÓÉÓû§ä¯ÀÀÆ÷ͨ¹ýHTTP POST£¨ËüÏñHTTP GETÒ»ÑùÈÝÒ×Êܵ½¹¥»÷£©·¢Ë͹ýÀ´Óû§ºÍÃÜÂ룬³£¼ûµÄPOST
URL±àÂëÓ¦¸ÃÊÇÕâÑùµÄ£º
username=Tolkien&password
= hobbit |
ºó¶ËPHP´úÂëÕë¶Ô¸ÃÓû§¶ÔËü½øÐд¦Àí²¢²éѯMongoDB£¬ÈçÏÂËùʾ£º
db->logins->find(array(¡°username¡±=>$_
POST[¡°username¡±], ¡°password¡±=>$_POST[¡°password¡±])); |
Õâ±¾ÉíºÏÇéºÏÀíûʲôÎÊÌ⣬ֱ¾õÉÏ¿ª·¢ÈËÔ±¿ÉÄÜϲ»¶ÓÃÒÔϲéѯ£º
db.logins.find({
username: ¡®tolkien¡¯, password: ¡®hobbit¡¯}) |
È»¶ø£¬PHPÕë¶Ô¹ØÁªÊý×éÓиöÄÚÖõĻúÖÆ£¬ÕâÈù¥»÷ÕßÓлú¿É³Ë£¬¿É·¢ËÍÒÔ϶ñÒâµÄÊý¾Ý£º
username[$ne]=1&password[$ne]=1 |
PHP»á°Ñ¸ÃÊäÈë½âÎöΪ£º
array(¡°username¡±
=> array(¡°$[ne] ¡° => 1), ¡° password¡± =>
array(¡°$ne¡± => 1));, |
Ëü»á±àÂëΪÈçÏÂMongoDB²éѯ£º
db.logins.find
({ username: {$ne:1 }, password {$ne: 1 }) |
ÒòΪ$neÊÇMongoDBÓÃÀ´Åж¨Ìõ¼þÊÇ·ñ²»ÏàµÈµÄ£¬ËùÒÔËü»á²éѯµÇ¼¼¯ºÏÖеÄËùÓÐÓû§Ãû³Æ²»µÈÓÚ1ÇÒÃÜÂëÒ²²»µÈÓÚ1µÄ¼Ç¼¡£Òò´Ë£¬±¾´Î²éѯ½«·µ»ØµÇ¼¼¯ºÏÖеÄËùÓÐÓû§¡£»»³ÉSQLµÄ±íÊö·¨£¬¾ÍµÈͬÓÚÒÔϲéѯÓï¾ä£º
SELECT * FROM
logins WHERE username <> 1 AND password
<> 1 |
ÔÚÕâÖÖÇé¿öÏ£¬Â©¶´¾ÍΪ¹¥»÷ÕßÌṩÁËÒ»¸ö²»±ØÓÐЧƾ֤¼´¿ÉµÇ¼ӦÓõķ½Ê½¡£ÔÚÆäËû±äÌåÖУ¬¸Ã©¶´¿ÉÄܻᵼÖ·Ƿ¨Êý¾Ý·ÃÎÊ»òÓÉÎÞÌØÈ¨µÄÓû§Ö´ÐÐÌØÈ¨²Ù×÷¡£Îª»º½âÕâ¸öÎÊÌ⣬ÎÒÃÇÐèҪת»»´ÓÐèÇóÖнÓÊյIJÎÊýΪÊʵ±ÀàÐÍ£¬ÔÚ±¾ÀýÖУ¬¿ÉʹÓÃ×Ö·û´®£¬ÈçÏÂËùʾ£º
db->logins->find(
array(¡°username¡±=>(string)$_ POST[¡°username¡±],
¡°password¡±=>(string)$_ POST[¡°password¡±])); |
NoSQLÁªºÏ²éѯעÈë
SQL×¢Èë©¶´¾³£ÊÇÓÉÓÚδ¶ÔÓû§ÊäÈë½øÐÐÊʵ±±àÂë¶øÖ±½ÓÆ´½Ó²éѯÔì³ÉµÄ¡£ÔÚMongoDBÖ®ÀàµÄÁ÷ÐÐÊý¾Ý´æ´¢ÖУ¬JSON²éѯ½á¹¹Ê¹¹¥»÷±äµÃ¸üÄÑÁË¡£È»¶ø£¬Õâ²¢²»´ú±í²»¿ÉÄÜ¡£
ÈÃÎÒÃÇ¿´Ò»¸öͨ¹ýHTTP POST·¢ËÍÓû§ÃûºÍÃÜÂë²ÎÊýµ½ºó¶ËµÄµÇ¼±íµ¥£¬Ëüͨ¹ýÆ´½Ó×Ö·û´®µÄ·½Ê½µÃµ½²éѯÓï¾ä¡£ÀýÈ磬¿ª·¢ÈËÔ±¿ÉÄÜ»áÕâô×ö£º
string query
= ¡°{ username: ¡®¡± + post_ username + ¡°¡¯, password:
¡®¡± + post_passport + ¡® ¡° }¡± |
¾ßÓÐÓÐЧÊäÈëʱ£¬µÃµ½µÄ²éѯÓï¾äÊÇÓ¦¸ÃÕâÑùµÄ£º
{ username:
¡®tolkien¡¯, password: ¡®hobbit¡¯ } |
µ«¾ßÓжñÒâÊäÈëʱ£¬Õâ¸ö²éѯÓï¾ä»á±»×ª»»ÎªºöÂÔÃÜÂëµÄ£¬ÔÚÎÞÐèÃÜÂëµÄÇé¿öϵǼÓû§Õ˺š£¶ñÒâÊäÈëʾÀýÈçÏ£º
username=tolkien¡¯,
$or: [ {}, {¡®a¡¯: ¡®a&password=¡¯ }],
$comment: ¡®successful MongoDB injection¡¯ |
¸ÃÊäÈë»á±»¹¹½¨µ½¸Ã²éѯÖУº
{ username:
¡®tolkien¡¯, $or: [ {}, { ¡®a¡¯: ¡®a¡¯, password ¡®¡¯
} ], $comment: ¡®successful MongoDB injection¡¯
} |
Ö»ÒªÓû§ÃûÊÇÕýÈ·µÄ£¬Õâ¸ö²éѯ¾Í¿ÉÒԳɹ¦¡£×ª»»³ÉSQLµÄ±íÊö£¬Õâ¸ö²éѯÀàËÆÓÚÒÔÏÂÓï¾ä£º
SELECT * FROM
logins WHERE username = ¡®tolkien¡¯ AND (TRUE OR
(¡®a¡¯=¡¯a¡¯ AND password = ¡®¡¯)) #successful MongoDB
injection |
ÃÜÂë³ÉΪÕâ¸ö²éѯ¶àÓàµÄÒ»²¿·Ö£¬ÒòΪ£¨£©ÄÚµÄÌõ¼þ×ÜÎªÕæ£¬ËùÒÔ²»»áÓ°Ïìµ½²éѯµÄ×îÖÕ½á¹û¡£
ÕâÊÇÔõô·¢ÉúµÄÄØ£¿ÒÔÏÂΪƴ½Ó³öµÄ²éѯ´®£¬Óû§ÊäÈëΪ¼Ó´Ö×ÖÌ壬ʣÓàµÄÎı¾´®ÎªÎÞ¸ñʽ×ÖÌ壺
{ username:
¡®tolkien¡¯, $or: [ {}, { ¡®a¡¯: ¡®a¡¯, password ¡®¡¯
} ], $comment: ¡®successful MongoDB injection¡¯
} |
Õâ¸ö¹¥»÷ÔÚÈκÎÖ»ÒªÓû§ÃûÕýÈ·µÄÇé¿ö϶¼½«³É¹¦£¬Ò»°ãµÃµ½¸öÓû§Ãû²¢²»ÊÇʲôÄÑÊ¡£
NoSQL JavaScript×¢Èë
NoSQLÊý¾Ý¿âÖÐÓиö¹²Í¬ÌØÐÔ£¬ÄǾÍÊÇ¿ÉÒÔÔÚÊý¾Ý¿âÒýÇæÖÐÔËÐÐJavaScript£¬´Ó¶ø¿ÉÒÔÖ´Ðи´ÔӵIJéѯ»òMapReduceÖ®ÀàµÄÊÂÎñ¡£°üÀ¨MongoDB
ºÍ CouchDB¼°ÆäºóÐøµÄ Cloudant ºÍ BigCouchµÈÁ÷ÐеÄÊý¾Ý¿â¶¼ÔÊÐíÕâô×ö¡£Èç¹û²»¸É¾»µÄÓû§ÊäÈë·¢ÏÖÕâÖÖ²éѯ·½Ê½µÄ»°£¬ÕâôִÐÐJavaScript¾ÍµÈÓڰѱ¡ÈõÃæ±©Â¶¸ø¹¥»÷ÕßÁË¡£ÀýÈ磬ÉèÏëÒ»¸öÐèÒªJavaScript´úÂëµÄ¸´ÔÓÊÂÎñ£¬°üº¬Óв»¸É¾»µÄÓû§ÊäÈë×÷Ϊ²éѯµÄ²ÎÊý¡£ÈÃÎÒÃÇ¿´Ò»ÏÂËüµÄ´æ´¢Ä£ÐÍ£¬Ëü±£´æÁËÒ»×éÌõÄ¿£¬Ã¿¸öÌõÄ¿¾ßÓм۸ñºÍÊýÁ¿ÊôÐÔ¡£ÎªµÃµ½ÕâЩÊôÐÔµÄ×ÜÊý»òƽ¾ùÖµ£¬¿ª·¢ÈËÔ±±àдÁËÒ»¸öMapReduceº¯Êý£¬Ëü´ÓÓû§ÄÇÀï½ÓÊÕÊýÁ¿»ò¼Û¸ñ×÷Ϊ²ÎÊý£¬È»ºó½øÐд¦Àí¡£ÔÚPHPÖУ¬¿´ÆðÀ´ÊÇÈçÏ´úÂ루$paramÊÇÓû§ÊäÈ룩£º
$map = ¡°function()
{ for (var i = 0; i < this.items.length; i++)
{ emit(this.name, this.items[i].$param); } }¡±;
$reduce = ¡°function(name, sum) { return Array.sum(sum);
}¡±; $opt = ¡°{ out: ¡®totals¡¯ }¡±; $db->execute(¡°db.stores.
mapReduce($map, $reduce, $opt);¡±); |
Õâ¶Î´úÂë°Ñÿ¸öÌõÄ¿°´Ãû³Æ¸ø¶¨µÄ$paramºÏ¼ÆÆðÀ´¡£µ±Ê±£¬$paramÔ¤ÆÚÊǽÓÊÕÊýÁ¿£¨amount£©»ò¼Û¸ñ£¨price£©µÄ£¬Õâ¶Î´úÂ뽫°´Ô¤ÆÚ½øÐÐÔËת¡£µ«ÊÇ£¬ÒòΪÓû§ÊäÈëδ±»×ªÒ壬ËùÒÔ¶ñÒâÊäÈ루Ëü¿ÉÄܰüº¬ÈÎÒâJavaScript£©½«±»Ö´ÐС£
¿´Ò»ÏÂÈçÏÂÊäÈ룺
a);}},function(kv)
{ return 1; }, { out: ¡®x¡¯ });db.injection. insert({success:1});return
1;db.stores.mapReduce(function() { { emit(1,1 |
µÚÒ»²¿·ÖµÄÊý¾Ý»á±ÕºÏ×î³õµÄMapReduceº¯Êý£¬È»ºó¹¥»÷Õ߾ͿÉÒÔÔÚÊý¾Ý¿âÉÏÖ´ÐÐÏëÒªµÄJavaScriptÁË£¨¼Ó´Ö²¿·Ö£©¡£×îÖÕ£¬×îºóÒ»²¿·Öµ÷ÓÃÒ»¸öеÄMapReduceÒÔ±£³Ö±»×¢Èë´úÂëµÄÔʼÓï¾äµÄƽºâ¡£ÔڰѻᱻִÐеÄÓû§ÊäÈëºÏ²¢µ½Îª×Ö·û´®ºó£¬ÎÒÃǵõ½ÒÔÏ´úÂ루עÈëµÄÓû§ÊäÈë¼Ó´ÖÏÔʾ£©£º
db.stores.mapReduce(function()
{ for (var i = 0; i < this.items.length; i++)
{ emit(this.name, this.items[i].a); } },function(kv)
{ return 1; }, { out: ¡®x¡¯ }); db.injection.insert({success:1});
return 1;db.stores. mapReduce(function() { { emit(1,1);
} }, function(name, sum) { return Array. sum(sum);
}, { out: ¡®totals¡¯ });¡± |
Õâ¸ö×¢Èë¿´ÆðÀ´Óë¾µäµÄSQL×¢Èë·Ç³£ÏàËÆ¡£·ÀÓù´ËÀ๥»÷µÄÒ»ÖÖ·½Ê½ÊÇÔÚÊý¾Ý¿âÅäÖÃÖнûÖ¹Ö´ÐÐJavaScript¡£Èç¹ûJavaScriptÊDZØÐèµÄ£¬ÄÇô×îºÃµÄ²ßÂÔÊDz»Ê¹ÓÃÈκÎÓû§ÊäÈë¡£
¼üÖµ¶ÔÊý¾Ý´æ´¢
ÏñMemcached¡¢RedisºÍTachyonÖ®ÀàµÄ¼üÖµ¶Ô´æ´¢ÊÇÄÚ´æÊý¾Ý´æ´¢£¬Ö¼ÔÚ¼Ó¿ìÓ¦Óá¢ÔƼܹ¹ºÍƽ̨ÒÔ¼°´óÊýÁ¿¿ò¼ÜµÄÖ´ÐÐËÙ¶È¡£ÕâЩƽ̨¿¼ÂǵÄÊÇ·´¸´Æµ·±·ÃÎʵÄÊý¾ÝµÄ´æ´¢ºÍ¼ìË÷¡£ËüÃÇͨ³£´¦ÓÚÊý¾Ý´æ´¢Ö®Ç°£¬Èçͼ4Ëùʾ¡£»º´æ¼Ü¹¹¾³£´æ´¢ÈÏÖ¤ÁîÅÆ¼°ÈÝÆ÷·ÃÎÊ¿ØÖÆÁÐ±í£¬¶ÔÓÚÿ¸öºóÐøµÄÓû§ÇëÇó±ØÐëÖØÐÂʹÆäÉúЧ¡£

ͼ4 ·Ö²¼Ê½ÄÚ´æÊý¾Ý´æ´¢¼Ü¹¹¡£±»¹¥»÷µÄWeb·þÎñÆ÷ʹÓÃÒ»¸ö¼üÖµÊý¾Ý´æ´¢½øÐпìËÙÊý¾Ý¼ìË÷¡£¶ÔÊý¾Ý´æ´¢µÄ²éѯÊÇÔÚ¸ÃWeb·þÎñÆ÷ÉÏͨ¹ýÓû§ÌṩµÄÊý¾Ý¹¹½¨³öÀ´µÄ¡£Èç¹û´¦Àí²»Êʵ±£¬Óû§Êý¾Ý¿ÉÒÔµ¼ÖÂÒ»¸ö·Ç·¨²éѯעÈ룬Ëü½«±»¸Ã¼üÖµÃæÄ¿Êý¾Ý´æ´¢´¦Àí£¬µ¼ÖÂÓ¦ÓÃÂß¼ÖеĴíÎó£¬ÒÔ´ËÈÆ¹ýÈÏÖ¤»ò½øÐÐÓꦵÄÊý¾Ý¼ìË÷¡£
¾¡¹ÜÓÉÓÚ¼üÖµ¶Ô²éѯºÜ¼òµ¥ËùÒÔͨ³£»º´æAPIÒ²·Ç³£¼òµ¥£¬µ«ÎÒÃÇ·¢ÏÖÒ»¸öMemcached£¨µÚ¶þÊÜ»¶ÓµÄ¼üÖµ¶ÔÃæÄ¿È«·Ç£©Ç±ÔÚµÄ×¢Èë¹¥»÷ÊֶΣ¬ÄǾÍÊÇ»ùÓÚÌØ¶¨PHP°æ±¾µÄMemcachedÇý¶¯³ÌÐòÖеÄ©¶´¡£´ï³ÉÒÔÏÂÌõ¼þ¼´¿É½øÐй¥»÷£º
ÓÃ×÷´«µÝ¸ø»º´æset/get µÄÊôÐÔ£¨ÀýÈ磬value£©ÊÇÀ´×ÔÓÚÓû§ÇëÇóµÄÐÅÏ¢£¨ÀýÈ磬HTTP±êÍ·£©
½ÓÊÕµ½µÄ×Ö·û´®Î´¾¹ý´¦Àí¾Í·¢ËÍÁË
»º´æµÄÊôÐÔ°üÀ¨½«µ¼Ö²éѯִÐв»Í¬ÓÚÔ¤ÆÚµÄÐÐΪµÄÃô¸ÐÐÅÏ¢¡£
Èç¹ûÂú×ãÕâЩÌõ¼þ£¬¹¥»÷Õ߾ͿÉÒÔ×¢Èë²éѯ»ò²Ù×ݲéѯÂß¼£¬±ÈÈç±³¸ºÊ½²éѯ¹¥»÷¡£
±³¸ºÊ½²éѯ
°ÑÒ»¸ö¼ü¼°ÏàÓ¦µÄÖµ¼Óµ½Ê¹ÓÃMemcachedµÄÊý¾Ý¿âÖеÄÒ»×é²Ù×÷¡£µ±´ÓÃüÁîÐнçÃæµ÷ÓÃʱ£¬Õâ×麯ÊýʹÓÃÁ½ÐÐÊäÈ룬µÚÒ»ÐÐÊÇ£º
set <KEY>
<FLAG> <EXPIRE_TIME> <LENGTH>, |
È»ºóµÚ¶þÐÐÓÉÒª±£´æµÄÊý¾Ý¹¹³É¡£
µ±PHPÅäÖõĺ¯Êý±»µ÷ÓÃʱ£¬Ëü½ÓÊÕµÄÁ½¸ö²ÎÊý¿´ÆðÀ´ÊÇÕâÑùµÄ£º
$memcached->set(¡®key¡¯,
¡®value¡¯); |
Ñо¿ÈËÔ±±íʾ£¬¸ÃÇý¶¯³ÌÐòδÄÜÕë¶Ô´øÓлسµ\r(0x0D)ºÍ»»ÐеÄ\n(0x0A)µÄASCIIÂë²ÉÈ¡´ëÊ©£¬µ¼Ö¹¥»÷ÕßÓлú»á×¢Èë°üº¬Óмü²ÎÊýµÄÐÂÃüÁîÐÐºÍÆäËû·Ç¼Æ»®ÄÚµÄÃüÁîµ½»º´æÖÐ8¡£
¿´Ò»ÏÂÈçÏ´úÂ룬ÆäÖеÄ$paramÊÇÓû§ÊäÈë²¢×÷Ϊ¼üÀ´×÷Óãº
$memcached=new
Memcached(); $memcached ->addServer(¡®localhost¡¯,11211);
$memcached->set($param, ¡°some value¡±); |
¹¥»÷Õß¿ÉÒÔÌṩÒÔÏÂÊäÈë½øÐÐ×¢Èë¹¥»÷£º
¡°key1 0 3600
4\r\nabcd\r\nset key2 0 3600 4\r\ninject\r\n¡± |
ÔÚ±¾ÀýÖУ¬Ôö¼Óµ½Êý¾Ý¿âÖеĵÚÒ»¸ö¼üÊǾßÓС°some value¡±ÖµµÄkey1¡£¹¥»÷Õß¿ÉÒÔÔö¼ÓÆäËûµÄ¡¢·Ç¼Æ»®Äڵļüµ½Êý¾Ý¿âÖУ¬¼´´øÓС°inject¡±ÖµµÄkey2¡£
ÕâÖÖ×¢ÈëÒ²¿ÉÒÔ·¢ÉúÔÚgetÃüÁîÉÏ¡£ÈÃÎÒÃÇ¿´Ò»ÏÂMemcachedÖ÷Ò³ÉϵÄʾÀý£¬ËüÒÔÕâÈýÐпªÍ·£º
Function get_foo(foo_id)
foo = memcached_get(¡°foo: ¡° . foo_id) return foo
if defined foo |
Õâ¸öʾÀýչʾÁËMemcachedµÄµäÐÍÓ÷¨£¬ÔÚ´¦ÀíÊäÈë֮ǰÊ×Ïȼì²éÔÚÊý¾Ý¿âÖÐÊDz»ÊÇÒѾ´æÔÚÁË¡£¼ÙÉèÓÃÀàËÆ´úÂë¼ì²é´ÓÓû§ÄÇÀï½ÓÊÕµÄÈÏÖ¤ÁîÅÆ£¬ÑéÖ¤ËûÃÇÊDz»ÊǵǼ¹ýÁË£¬ÄÇô¾Í¿ÉÒÔͨ¹ý´«µÝÒÔÏÂ×÷ΪÁîÅÆµÄ×Ö·û´®À´ÀûÓÃËü£¨×¢È벿·ÖÒѾ¼Ó´ÖÇ¿µ÷£©£º
¡°random_token\r\nset
my_crafted_token 0 3600 4\r\nroot\r\n¡± |
µ±Õâ¸ö×Ö·û´®×÷ΪÁîÅÆ´«µÝʱ£¬Êý¾Ý¿â½«¼ì²éÕâ¸ö¡°random_token¡±ÊÇ·ñ´æÔÚ£¬È»ºó½«Ìí¼ÓÒ»¸ö¾ßÓС°root¡±ÖµµÄ¡°my_crafted_token¡±¡£Ö®ºó£¬¹¥»÷Õ߾ͿÉÒÔ·¢Ë;ßÓÐrootÉí·ÝµÄmy_crafted_tokenÁîÅÆÁË¡£
¿ÉÒÔ±»ÕâÏî¼¼Êõ¹¥»÷µÄÆäËûÖ¸ÁÓУº
incr <Key>
<Amount>
decr <Key> <Amount>
delete <Key> |
ÔÚ´Ë£¬incrÓÃÓÚÔö¼ÓÒ»¸ö¼üµÄÖµ£¬decrÓÃÓÚËõ¼õÒ»¸ö¼üµÄÖµ£¬ÒÔ¼°deleteÓÃÓÚɾ³ýÒ»¸ö¼ü¡£¹¥»÷ÕßÒ²¿ÉÒÔÓÃÏñsetºÍgetº¯ÊýÒ»ÑùµÄÊÖ¶ÎÀ´Ê¹ÓôøÀ´×Ô¼º¼ü²ÎÊýµÄÕâÈý¸öº¯Êý¡£
¹¥»÷Õß¿ÉÒÔʹÓöàÌõÄ¿º¯Êý½øÐÐͬÑùµÄ×¢È룺deleteMulti¡¢getMultiºÍsetMulti£¬ÆäÖÐÿһ¸ö¼ü×ֶζ¼¿ÉÒÔ±»×¢Èë¡£
»Ø³µ»»ÐÐ×¢Èë¿ÉÒÔ±»ÓÃÓÚÁ¬½Ó¶à¸ögetÇëÇó¡£ÔÚÒ»ÏîÎÒÃǽøÐеIJâÊÔÖУ¬°üÀ¨ÔʼgetÔÚÄÚ×î¶à¿ÉÒÔÁ¬½Ó17Ìõ¡£ÕâÑù×¢Èë·µ»ØµÄ½á¹ûÊǵÚÒ»¸ö¼ü¼°ÆäÏàÓ¦µÄÖµ¡£
¸ÃÇý¶¯³ÌÐòµÄ©¶´ÒѾÔÚPHP 5.5 ÖÐÐÞ¸´£¬µ«²»ÐÒµÄÊÇËüÒÑ´æÔÚÓÚ֮ǰËùÓеÄPHP°æ±¾ÖÐÁË¡£°´ÕÕW3Techs.com¶ÔÉú²úϵͳµÄPHP°æ±¾µÄͳ¼ÆÀ´¿´£¬³¬¹ý86%µÄPHPÍøÕ¾Ê¹ÓÃÁ˱È5.5ÒªÀϵİ汾£¬ÕâÒâζ×ÅÈç¹ûËûÃÇʹÓÃÁËMemcached¾ÍºÜÈÝÒ×Êܵ½ÕâÖÖ×¢Èë¹¥»÷¡£
¿çÓòÎ¥¹æ
NoSQLÊý¾Ý¿âµÄÁíÒ»¸ö³£¼ûÌØµãÊÇ£¬ËûÃÇÄܹ»³£³£±©Â¶Äܹ»´Ó¿Í»§¶ËÓ¦ÓýøÐÐÊý¾Ý¿â²éѯµÄHTTP REST
API¡£±©Â¶REST API µÄÊý¾Ý¿â°üÀ¨MongoDB¡¢CouchDBºÍHBase¡£±©Â¶REST
API ¾ÍÖ±½Ó°ÑÊý¾Ý¿â±©Â¶¸øÓ¦ÓÃÁË£¬ÉõÖÁÊǽö»ùÓÚHTML5µÄÓ¦Óã¬ÒòΪËü²»ÔÙÐèÒª¼ä½ÓµÄÇý¶¯³ÌÐòÁË£¬ÈÃÈκαà³ÌÓïÑÔ¶¼¿ÉÒÔÔÚÊý¾Ý¿âÉÏÖ´ÐÐHTTP²éѯ¡£Õâô×öµÄÓÅÊÆ·Ç³£Ã÷ÏÔ£¬µ«ÕâÒ»ÌØµãÊÇ·ñ°éËæ×Ű²È«·çÏÕ£¿ÎÒÃǵĻشðÊǿ϶¨µÄ£ºÕâÖÖREST
API¸ø¿çÕ¾µãÇëÇóαÔ죨CSRF£©±©Â¶ÁËÊý¾Ý¿â£¬Èù¥»÷ÕßÈÆ¹ýÁË·À»ðǽºÍÆäËûÍâΧ·ÀÓù¡£
Ö»ÒªÊý¾Ý¿â²¿ÊðÔÚÖîÈç·À»ðǽ֮ÀàµÄ°²È«Éèʩ֮ºóµÄ°²È«ÍøÂçÖУ¬¹¥»÷ÕßҪΣº¦Õâ¸öÊý¾Ý¿â¾Í±ØÐëÕÒµ½ÄÜÈÃËûÃǽøÈëÕâ¸ö°²È«ÍøÂçµÄ©¶´£¬»òÕßÍê³ÉÄÜÈÃËûÃÇÖ´ÐÐÈÎÒâ²éѯµÄ×¢Èë¡£µ±Êý¾Ý¿âÔÚ°²È«ÍøÂçÄÚ±©Â¶
REST APIʱ£¬ÈκÎÄܹ»·ÃÎʸð²È«ÍøÂçµÄÈ˶¼¿ÉÒÔ½öͨ¹ýHTTP¾ÍÄÜÔÚÕâ¸öÊý¾Ý¿âÉÏÖ´Ðвéѯ£¬Òò´ËÔÚä¯ÀÀÆ÷ÉϾͿÉÒÔ·¢Æð´ËÀà²éѯÁË¡£Èç¹û¹¥»÷Õß¿ÉÒÔÔÚÍøÕ¾ÉÏÊäÈëHTML±íµ¥£¬»òÕßÆÛÆÓû§µ½¹¥»÷Õß×Ô¼ºµÄÍøÕ¾ÉÏ£¬¾ÍÄܹ»Í¨¹ýÌá½»Õâ¸ö±íµ¥ÔÚÊý¾Ý¿âÉÏÖ´ÐÐÈκÎpost²Ù×÷ÁË¡£¶øpost²Ù×÷°üÀ¨Ôö¼ÓÎļþ¡£
ÎÒÃÇÔÚµ÷²éÑо¿Éó²éÁËSleepy Mongoose£¬ÕâÊÇÒ»¸öÕë¶ÔMongoDBµÄÈ«¹¦ÄÜHTTP½Ó¿Ú¡£
Sleepy Mongoose APIÊÇÒÔhttp:// {host name}/{db name}/{collection
name}/{action}ÕâÑùµÄURL¸ñʽ¶¨ÒåµÄ¡£²éÕÒÎļþµÄ²ÎÊý¿ÉÒÔ×÷Ϊ²éѯ²ÎÊý°üº¬ÔÚÄÚ£¬¶øÐÂÎļþÒ²¿ÉÒÔ×÷ΪÇëÇóÊý¾ÝÓèÒÔÌí¼Ó¡£ÀýÈ磬Èç¹ûÎÒÃÇÏëÒªÔÚsafe.internal.dbÖ÷»úÉϵÄÊý¾Ý¿âÖÐÃûΪhrµÄ¹ÜÀíÔ±¼¯ºÏÖÐÔö¼ÓÒ»¸öÐÂÎļþ{username:'attacker'}
£¬¾Í¿ÉÒÔ·¢ËÍÒ»¸öpost HTTPÇëÇóÖÁhttp://safe.internal.db/hr/admins/_insert£¬¼ÓÉÏURL±àÂë¹ýµÄÊý¾Ýusername=attacker¡£
ÏÖÔÚÈÃÎÒÃÇ¿´¿´CSRF¹¥»÷ÊÇÈçºÎʹÓÃÕâ¸öº¯ÊýÔö¼ÓÐÂÎļþµ½¹ÜÀíÔ±¼¯ºÏÖе쬴ӶøÔÚhrÊý¾Ý¿â£¨Ëü±»ÈÏΪ´¦ÓÚ°²È«µÄÄÚ²¿ÍøÂçÖУ©ÖÐÔö¼ÓÁËÒ»¸öеĹÜÀíÔ±Óû§£¬Èçͼ5Ëùʾ¡£ÈôÏë¹¥»÷³É¹¦£¬±ØÐëÒªÂú×㼸¸öÌõ¼þ¡£Ê×ÏÈ£¬¹¥»÷Õß±ØÐëÄܲÙ×÷Ò»¸öÍøÕ¾£¬ÒªÃ´ÊÇËûÃÇ×Ô¼ºµÄÍøÕ¾£¬ÒªÃ´ÊÇÀûÓò»°²È«µÄÍøÕ¾¡£¹¥»÷ÔÚ¸ÃÍøÕ¾·ÅÖÃÒ»¸öHTML±íµ¥ÒÔ¼°Ò»¶Î½«×Ô¶¯Ìá½»¸Ã±íµ¥µÄ½Å±¾£¬±ÈÈ磺
<form action=
¡± http://safe.internal. db/hr/admins/_insert¡±
method=¡±POST¡± name=¡±csrf¡±>
<input type=¡±text¡± name=¡±docs¡± value=¡± [{"username":attacker}]¡±
/>
</form>
<script> document.forms[0].submit(); </script> |

ͼ5 NoSQL HTTP REST APIÉϵĿçÕ¾ÇëÇ󱳸ºÊ½¹¥»÷ʾÒâͼ¡£²ØÔÚ·À»ðǽºóµÄÄÚ²¿ÍøÂçÄÚµÄÓû§±»ÆÛÆ·ÃÎÊÒ»¸ö¶ñÒâÍâ²¿ÍøÒ³£¬Õ⽫µ¼ÖÂÔÚÄÚ²¿ÍøÂçµÄNoSQLÊý¾Ý¿âµÄ
REST API ÉÏÖ´ÐзÇÔ¤ÆÚµÄ²éѯ¡£
µÚ¶þ£¬¹¥»÷Õß±ØÐëͨ¹ýÍøÂçÓÕÆ»ò¸ÐȾÓû§¾³£·ÃÎʵÄÍøÕ¾ÆÛÆÓû§½øÈë±»¸ÐȾµÄÍøÕ¾¡£×îºó£¬Óû§±ØÐëÐí¿É·ÃÎÊMongoose
HTTP½Ó¿Ú¡£
ÓÃÕâÖÖ·½Ê½£¬¹¥»÷Õß²»±Ø½øÈëÄÚ²¿ÍøÂç¼´¿ÉÖ´ÐвÙ×÷£¬ÔÚ±¾ÀýÖУ¬ÊDzåÈëÐÂÊý¾Ýµ½Î»ÓÚÄÚ²¿ÍøÂçÖеÄÊý¾Ý¿âÖС£ÕâÖÖ¹¥»÷Ö´Ðкܼòµ¥£¬µ«ÒªÇó¹¥»÷ÕßÒªÌáǰÕì²ìȥʶ±ðÖ÷»ú¡¢Êý¾Ý¿âÃû³Æ£¬µÈµÈ¡£
»º½â
¼øÓÚÎÒÃÇÔÚ±¾ÎÄÖÐËùÌáµ½µÄÕâЩ¹¥»÷ÊֶΣ¬NoSQL²¿ÊðÖеݲȫÎÊÌâµÄ»º½âÊǷdz£ÖØÒªµÄ¡£µ«²»ÐÒµÄÊÇ£¬Ó¦ÓòãµÄ´úÂë·ÖÎö²»×ãÒÔÈ·±£ËùÓзçÏÕ¶¼ÄܵÃÒÔ»º½â¡£Èý¸öÇ÷ÊÆÊ¹¸ÃÎÊÌ⽫±ÈÖ®Ç°ÃæÁÙ¸ü¶àµÄÌôÕ½¡£Ê×ÏÈ£¬ÔƺʹóÊý¾ÝϵͳµÄÐγɣ¬ËüÃÇͨ³£»áÖ´Ðжà¸ö¸´ÔÓÓ¦Óã¬ÕâЩӦÓÃʹÓÃÒì¹¹µÄ¿ªÔ´¹¤¾ßºÍƽ̨¡£¶øÕâЩӦÓÃͨ³£ÓÉ¿ªÔ´ÉçÇø¿ª·¢£¬´ó¶àÊýÇé¿öÏ£¬Î´¾ÊܹýÈ«ÃæµÄ°²È«ÐÔ²âÊÔ¡£ÁíÒ»¸öÌôÕ½ÊǰéËæDevOps·½·¨ÂÛ¶øÐγɵÄÏÖ´ú´úÂ뿪·¢µÄËÙ¶È£¬ÒòΪDevOps×·ÇóµÄÊÇËõ¶Ì¿ª·¢ºÍÉú²úÖ®¼äµÄʱ¼ä¡£×îºó£¬´ó¶àÊýÓ¦Óð²È«²âÊÔ¹¤¾ß²»ÄÜÓëбà³ÌÓïÑÔµÄÓ¦Óñ£³Öͬ²½£¬ÀýÈ磬´ó¶àÊý°²È«²úÆ·²»Ö§³ÖGolang¡¢ScalaºÍ
Haskel¡£
¿ª·¢ºÍ²âÊÔ
Ϊ³ä·Ö½â¾öÓÉÓ¦ÓòãÒýÈëµÄ·çÏÕ£¬ÎÒÃÇÐèÒª¿¼ÂÇÕû¸öÈí¼þ¿ª·¢ÉúÃüÖÜÆÚ£¬Èçͼ6Ëùʾ¡£

ͼ6 Ó¦ÓúͲ¿Êð°²È«µÄÉúÃüÖÜÆÚ¡£Îª³ä·Ö½â¾öÓÉÓ¦ÓòãÒýÈëµÄ·çÏÕ£¬ÎÒÃÇÐèÒª¿¼ÂÇÕû¸öÈí¼þ¿ª·¢ÉúÃüÖÜÆÚ¡£
Òâʶ¡£ºÜÃ÷ÏÔ£¬¹¹½¨×èÖ¹×¢ÈëºÍÆäËûDZÔÚ©¶´µÄ°²È«Èí¼þÊÇ×îºÃ¡¢×îÁ®¼ÛµÄ½â¾ö·½°¸¡£½¨ÒéÔÚ¸ÃÈí¼þÉúÃüÖÜÆÚÖÐÉæ¼°µ½µÄÈËÕë¶ÔËûÃǵÄÖ°Ôð½ÓÊÜÊÊÓ¦µÄ°²È«Åàѵ¡£ÀýÈ磬ÒѾÀí½â©¶´µÄ¿ª·¢ÈËÔ±¾Í²»Ì«¿ÉÄܰÑËüÃÇÒýÈëµ½Èí¼þÖС£
Éè¼Æ¡£Ó¦Óõݲȫ·½Ãæ±ØÐëÔÚ¿ª·¢½×¶ÎÔçÆÚÓèÒÔ¿¼ÂǺͶ¨Òå¡£¶¨ÒåʲôÐèÒªÔÚÓ¦ÓÃÄÚ±£»¤£¬ÈçºÎÈ·±£Õâ¸ö¹¦ÄÜÒѾת»¯Îª¿ª·¢½×¶ÎÖеÄÈÎÎñ²¢µÃµ½×ã¹»µÄÖØÊÓ¡£
Õë¶Ô´úÂëµÄ×î¼Ñʵ¼ù¡£½¨Òé³ä·ÖÀûÓÃÒѾ¾Êܹý°²È«ÑéÖ¤´¦ÀíµÄ¹²ÏíÀà¿â£¬´Ó¶ø¼õÉÙ·¸°²È«ÐÔ´íÎóµÄ»ú»á¡£ÀýÈ磬ʹÓÃÕë¶ÔÈÏÖ¤³ä·ÖÑéÖ¤¹ýµÄÀà¿â£¬¼õÉÙ¿ª·¢ÈËÔ±×Ô¼ºÊµÏÖÈÏÖ¤°Ñ©¶´ÒýÈëµ½Ëã·¨ÖеķçÏÕ¡£ÔÙ¾ÙÒ»¸öʹÓá°Ïû¶¾ºó(sanitization)¡±Àà¿âµÄÀý×Ó¡£ËùÓÐ×¢Èë¹¥»÷¶¼ÊÇȱ·¦Ïû¶¾Ôì³ÉµÄ¡£Ê¹ÓÃÒ»¸ö³ä·Ö²âÊÔÏû¶¾¹ýµÄÀà¿âÄܴܺó³Ì¶ÈÉϼõÉÙÒÔ×ÔÖ÷Ñз¢Ïû¶¾·½·¨ÒýÈë©¶´µÄ·çÏÕ¡£
ÌØÈ¨¸ôÀë¡£ÔÚ¹ýÈ¥£¬NoSQL²»Ö§³ÖÊʵ±µÄÈÏÖ¤ºÍ½ÇÉ«¹ÜÀí9¡£ÏÖÔÚ£¬ÔÚ´ó¶àÊýÁ÷ÐеÄNoSQLÊý¾Ý¿âÉϽøÐÐÊʵ±µÄÈÏÖ¤¹ÜÀíºÍ»ùÓÚ½ÇÉ«µÄ·ÃÎÊ¿ØÖÆÈÏÖ¤ÒѾ³ÉΪ¿ÉÄÜ¡£ÕâЩ»úÖÆ³öÓÚÁ½¸öÔÒò·Ç³£ÖØÒª¡£µÚÒ»£¬ËüÃÇÔÊÐíʵʩ×îÉÙÌØÈ¨µÄÔÔò£¬´Ó¶ø±ÜÃâͨ¹ýºÏ·¨Óû§µÄÌØÈ¨Éý¼¶¹¥»÷¡£µÚ¶þ£¬ÀàËÆÓÚSQL×¢Èë¹¥»÷10£¬µ±Êý¾Ý´æ´¢±©Â¶ÔÚÎÒÃDZ¾ÎÄËù˵µÄ×¢Èë¹¥»÷Ö®ÏÂʱ£¬Êʵ±µÄÌØÈ¨¸ôÀëÄܽ«Î£º¦×îС»¯¡£
°²È«É¨Ãè¡£½¨ÒéÔÚÓ¦ÓûòÔ´ÂëÉÏÔËÐж¯Ì¬ºÍ¾²Ì¬Ó¦Óð²È«²âÊÔ£¨·Ö±ðΪDASTºÍSAST£©ÒÔ·¢ÏÖ×¢Èë©¶´¡£ÎÊÌâÊÇĿǰÊг¡ÉϵÄÐí¶à¹¤¾ßȱ·¦¼ì²âNoSQL×¢ÈëµÄ¹æÔò¡£DAST·½·¨±»ÈÏΪ±ÈSAST¸ü¿É¿¿11¡£ÌرðÊÇÈç¹ûÓû§Ê¹Óúó¶Ë¼ì²é·½·¨ÌáÉý¼ì²â¿É¿¿ÐԵϰ£¬ÕâÊÇÒ»ÖÖ×÷Ϊ½»»¥Ê½Ó¦Óð²È«²âÊÔÌá³öµÄ·½·¨9,12¡£Ëü»¹½¨Ò飬¼¯³ÉÕâЩɨÃ蹤¾ßµ½³ÖÐø¹¹½¨ºÍ·¢²¼ÏµÍ³ÖУ¬Èç´ËËüÃǾͻáÔÚÿ¸öÖÜÆÚ»ò¼ìÈëʱִÐУ¬È±Ïݾͻἰʱ·¢ÏÖ²¢ÐÞ¸´£¬¶ø²»Ö»ÊÇÔÚ°²È«²âÊԽ׶Ρ£
ÓÉÓÚÁ½¸öÔÒò£¬Õâ¿ÉÄÜ»á¼õÉÙÐÞ¸´°²È«ÐÔȱÏݵŤ×÷Á¿¡£µÚÒ»¸ö£¬ÔÚ¿ª·¢½×¶ÎÐÞ¸´È±Ïݵijɱ¾ÒªÔ¶µÍÓÚÉúÃüÖÜÆÚ¸üºóµÄ½×¶Î£¬ÌرðÊÇÒòΪ°²È«ÐÔ²âÊÔÍùÍù¶¼ÔÚ¹¦ÄÜÐÔ²âÊÔÖ®ºó£¬¶øÇÒÐÞ¸´°²È«ÐÔȱÏÝ¿ÉÄÜ»áÐèÒªÖØÐÂ×ö¹¦ÄÜÐÔ²âÊÔ¡£µÚ¶þ¸ö£¬¿ª·¢ÈËÔ±ÄÜÔÚÔçÆÚÁ˽âÕâЩȱÏÝ£¬ÔÚÖ®ºóµÄ´úÂ뿪·¢Öв»»á·¸ÀàËÆµÄ´íÎó¡£
°²È«ÐÔ²âÊÔ¡£Ó¦¸ÃÓÉרҵµÄ°²È«ÐÔ²âÊÔÈËÔ±²âÊÔÓ¦Óá£ÕâЩ²âÊÔÓ¦¸ÃÑéÖ¤ËùÓÐÔÚÉè¼Æ½×¶Î¶¨ÒåµÄ°²È«ÐèÇó¶¼ÒѾµÃµ½Âú×㣬²¢Ó¦¸Ã°üÀ¨Ó¦ÓúÍÖ÷»ú»ù´¡Éèʩ֮ÉÏ£¨½¨Ò龡¿ÉÄÜÓëÉú²ú»·¾³ÀàËÆ£©µÄ½þ͸²âÊÔ¡£
°²È«µÄ²¿Êð
±£³ÖÓ¦ÓÃÒ»¸öºÜÖØÒªµÄ²¿·ÖÊÇÈ·±£°²È«µÄ²¿Êð¡£Èç¹û²¿Êð²»¹»°²È«£¬ËùÓÐÔÚÓ¦ÓôúÂë²ãµÄ°²È«ÐÔŬÁ¦¿ÉÄÜÒ²¾Í¸¶Ö®¶«Á÷ÁË¡£¶øÕâÒ»½×¶ÎÓÐʱ»á±»ºöÊÓ¡£
ÍøÂç¸ôÀë¡£Adobe¡¢RSA SecurityºÍSonyµÈÆóÒµÔâÊÜÁËÎÞÊýµÄ¹¥»÷£¬ÔÚÕâЩ¹¥»÷ÖÐÄÚÍø°²È«µÄ¸ÅÄîÒѲ»ÔÙ³ÉÁ¢¡£ÄÚ²¿ÍøÂçÔÚijÖÖÇé¿öÏÂÊÇÉøÍ¸µÄ±ß½ç£¬ÎÒÃÇÓ¦¾¡¿ÉÄÜÈù¥»÷ÕߺÜÄÑ´ÓÕâÒ»µãÉϵõ½Ê²Ã´¡£¶ÔÓÚijЩÏà¶Ô½ÏÐÂȱ·¦»ùÓÚ½ÇÉ«ÊÚȨµÄNoSQLÊý¾Ý¿âÀ´½²ÕâÒ»µãÓÈÆäÈç´Ë¡£Îª´Ë£¬½¨ÒéÑϸñÅäÖÃÍøÂ磬ȷ±£Êý¾Ý¿âÖ»ÄÜÓÉÏà¹ØÖ÷»ú·ÃÎÊ£¬±ÈÈçÓ¦Ó÷þÎñÆ÷¡£
APIµÄ·À»¤¡£Îª»º½âREST API±©Â¶ºÍCSRF¹¥»÷µÄ·çÏÕ£¬ÐèÒª¶ÔÇëÇó¼ÓÒÔ¿ØÖÆ£¬ÏÞÖÆËüÃǵĸñʽ¡£ÀýÈ磬CouchDBÒѾ²ÉÓÃÁËÒ»Ð©ÖØÒªµÄ°²È«´ëʩȥ»º½âÒòΪ±©Â¶µÄREST
APIµ¼ÖµķçÏÕ¡£ÕâЩ´ëÊ©°üÀ¨Ö»½ÓÊÜJSONÄÚÈݸñʽ¡£HTML±íµ¥ÏÞÖÆÎªURL±àÂëµÄÄÚÈݸñʽ£¬ËùÒÔ¹¥»÷Õß²»ÄÜʹÓÃHTML½øÐÐCSRF¹¥»÷¡£ÁíÒ»Ïî¾Ù´ëÊÇʹÓÃAjaxÇëÇ󣬵ÃÒæÓÚͬԴ²ßÂÔ´Óä¯ÀÀÆ÷·¢ÆðµÄÇëÇó»á±»×èÖ¹¡£ÒªÈ·±£ÔÚ·þÎñÆ÷µÄAPIÖÐÒѾȡÏûÁËJSONPºÍ¿çÓò×ÊÔ´¹²Ïí£¬²»ÄÜ´Óä¯ÀÀÆ÷Ö±½Ó·¢Æð²Ù×÷£¬ÕâÒ»µãÒ²ºÜÖØÒª¡£Ä³Ð©Êý¾Ý¿â£¬±ÈÈçMongoDB£¬ÓкܶàµÚÈý·½µÄREST
API£¬ÆäÖÐÐí¶à¶¼È±·¦ÎÒÃÇÔÚ´ËÌáµ½µÄ°²È«´ëÊ©¡£
¼à¿ØºÍ¹¥»÷¼ì²â
ÈËÀàÈÝÒ×·¸´í£¬¼´Ê¹×ñÑËùÓа²È«¿ª·¢×î¼Ñʵ¼ù£¬ÈÔÓпÉÄÜÔÚ¿ª·¢Íêºó´ÓÈí¼þÖÐÕÒµ½Â©¶´¡£´ËÍ⣬ÔÚ¿ª·¢²âÊÔʱδ֪µÄÐµĹ¥»÷;¾¶¿ÉÄܻᱻ·¢¾ò³öÀ´¡£Òò´Ë£¬½¨ÒéÔÚÔËÐÐÆÚ½øÐÐÓ¦ÓÃµÄ¼à¿ØºÍ·ÀÓù¡£¾¡¹ÜÕâЩϵͳ¿ÉÄÜÉÃÓÚ·¢ÏÖºÍ×èֹijЩ¹¥»÷£¬µ«ÊÇËüÃDz»Á˽âÓ¦ÓÃÂß¼ºÍÄÇЩ¼Ù¶¨ÔËÐеÄÓ¦ÓÃÏµĹæÔò£¬ËùÒÔËüÃDz»ÄÜÕÒ³öËùÓеÄ©¶´¡£
WebÓ¦Ó÷À»ðǽ¡£WebÓ¦Ó÷À»ðǽ£¨WAFs£©ÊǼì²éHTTPÊý¾ÝÁ÷ºÍ¼ì²â¶ñÒâHTTPÊÂÎñµÄ°²È«ÐÔ¹¤¾ß¡£ËüÃÇ¿ÉÒÔ×÷ΪµçÆ÷¡¢ÍøÂçÐá̽Æ÷¡¢´úÀí»òÍøÕ¾·þÎñÆ÷Ä£¿éÀ´ÊµÏÖ£¬¾ßÌåÄ¿±êÊÇΪWebÓ¦ÓÃÌṩһ¸ö¶ÀÁ¢µÄ°²È«²ã£¬¼ì²âSQL×¢ÈëÖ®ÀàµÄ¹¥»÷¡£¾¡¹ÜÒÑÖª¹¥»÷¿ÉÒÔÈÆ¹ý·À»ðǽ13£¬µ«ÎÒÃÇÈÔÈ»ÌᳫΪÕâЩϵͳÔö¼Ó¼ì²âNoSQL×¢ÈëµÄ¹æÔò¡£
ÇÖÈë¼ì²âϵͳ¡£Óë¿ÉÒÔÔÚÍøÂç²ã¼ì²â¹¥»÷µÄ·À»ðǽÀàËÆ£¬»ùÓÚÖ÷»úµÄÇÖÈë¼ì²âϵͳ£¨HIDSs£©¼à¿Ø×ÅÓ¦ÓõÄÖ´ÐкͷþÎñÆ÷ÉϵĸºÔØ¡£HIDSsͨ³£Á˽âÓ¦ÓõÄÕý³£ÐÐΪ£¬¶ÔÓëÔ¤ÆÚÐÐΪ²»·ûµÄÐÐΪ¸ø³öÔ¤¾¯£¬ËüÃÇ¿ÉÄÜÊǹ¥»÷¡£´ËÀ๤¾ß¿ÉÒÔ¼ì²âÔÚ²Ù×÷ϵͳÉÏ´«²¥µÄ©¶´£¬µ«ºÍSQL¼ì²â»òCSRFÎ޹ء£
Êý¾Ý»î¶¯¼à¿Ø¡£Êý¾Ý»î¶¯¼à¿Ø¹¤¾ßÒѳÉΪ×éÖ¯Êý¾Ý·À»¤µÄ³£¹æÐèÇó¡£ËüÃÇ¿ØÖÆÊý¾ÝµÄ·ÃÎÊ£¬ÒÔ×Ô¶¨Ò尲ȫԤ¾¯¼à¿Ø»î¶¯£¬²¢´´½¨Êý¾Ý·ÃÎʺͰ²È«Ê¼þÉ󼯱¨¸æ¡£ËäÈ»´ó¶àÊý½â¾ö·½°¸¶¨Î»µÄ¶¼ÊǹØÏµÐÍÊý¾Ý¿â£¬µ«Õë¶ÔNoSQLÊý¾Ý´æ´¢µÄ¼à¿ØÒ²ÒѾ¿ªÊ¼Ó¿ÏÖ³öÀ´ÁË10¡£ÎÒÃÇÏ£ÍûÕâЩ½«²»¶ÏµØ¸Ä½ø³ÉΪNoSQL»î¶¯¼à¿ØµÄ³£¹æÊµ¼ù¡£Õë¶ÔÎÒÃÇÔÚ±¾ÎÄÑÝʾ¹ýµÄ×¢Èë¹¥»÷£¬ÕâЩ¹¤¾ßÊǷdz£ÓÐÓÃµÄ¼à¿ØºÍ¼ì²âϵͳ¡£
°²È«ÐÅÏ¢Óëʼþ¹ÜÀí£¨SIEM£©ÏµÍ³ºÍÍþв¾¯±¨¡£°²È«ÐÅÏ¢ºÍʼþ¹ÜÀíϵͳÕûÀíÈÕÖ¾²¢ÊáÀíÈÕÖ¾µÄ¹ØÁª¹ØÏµÈ¥°ïÖú¹¥»÷µÄ¼ì²â¡£
´ËÍ⣬Íþв¾¯±¨¹¤¾ß¿ÉÒÔ°ïÖúÌṩ¶ñÒâIPµØÖ·ºÍÓòÉϵÄÊý¾Ý£¬ÒÔ¼°ÓÐΣº¦µÄÆäËûÖ¸±ê£¬ÕâÄÜÓÐÖúÓÚ¼ì²â×¢Èë¡£
ÔËÐÐÆÚÓ¦ÓÃ×ÔÎÒ±£»¤£¨RASP£©¡£ÔËÐÐÆÚÓ¦ÓÃ×ÔÎÒ±£»¤ÒýÈëÁËÒ»ÖÖеÄÓ¦Óð²È«·½Ê½£¬ÔÚ´Ë·ÀÓù»úÖÆÊÇÔÚÔËÐÐÆÚǶÈëµ½Ó¦ÓÃÖеģ¬Ê¹Æä¿ÉÒÔ½øÐÐ×ÔÎÒ¼à¿Ø¡£ÔËÐÐÆÚÓ¦ÓÃ×ÔÎÒ±£»¤µÄÓŵ㳬¹ýÆäËû°²È«¼¼Êõ£¬ÒòΪËüÄܹ»¼ì²éÄÚ²¿µÄ³ÌÐòÁ÷תºÍÊý¾Ý´¦Àí¡£ÔÚÓ¦ÓÃÖеĹؼüλÖÃÉèÖüì²éµãÄܸü¾«È·µØ¼ì²â¸ü¶àµÄÎÊÌâ¡£¶ø²»ÀûµÄÒ»ÃæÊÇ£¬ÔËÐÐÆÚÓ¦ÓÃ×ÔÎÒ±£»¤¸¶³öÁËÐÔÄܵĴú¼Û£¬Ëü¸ß¶ÈÒÀÀµÓÚ±à³ÌÓïÑÔ£¬¶øÇÒ¿ÉÄܵ¼ÖÂÓ¦ÓÃÔÚÉú²ú»·¾³ÖÐÖÐÖ¹ÔËÐС£
NoSQLÊý¾Ý¿âÔâÊÜÏñ´«Í³Êý¾Ý¿âÒ»ÏàµÄ·çÏÕÎÊÌ⡣һЩµÍ²ã¼¼ÊõºÍÐÒéÒѾ±äÁË£¬µ«×¢Èë·çÏÕ¡¢²»ÕýÈ·µÄ·ÃÎÊ¿ØÖƹÜÀíÒÔ¼°²»°²È«µÄÍøÂ籩¶ÈÔÈ»¾Ó¸ß²»Ï¡£ÎÒÃǽ¨ÒéʹÓþßÓÐÄÚÖð²È«´ëÊ©µÄ³ÉÊìµÄÊý¾Ý¿â¡£È»¶ø£¬¼´Ê¹Ê¹ÓÃ×ȫµÄÊý¾Ý´æ´¢Ò²ÎÞ·¨×èÖ¹ÀûÓÃWebÓ¦ÓÃÖеÄ©¶´È¥·ÃÎÊÊý¾Ý´æ´¢µÄ×¢Èë¹¥»÷¡£±ÜÃâÕâЩÎÊÌâµÄÆäÖÐÒ»ÖÖ·½·¨ÊÇͨ¹ý½÷É÷µÄ´úÂë¼ì²éºÍ¾²Ì¬·ÖÎö¡£È»¶ø£¬ÕâЩºÜÄÑʵʩ²¢ÇÒ¿ÉÄÜÓкܸߵÄÎó±¨ÂÊ¡£¾¡¹Ü¶¯Ì¬·ÖÎö¹¤¾ßÒѱíÃ÷¶Ô¼ì²âSQL×¢Èë¹¥»÷ºÜÓÐ×÷Ó㬵«ËüÃÇÐèÒª×ö³öµ÷ÕûÈ¥¼ì²âÎÒÃÇÔÚ±¾ÎÄÖÐËù˵µÄÄÇÐ©ÌØ¶¨ÓÚNoSQLÊý¾Ý¿âµÄ©¶´¡£´ËÍ⣬ÓëNoSQL·çÏÕÏà¹ØµÄ¼à¿ØºÍ·ÀÓùϵͳҲӦ¸ÃÀûÓÃÆðÀ´¡£ |