CSRF 是什么?

先从一个故事说起(故事纯属虚构,恶意模仿后果自负):

小谷最近遭遇电信诈骗被骗的倾家荡产,于是他想到了报复社会。在知乎上狂点800个没有帮助1000个举报后,他决定做点正事干票捞钱的生意。
「很多视频网站都有赠送礼品的功能,假如所有人都赠送我个礼物,我再转卖掉,不就发财啦」小谷寻思着。
说干就敢,经过一番折腾测试,小谷发现视频网站赠送礼物的接口是:

https://xxxx.com/gift/send?target=someone&giftId=ab231

, 原来只要用户在登录状态下请求这个地址,就能给名为someone的用户赠送礼品ab231。
那如何才能让其他用户请求这个接口呢?其实只要用户点击就行,「色诱是最好的陷阱」回想起自己被骗的经过,小谷猥琐狠狠的打了一行文字 ——「想要的都在这里,今夜注定让你无眠~~ 饥人谷-最有爱的前端学习社区」,然后在各个群组里回复。
经过一天等待,有几个上钩的,但远远达不到预期,「有没有更自动的办法,让用户只要看到即使不点也能上钩呢?」。小谷开始对整个网站功能逐一过滤,突然他眼前一亮,在用户评论编辑框内看到了上传外链图片的功能。「如果把这个 url 作为图片填进去,上传后会在评论区创建一个img 标签,src 对应的就是这个地址。当用户打开页面后这个 img 就会自动加载图片也就是发送这个请求,这样一来凡是打开这个页面的人不论是不是点击这个链接都会给赠送礼物,perfect!」 小谷为自己的聪明才智惊叹。
又过了一天,果然源源不断的礼物送了过来。这个时候小谷隐隐有些担心起来,虽然礼物送的都很小,但赠送都是有历史记录的,用户查看历史记录肯定会起疑心,能不能帮用户删除这条赠送记录呢?经过测试,发现删除赠送记录的接口地址是

https://xxxx.com/gift/deleteRecord

, 接口类型为POST,请求参数为 { giftId:”ab231″}。 用户无法通过点击一个链接在不知情的情况下发送 POST 请求,怎么办呢?于是,小谷构造了一个页面:


哈哈,给你开了个玩笑,莫生气~ <form action="https://xxxx.com/gift/deleteRecord" id="form" method="post" target="hiddenIframe"> </form> document.getElementById('form').submit(); location.href = "http://xxxx.com";

当用户点开这个页面的链接后,会自动发送 POST 请求,然后跳转到原始首页。这样用户既在不知情的情况下赠送了礼品,又在不知情的情况下删除了赠送记录。大功告成后,小谷购买了个广告机在各大论坛狂发….

一周之后,警察👮叔叔来敲门了,咚🕳🕳

上面小谷的攻击流程就是典型的 CSRF (Cross Site Request Forgery)攻击,中文名:跨站请求伪造。其原理是攻击者构造网站后台某个功能接口的请求地址,诱导用户去点击或者用特殊方法让该请求地址自动加载。用户在登录状态下这个请求被服务端接收后会被误以为是用户合法的操作。对于 GET 形式的接口地址可轻易被攻击,对于 POST 形式的接口地址也不是百分百安全,攻击者可诱导用户进入带 Form 表单可用POST方式提交参数的页面。

后续……

xxxx视频网站不断接到用户举报,自己的礼品莫名丢失。经过排查发现有攻击者利用 CSRF 进行攻击,报警后赶紧让公司的安全部门的小饥来修复漏洞。

小饥梳理了一遍公司网站所有的接口,发现很多接口都存在这个问题。于是采用了anti-csrf-token的方案。 具体方案如下:

  1. 服务端在收到路由请求时,生成一个随机数,在渲染请求页面时把随机数埋入页面(一般埋入 form 表单内,
  2. 服务端设置setCookie,把该随机数作为cookie或者session种入用户浏览器
  3. 当用户发送 GET 或者 POST 请求时带上_csrf_token参数(对于 Form 表单直接提交即可,因为会自动把当前表单内所有的 input 提交给后台,包括_csrf_token)
  4. 后台在接受到请求后解析请求的cookie获取_csrf_token的值,然后和用户请求提交的_csrf_token做个比较,如果相等表示请求是合法的。

(上图是某电商网站的真实设置,这里页面上设置的 token和session里设置的token 虽然不直接相等,但 md5(‘1474357164624’) === ‘4bd4e512b0fbd9357150649adadedd4e’,后台还是很好计算的)

安全部的Leader 看了看小饥的方案,「方案出的很赞, 不过还有几点需要注意一下」:

  1. Token 保存在 Session 中。假如 Token 保存在 Cookie 中,用户浏览器开了很多页面。在一些页面 Token 被使用消耗掉后新的Token 会被重新种入,但那些老的 Tab 页面对应的 HTML 里还是老 Token。这会让用户觉得为啥几分钟前打开的页面不能正常提交?
  2. 尽量少用 GET。假如攻击者在我们的网站上传了一张图片,用户在加载图片的时候实际上是向攻击者的服务器发送了请求,这个请求会带有referer表示当前图片所在的页面的 url。 而如果使用 GET 方式接口的话这个 URL 就形如:
https://xxxx.com/gift?giftId=aabbcc&amp;_csrf_token=xxxxx

,那相当于攻击者就获取了_csrf_token,短时间内可以使用这个 token 来操作其他 GET 接口。

「这个项目,就由你来推动实施,晚上加加班争取这两天搞定~」

作者:若愚,想学前端?进群

281 thoughts on “CSRF 是什么?”

  1. Hi, I do believe this is a great web site. I stumbledupon it 😉 I’m going to come back once again since i have bookmarked it. Money and freedom is the greatest way to change, may you be rich and continue to guide other people.|

  2. Hello friends, how is all, and what you would like to say concerning this piece of writing, in my view its actually remarkable in support of me.|

  3. Hi there! This post couldn’t be written much better! Looking through this post reminds me of my previous roommate! He always kept talking about this. I most certainly will send this article to him. Fairly certain he will have a good read. Thank you for sharing!|

  4. Unquestionably consider that that you stated. Your favourite justification appeared to be at the internet the simplest thing to keep in mind of. I say to you, I certainly get annoyed at the same time as other people consider issues that they just do not realize about. You controlled to hit the nail upon the highest and also outlined out the whole thing with no need side-effects , other people could take a signal. Will probably be again to get more. Thanks|

  5. Heya terrific blog! Does running a blog like this take a massive amount work? I have no expertise in programming but I had been hoping to start my own blog soon. Anyways, if you have any suggestions or tips for new blog owners please share. I know this is off topic nevertheless I simply wanted to ask. Thanks!|

  6. Hey there! I know this is somewhat off-topic but I needed to ask. Does operating a well-established blog such as yours require a lot of work? I’m completely new to operating a blog but I do write in my diary daily. I’d like to start a blog so I can share my personal experience and views online. Please let me know if you have any recommendations or tips for new aspiring bloggers. Thankyou!|

  7. Hey I know this is off topic but I was wondering if you knew of any widgets I could add to my blog that automatically tweet my newest twitter updates. I’ve been looking for a plug-in like this for quite some time and was hoping maybe you would have some experience with something like this. Please let me know if you run into anything. I truly enjoy reading your blog and I look forward to your new updates.|

  8. Wow that was odd. I just wrote an really long comment but after I clicked submit my comment didn’t show up. Grrrr… well I’m not writing all that over again. Anyhow, just wanted to say great blog!|

  9. I was very happy to uncover this great site. I want to to thank you for ones time for this fantastic
    read!! I definitely really liked every little bit of it and i also have you saved as a favorite to
    check out new stuff in your blog.

  10. Hello there, You’ve done an incredible job. I’ll certainly digg it and personally recommend to my friends.
    I’m confident they will be benefited from this web site.

  11. I will immediately snatch your rss as I can’t find your email subscription hyperlink or e-newsletter service. Do you have any? Kindly allow me realize in order that I may subscribe. Thanks.|

  12. Wow! After all I got a weblog from where I can truly take helpful
    information concerning my study and knowledge.

  13. I’m not sure where you are getting your information, but great topic.
    I needs to spend some time learning more or
    understanding more. Thanks for magnificent information I was looking for this information for
    my mission.

  14. Admiring the persistence you put into your site and detailed information you provide.
    It’s great to come across a blog every once in a while that isn’t the same unwanted
    rehashed material. Wonderful read! I’ve saved your site and I’m adding your RSS feeds to my Google account.

  15. What’s up to every one, it’s really a good for me to go
    to see this web page, it consists of important Information.

  16. This design is wicked! You definitely know how to keep a reader entertained.
    Between your wit and your videos, I was almost moved to start my
    own blog (well, almost…HaHa!) Fantastic job. I really
    enjoyed what you had to say, and more than that, how
    you presented it. Too cool!

  17. My brother suggested I might like this web site. He was entirely right. This post truly made my day. You cann’t imagine just how much time I had spent for this information! Thanks!|

  18. I’m extremely impressed with your writing skills as well as with the layout on your blog. Is this a paid theme or did you modify it yourself? Anyway keep up the excellent quality writing, it’s rare to see a great blog like this one these days.|

  19. Hi my friend! I wish to say that this post is amazing, nice written and
    include approximately all vital infos. I would like to see extra posts like this
    .

  20. It’s the best time to make some plans for the future and it is time to be happy. I have read this post and if I could I wish to suggest you some interesting things or tips. Perhaps you could write next articles referring to this article. I want to read even more things about it!|

  21. I am curious to find out what blog system you’re using? I’m having some small security issues with my latest website and I would like to find something more safe. Do you have any solutions?|

  22. Heya i’m for the first time here. I came across this board and I find It truly useful & it helped me out much. I hope to give something back and help others like you helped me.|

  23. I like the helpful information you provide in your articles. I’ll bookmark your weblog and check again here frequently. I’m quite certain I will learn a lot of new stuff right here! Best of luck for the next!|

  24. Exceptional post however I was wanting to know if you could write a litte more on this topic? I’d be very thankful if you could elaborate a little bit further. Thank you!|

  25. This paragraph will assist the internet visitors for setting up new webpage or even a blog from start to end.|

  26. Please let me know if you’re looking for a author for your weblog. You have some really good articles and I think I would be a good asset. If you ever want to take some of the load off, I’d love to write some articles for your blog in exchange for a link back to mine. Please blast me an e-mail if interested. Thanks!|

  27. I blog often and I truly appreciate your content. Your article has truly peaked my interest. I will book mark your blog and keep checking for new information about once a week. I opted in for your RSS feed as well.|

  28. I was recommended this web site by way of my cousin. I’m now not certain whether this submit is written by means of him as no one else recognise such exact approximately my problem. You’re wonderful! Thank you!|

  29. It’s really a great and helpful piece of info. I am glad that you simply shared this useful information with us. Please keep us informed like this. Thank you for sharing.|

  30. Hi there this is somewhat of off topic but I was wanting to know if
    blogs use WYSIWYG editors or if you have to manually code
    with HTML. I’m starting a blog soon but have no coding know-how so I wanted to get advice from
    someone with experience. Any help would be enormously appreciated!

  31. Hi, i read your blog occasionally and i own a similar one and i was just curious if you get a lot of spam responses? If so how do you protect against it, any plugin or anything you can advise? I get so much lately it’s driving me insane so any assistance is very much appreciated.|

  32. whoah this weblog is excellent i like reading your posts.
    Stay up the good work! You know, many people are searching
    round for this info, you could help them greatly.

  33. Magnificent goods from you, man. I’ve understand your stuff previous to and you are just too fantastic. I actually like what you’ve acquired here, really like what you are saying and the way in which you say it. You make it enjoyable and you still care for to keep it sensible. I can’t wait to read much more from you. This is actually a great web site.|

  34. Just want to say your article is as surprising. The clarity to your publish is just cool and that i can suppose you’re knowledgeable in this subject. Fine with your permission allow me to take hold of your feed to stay updated with imminent post. Thank you a million and please keep up the rewarding work.|

  35. I have been browsing online greater than three hours these days, yet I by no
    means discovered any fascinating article like yours. It is lovely worth enough
    for me. In my opinion, if all web owners and bloggers made
    just right content material as you probably did, the internet will probably be much more useful than ever before.

  36. I’m really impressed with your writing skills as well as with
    the layout on your blog. Is this a paid theme
    or did you customize it yourself? Either way keep up the excellent quality writing, it
    is rare to see a great blog like this one these days.

  37. I think everything published made a ton of
    sense. However, what about this? suppose you were to create a
    killer title? I mean, I don’t wish to tell you how to run your
    website, however suppose you added a post title
    that makes people want more? I mean CSRF 是什么? – 饥人谷 is kinda vanilla.
    You could glance at Yahoo’s home page and note how
    they create article titles to get people interested. You might
    try adding a video or a picture or two to get readers
    excited about everything’ve written. In my opinion, it would bring your posts
    a little livelier.

  38. After checking out a handful of the blog articles on your web page, I truly like your technique of writing a blog. I saved it to my bookmark webpage list and will be checking back soon. Please visit my website as well and tell me how you feel.|

  39. Excellent post. I used to be checking continuously this weblog and I’m impressed! Very useful information specially the ultimate phase 🙂 I maintain such information much. I used to be seeking this particular information for a long time. Thank you and good luck. |

  40. I don’t know whether it’s just me or if perhaps everyone else encountering problems with your site. It appears like some of the text in your posts are running off the screen. Can somebody else please provide feedback and let me know if this is happening to them as well? This may be a issue with my internet browser because I’ve had this happen previously. Cheers|

  41. We stumbled over here coming from a different website and thought I might as well check things out. I like what I see so now i’m following you. Look forward to going over your web page repeatedly.|

  42. I’m pretty pleased to discover this great site. I want to to thank you for your time for this fantastic read!! I definitely enjoyed every bit of it and I have you saved to fav to check out new information on your site.|

  43. I enjoy what you guys are usually up too. Such clever work and exposure! Keep up the fantastic works guys I’ve included you guys to blogroll.|

  44. Appreciating the persistence you put into your site
    and in depth information you offer. It’s awesome to come across a
    blog every once in a while that isn’t the same out of date rehashed material.
    Fantastic read! I’ve saved your site and I’m including your
    RSS feeds to my Google account.

  45. Howdy! I know this is kinda off topic but I was wondering which blog platform are you using for this site? I’m getting sick and tired of WordPress because I’ve had problems with hackers and I’m looking at options for another platform. I would be fantastic if you could point me in the direction of a good platform.|

  46. My brother recommended I might like this web site. He was once totally right. This post truly made my day. You cann’t imagine just how much time I had spent for this info! Thanks!|

  47. certainly like your web-site but you have to take a look at the spelling on several of your posts. Many of them are rife with spelling problems and I to find it very bothersome to tell the truth however I will certainly come back again.

  48. My spouse and i still can not quite feel that I could always be one of those studying the important recommendations found on your website. My family and I are sincerely thankful for the generosity and for presenting me the chance to pursue this chosen profession path. Appreciate your sharing the important information I obtained from your web page.

  49. hello there and thank you for your info – I have definitely picked up something new from right here. I did however expertise some technical issues using this web site, as I experienced to reload the site lots of times previous to I could get it to load correctly. I had been wondering if your web hosting is OK? Not that I am complaining, but slow loading instances times will sometimes affect your placement in google and could damage your high-quality score if advertising and marketing with Adwords. Anyway I am adding this RSS to my e-mail and can look out for much more of your respective exciting content. Make sure you update this again very soon..

  50. I enjoy, cause I discovered just what I was having a look for. You have ended my four day long hunt! God Bless you man. Have a great day. Bye

  51. Fantastic site. A lot of useful info here. I’m sending it to several pals ans also sharing in delicious. And obviously, thanks for your effort!

  52. I just wanted to write a small message in order to thank you for all of the lovely facts you are giving on this website. My time consuming internet research has at the end been paid with sensible details to write about with my partners. I would say that most of us website visitors are definitely lucky to live in a remarkable site with so many outstanding professionals with great tactics. I feel really privileged to have discovered your web pages and look forward to so many more entertaining moments reading here. Thanks once again for everything.

  53. Valuable information. Fortunate me I found your web site unintentionally, and I am stunned why this accident did not happened earlier! I bookmarked it.

  54. Nice read, I just passed this onto a friend who was doing some research on that. And he just bought me lunch since I found it for him smile Thus let me rephrase that: Thanks for lunch!

  55. Hello there, just became alert to your blog through Google, and found that it is really informative. I’m gonna watch out for brussels. I’ll be grateful if you continue this in future. Numerous people will be benefited from your writing. Cheers!

  56. Great site you’ve got here.. It’s hard to find good quality writing like yours these days. I seriously appreciate people like you! Take care!!|

  57. Its such as you read my thoughts! You appear to grasp a lot about this, like you wrote the e-book in it or something. I feel that you just could do with a few to force the message home a bit, however instead of that, that is magnificent blog. A fantastic read. I will definitely be back.|

  58. Hello there, I found your blog by the use of Google at the same time as searching for a related topic, your website got here up, it seems to be great. I’ve bookmarked it in my google bookmarks.

  59. Ahaa, its nice discussion about this piece of writing at this place at this blog, I have read all that, so at this time me also commenting at this place.|

  60. I’ve been surfing on-line greater than 3 hours lately, yet I by no means discovered any interesting article like yours. It’s beautiful price enough for me. In my opinion, if all webmasters and bloggers made excellent content as you probably did, the web can be a lot more useful than ever before.|

  61. Woah! I’m really loving the template/theme of this blog. It’s simple, yet effective. A lot of times it’s difficult to get that “perfect balance” between user friendliness and visual appeal. I must say you have done a awesome job with this. In addition, the blog loads very quick for me on Chrome. Excellent Blog!|

  62. Does your blog have a contact page? I’m having trouble locating it but, I’d like to send you an email. I’ve got some creative ideas for your blog you might be interested in hearing. Either way, great blog and I look forward to seeing it improve over time.|

  63. I’ve been browsing online more than 2 hours today, yet I never found any interesting article like yours. It is pretty worth enough for me. Personally, if all webmasters and bloggers made good content as you did, the internet will be much more useful than ever before.|

  64. Hola! I’ve been following your web site for a while now and finally got the bravery to go ahead and give you a shout out from Dallas Tx! Just wanted to tell you keep up the fantastic job!|

  65. Howdy would you mind letting me know which hosting company you’re working with? I’ve loaded your blog in 3 different browsers and I must say this blog loads a lot quicker then most. Can you suggest a good web hosting provider at a reasonable price? Kudos, I appreciate it!|

  66. Excellent blog here! Also your web site loads up very fast! What host are you using? Can I get your affiliate link to your host? I wish my site loaded up as quickly as yours lol|

  67. It is the best time to make some plans for the future and it is time to be happy. I’ve read this post and if I could I desire to suggest you some interesting things or advice. Maybe you can write next articles referring to this article. I desire to read even more things about it!|

  68. Thank you for the good writeup. It in fact was a amusement account it. Look advanced to far added agreeable from you! By the way, how could we communicate?|

  69. My brother suggested I might like this web site. He was entirely right. This post actually made my day. You can not imagine simply how much time I had spent for this info! Thanks!|

  70. Does your site have a contact page? I’m having a tough time locating it but, I’d like to shoot you an email. I’ve got some suggestions for your blog you might be interested in hearing. Either way, great blog and I look forward to seeing it improve over time.|

  71. Having read this I believed it was rather enlightening. I appreciate you taking the time and effort to put this content together. I once again find myself personally spending a lot of time both reading and posting comments. But so what, it was still worthwhile!|

  72. Hey there! I’ve been reading your website for some time now and finally got the courage to go ahead and give you a shout out from Kingwood Texas! Just wanted to say keep up the fantastic work!|

  73. I think the admin of this site is truly working hard for his website, for the reason that here every material is quality based stuff.|

  74. It’s the best time to make a few plans for the longer term and it’s time to be happy. I have learn this submit and if I may just I wish to counsel you some attention-grabbing things or advice. Maybe you could write subsequent articles relating to this article. I desire to learn even more things about it!|

  75. Hey there would you mind letting me know which web host you’re using? I’ve loaded your blog in 3 completely different web browsers and I must say this blog loads a lot faster then most. Can you recommend a good internet hosting provider at a honest price? Kudos, I appreciate it!|

  76. Hey there would you mind stating which blog platform you’re working with? I’m looking to start my own blog soon but I’m having a tough time choosing between BlogEngine/Wordpress/B2evolution and Drupal. The reason I ask is because your design and style seems different then most blogs and I’m looking for something unique. P.S Apologies for getting off-topic but I had to ask!|

  77. I’ve been surfing online more than 4 hours today, yet I never found any interesting article like yours. It is pretty worth enough for me. Personally, if all web owners and bloggers made good content as you did, the internet will be a lot more useful than ever before.|

  78. You ought to take part in a contest for one of the highest quality websites on the internet. I most certainly will highly recommend this website!|

  79. Hi! I’ve been reading your site for some time now and finally got the bravery to go ahead and give you a shout out from Lubbock Texas! Just wanted to say keep up the great job!|

  80. Hi, Neat post. There is a problem together with your website in web explorer,
    could check this? IE nonetheless is the marketplace chief and a
    huge part of people will omit your great writing due to this problem.

  81. Wow, fantastic blog layout! How long have you been blogging for?
    you make blogging look easy. The overall look of your website is
    fantastic, let alone the content!

  82. Have you ever considered about including a little bit more than just your articles? I mean, what you say is valuable and all. However just imagine if you added some great visuals or videos to give your posts more, “pop”! Your content is excellent but with pics and clips, this blog could definitely be one of the most beneficial in its field. Awesome blog!|

  83. Good way of explaining, and good article to obtain data on the topic of my presentation subject matter, which i am going to deliver in academy.|

  84. Thank you for the auspicious writeup. It in fact was a amusement account it. Look advanced to more added agreeable from you! However, how could we communicate?|

  85. As predicted all space coffins and space funeral homes will blow up in space around the year 2080 to year 3000 due to envy. That’s why we need the 777 immortality smart contracts to remind the living to have faith through time. The 777 immortality smart contract is the trust system that can save someone you love through time.

  86. I think this is one of the most important information for me. And i’m glad reading your article. But should remark on some general things, The web site style is great, the articles is really nice : D. Good job, cheers|

  87. These are really impressive ideas in about blogging. You have touched some fastidious points here. Any way keep up wrinting.|

  88. Everything is very open with a clear explanation of the issues. It was definitely informative. Your website is extremely helpful. Thank you for sharing!|

  89. Its such as you learn my thoughts! You seem to understand so much approximately this, like you wrote the guide in it or something. I believe that you just could do with some to pressure the message home a bit, but other than that, that is fantastic blog. A great read. I’ll definitely be back.|

  90. It is the best time to make a few plans for the long run and it is time to be happy. I have read this publish and if I may just I want to suggest you some attention-grabbing issues or advice. Perhaps you could write next articles referring to this article. I desire to read more things about it!|

  91. I loved as much as you’ll receive carried out right here.
    The sketch is tasteful, your authored subject matter stylish.
    nonetheless, you command get bought an shakiness over
    that you wish be delivering the following. unwell unquestionably come further formerly again as exactly
    the same nearly a lot often inside case you shield this hike.

  92. I enjoy what you guys tend to be up too. Such clever work and coverage! Keep up the amazing works guys I’ve included you guys to our blogroll.|

  93. Greetings from California! I’m bored to tears at work so I decided to check out your website on my iphone during lunch break. I really like the info you present here and can’t wait to take a look when I get home. I’m shocked at how quick your blog loaded on my mobile .. I’m not even using WIFI, just 3G .. Anyways, fantastic blog!|

  94. Ahaa, its fastidious dialogue about this article at this place at this website, I have read all that, so now me also commenting here.|

  95. Someone essentially assist to make critically articles I would state. This is the very first time I frequented your website page and so far? I surprised with the research you made to create this particular put up extraordinary. Fantastic process!|

  96. Way cool! Some very valid points! I appreciate you writing this post and the rest of the site is really good.|

  97. I’ve been surfing online more than 4 hours today, yet I never found any interesting article like yours. It’s pretty worth enough for me. In my opinion, if all site owners and bloggers made good content as you did, the net will be much more useful than ever before.|

  98. Great post. I was checking continuously this weblog and I’m inspired! Extremely helpful info specially the closing section 🙂 I maintain such info much. I used to be looking for this certain info for a long time. Thanks and good luck. |

  99. Having read this I believed it was extremely informative.

    I appreciate you taking the time and energy to put this short article together.

    I once again find myself spending a lot of time both reading and leaving comments.

    But so what, it was still worthwhile!

  100. Hello! I’ve been reading your weblog for some time now and finally got the courage to go ahead and give you a shout out from Huffman Tx! Just wanted to say keep up the good job!|

  101. Hi there! This is my first visit to your blog!
    We are a team of volunteers and starting a new initiative in a community in the same niche.
    Your blog provided us useful information to work on. You
    have done a marvellous job!

  102. Hello I am so glad I found your blog page, I really found you by error, while I was
    browsing on Yahoo for something else, Anyhow I am here
    now and would just like to say thanks for a tremendous
    post and a all round exciting blog (I also love the
    theme/design), I don’t have time to read it all at the moment but I have bookmarked it and also included your RSS feeds, so when I have time
    I will be back to read a lot more, Please do keep up the
    excellent jo.

  103. An impressive share! I’ve just forwarded this onto a co-worker who was conducting a little homework on this. And he in fact bought me dinner due to the fact that I stumbled upon it for him… lol. So let me reword this…. Thanks for the meal!! But yeah, thanx for spending time to discuss this matter here on your website.|

  104. If you would like to get a good deal from this piece of writing then you have to apply these strategies to your won web site.|

  105. My partner and I stumbled over here coming from a different web page and thought I may as well check things out. I like what I see so now i’m following you. Look forward to exploring your web page for a second time.|

  106. Hmm it looks like your website ate my first comment (it was super long) so I guess I’ll just sum it up what I wrote and say, I’m thoroughly enjoying your blog. I as well am an aspiring blog writer but I’m still new to everything. Do you have any tips and hints for novice blog writers? I’d really appreciate it.|

  107. I know this if off topic but I’m looking into starting my own blog and was curious what all is required to get set up? I’m assuming having a blog like yours would cost a pretty penny? I’m not very web smart so I’m not 100 sure. Any recommendations or advice would be greatly appreciated. Thanks|

  108. I know this web site offers quality based posts and other
    material, is there any other website which presents these kinds of things in quality?

  109. Pretty great post. I just stumbled upon your blog and wished to say that I’ve really loved browsing your weblog posts.
    In any case I will be subscribing to your feed and I hope you write once more soon!

  110. whoah this weblog is excellent i really like studying your
    posts. Keep up the good work! You know, a lot of people are looking around for this
    information, you could help them greatly. adreamoftrains web hosting companies

  111. I’ll immediately clutch your rss feed as I can’t find your email
    subscription hyperlink or e-newsletter service. Do you have any?
    Kindly permit me recognize so that I may subscribe.
    Thanks.

  112. Howdy! This post couldn’t be written much better!
    Looking at this post reminds me of my previous roommate! He constantly kept preaching about this.
    I’ll send this article to him. Fairly certain he’ll have a good read.

    I appreciate you for sharing!

  113. It’s the best time to make some plans for the future and it is time to be happy. I’ve read this post and if I could I wish to suggest you few interesting things or advice. Maybe you can write next articles referring to this article. I desire to read even more things about it!|

  114. What’s up everyone, it’s my first go to see at this web site, and post is actually fruitful in favor of me, keep up posting these content.|

  115. Greetings! Very useful advice within this post! It is the little changes that make the most important changes. Thanks for sharing!|

  116. I have been surfing on-line more than three hours these days, yet I never discovered any interesting article like yours. It is lovely value sufficient for me. In my view, if all site owners and bloggers made just right content as you probably did, the internet shall be a lot more useful than ever before.|

  117. Hi, i think that i noticed you visited my site thus i got here to go back the favor?.I’m attempting to find things to enhance my site!I suppose its adequate to make use of some of your concepts!!|

  118. Nice post. I learn something totally new and challenging on websites I stumbleupon on a daily basis. It’s always helpful to read through content from other authors and use a little something from their web sites.

  119. You are so interesting! I do not suppose I have read a single thing like this before. So wonderful to discover another person with a few original thoughts on this subject matter. Really.. thank you for starting this up. This website is one thing that’s needed on the internet, someone with a bit of originality!

  120. Everything is very open with a really clear clarification of the issues. It was really informative. Your site is very useful. Thank you for sharing!

  121. Do you mind if I quote a couple of your posts as long as I provide credit and sources back to your blog?
    My blog is in the very same area of interest as yours and my users would
    certainly benefit from some of the information you present here.
    Please let me know if this okay with you. Cheers!

  122. I’m not that much of a online reader to be honest but your sites really nice,
    keep it up! I’ll go ahead and bookmark your website
    to come back later on. Many thanks

  123. Whoa! This blog looks exactly like my old one! It’s on a completely different topic but it has pretty much the same layout and design. Great choice of colors!|

  124. I will right away snatch your rss as I can’t to find your e-mail subscription link or newsletter service. Do you have any? Please permit me know so that I could subscribe. Thanks.|

  125. My brother suggested I might like this blog. He was entirely right. This post actually made my day. You cann’t imagine just how much time I had spent for this info! Thanks!|

  126. I’ve been browsing online more than 3 hours today, yet I never found any interesting article like yours. It’s pretty worth enough for me. Personally, if all web owners and bloggers made good content as you did, the internet will be much more useful than ever before.|

  127. hi!,I really like your writing very so much! percentage we keep up a correspondence extra approximately your post on AOL? I require a specialist in this space to solve my problem. May be that is you! Taking a look forward to look you. |

  128. Hello i am kavin, its my first occasion to commenting anywhere, when i read this post i thought i could also make comment due to this good article.|

  129. What’s Going down i am new to this, I stumbled upon this I’ve found It positively helpful and it has helped me out loads. I hope to give a contribution & assist other customers like its aided me. Good job.|

  130. Hi there this is kinda of off topic but I was wanting to know if blogs use WYSIWYG editors or if you have to manually code with HTML. I’m starting a blog soon but have no coding know-how so I wanted to get guidance from someone with experience. Any help would be enormously appreciated!|

  131. Howdy, i read your blog occasionally and i own a similar one and i was just curious if you get a lot of spam comments? If so how do you stop it, any plugin or anything you can suggest? I get so much lately it’s driving me mad so any help is very much appreciated.|

  132. I really love your site.. Excellent colors & theme. Did you create this amazing site yourself? Please reply back as I’m looking to create my very own website and would like to find out where you got this from or just what the theme is named. Thank you!|

  133. Wonderful blog you have here but I was curious about if you knew of any discussion boards that cover the same topics talked about here? I’d really love to be a part of group where I can get feedback from other knowledgeable individuals that share the same interest. If you have any suggestions, please let me know. Appreciate it!|

  134. Heya! I’m at work surfing around your blog from my new iphone 4! Just wanted to say I love reading your blog and look forward to all your posts! Carry on the superb work!|

  135. That is a good tip particularly to those new to the blogosphere. Short but very precise info… Appreciate your sharing this one. A must read post!|

  136. Great post. I was checking constantly this blog and I am impressed! Extremely useful info specifically the last part 🙂 I care for such info much. I was seeking this particular info for a very long time. Thank you and good luck.|

  137. Hello there! This is my 1st comment here so I just wanted to give a quick shout out and tell you I truly enjoy reading through your articles. Can you recommend any other blogs/websites/forums that deal with the same subjects? Appreciate it!|

  138. Currently it looks like Expression Engine is the best blogging platform out there right now. (from what I’ve read) Is that what you are using on your blog?|

  139. I have been browsing online more than 2 hours today, yet I never found any interesting article like yours. It’s pretty worth enough for me. In my opinion, if all webmasters and bloggers made good content as you did, the net will be much more useful than ever before.|

  140. Currently it appears like WordPress is the preferred blogging platform available right now. (from what I’ve read) Is that what you are using on your blog?|

  141. That is very interesting, You are a very skilled blogger. I’ve joined your feed and look forward to in quest of more of your excellent post. Additionally, I have shared your web site in my social networks|

  142. Hello, i feel that i saw you visited my blog thus i came to return the prefer?.I’m
    trying to find issues to enhance my website!I assume
    its adequate to use some of your concepts!!

  143. I loved as much as you will receive carried out right here.
    The sketch is tasteful, your authored subject matter stylish.
    nonetheless, you command get bought an impatience over that you wish be delivering the following.
    unwell unquestionably come further formerly
    again as exactly the same nearly a lot often inside case you
    shield this hike. cheap flights y2yxvvfw

  144. I’ll right away grab your rss as I can’t find your e-mail subscription hyperlink or e-newsletter service. Do you have any? Please let me recognize so that I could subscribe. Thanks.|

  145. You should be a part of a contest for one of the best blogs online.
    I am going to highly recommend this blog! yynxznuh cheap flights

  146. Fantastic blog! Do you have any tips and hints for aspiring writers? I’m hoping to start my own blog soon but I’m a little lost on everything. Would you recommend starting with a free platform like WordPress or go for a paid option? There are so many options out there that I’m completely overwhelmed .. Any recommendations? Thanks!|

  147. Great site. A lot of useful info here. I am sending it
    to some pals ans additionally sharing in delicious.
    And naturally, thanks to your effort!

  148. I used to be suggested this web site by way of my cousin.
    I am now not sure whether or not this put up is written by him as no one else recognize such certain about my difficulty.
    You are amazing! Thank you!

  149. you’re in point of fact a just right webmaster. The website loading pace is incredible.
    It seems that you are doing any unique trick. Furthermore, The contents are masterpiece.

    you’ve done a wonderful activity on this subject! cheap flights
    31muvXS

  150. I love what you guys are usually up too. This kind of clever work and exposure! Keep up the excellent works guys I’ve included you guys to my own blogroll.|

  151. What’s Going down i’m new to this, I stumbled upon this I’ve discovered It absolutely useful and it has aided me out loads. I am hoping to contribute & help different customers like its aided me. Great job.|

  152. Wow! This blog looks exactly like my old one! It’s on a
    totally different subject but it has pretty much
    the same layout and design. Excellent choice of colors!

  153. This is the perfect website for anybody who really wants to
    understand this topic. You understand so much its almost tough to argue with you (not that I really would want to…HaHa).
    You certainly put a brand new spin on a subject that has been written about for many years.
    Great stuff, just excellent!

  154. Write more, thats all I have to say. Literally, it seems as though you relied on the video to make your point. You definitely know what youre talking about, why waste your intelligence on just posting videos to your weblog when you could be giving us something enlightening to read?|

  155. Spot on with this write-up, I absolutely think this web site needs a lot more
    attention. I’ll probably be back again to see more, thanks for the info!

  156. Its such as you learn my thoughts! You appear to understand a lot approximately this, like you wrote the e book in it or something. I think that you could do with a few percent to power the message home a little bit, however instead of that, that is wonderful blog. A fantastic read. I will certainly be back.|

  157. Hello would you mind stating which blog platform you’re using? I’m looking to start my own blog in the near future but I’m having a difficult time choosing between BlogEngine/Wordpress/B2evolution and Drupal. The reason I ask is because your design seems different then most blogs and I’m looking for something completely unique. P.S Apologies for getting off-topic but I had to ask!|

  158. I was suggested this blog by my cousin. I’m not sure whether this post is written by him as no one else know such detailed about my difficulty. You’re wonderful! Thanks!|

  159. Hello, Neat post. There is an issue along with your site in web explorer, may test this?
    IE nonetheless is the marketplace leader and a big component of other folks
    will pass over your magnificent writing because of this problem.

  160. What i do not understood is in fact how you are now not really a lot more well-favored than you might be right now. You are so intelligent. You already know thus significantly in terms of this topic, produced me individually consider it from a lot of varied angles. Its like women and men are not involved unless it’s one thing to do with Lady gaga! Your personal stuffs great. Always maintain it up!|

  161. I do believe all of the ideas you’ve offered to your post. They are very convincing and can certainly work. Still, the posts are very quick for beginners. May just you please extend them a bit from next time? Thank you for the post.|

  162. Fact of the future: There are a lot of people that would pay a minimum of $10,000,000 USD for each founder token of appreciation known as 777 immortality smart contract.

  163. I have been browsing online more than 4 hours today, yet I never found any interesting article like yours. It is pretty worth enough for me. In my opinion, if all web owners and bloggers made good content as you did, the internet will be much more useful than ever before.|

  164. I appreciate, lead to I found just what I was taking a look for. You have ended my four day long hunt! God Bless you man. Have a great day. Bye|

  165. This is a correct weblog for everyone who would like to find out about this topic. You realize a great deal of its nearly hard to argue to you (not that I personally would want…HaHa). You actually put a different spin on the topic thats been written about for a long time. Great stuff, just fantastic!

  166. Hi”your blog is full of comments and it is very active,  

  167. We’re a group of volunteers and opening a new scheme in our community. Your web site offered us with valuable info to work on. You have done an impressive job and our entire community will be thankful to you.

发表评论

电子邮件地址不会被公开。