<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" 
      xmlns:thr="http://purl.org/syndication/thread/1.0">
  <link rel="alternate" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php" />
  <link rel="self" type="application/atom+xml" href="http://www.readwriteweb.com/atom.xml" />
  <id>tag:,2009:/1/tag:www.readwriteweb.com,2008://1.6690-</id>
  <updated>2009-11-23T18:56:44Z</updated>
  <title>Comments for Source of FriendFeed Spam Revealed - Write APIs Can Be Trouble</title>
  
  <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.23-en</generator>
  <entry>
    <id>tag:www.readwriteweb.com,2008://1.6690</id>
    <link rel="alternate" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.readwriteweb.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=6690" title="Source of FriendFeed Spam Revealed - Write APIs Can Be Trouble" />
    <published>2008-07-02T15:36:06Z</published>
    <updated>2008-07-02T21:16:13Z</updated>
    <title>Source of FriendFeed Spam Revealed - Write APIs Can Be Trouble</title>
    <summary>Write APIs Can Be Trouble</summary>
    <author>
      <name>Sarah Perez</name>
      <uri>http://www.sarahintampa.com</uri>
    </author>
    
    <category term="Features" />
    
    <category term="Trends" />
    
    <category term="Twitter" />
    
    <content type="html" xml:lang="en" xml:base="http://www.readwriteweb.com/">
      <![CDATA[<p><img src="http://www.readwriteweb.com/images/gridjit_ff.jpg">An interesting note came across our inboxes just now - the source of yesterday's <a href="http://www.friendfeed.com">FriendFeed </a>spam has been revealed. If you've been using the social aggregator FriendFeed, then you may have noticed some odd-looking discussions yesterday where the same comment was repeated over and over by numerous different users. The source of this spam has now been identified, but this problem highlights a larger issue that could affect any company providing an open write API for developers to use - it only takes one developer's mistake to greatly impact a service. </p>]]>
      <![CDATA[<p>If you don't know what we're talking about, then take a look at these posts on FriendFeed <a href="http://friendfeed.com/e/6def167a-f3d2-4711-aebd-6f8171919178/http-www-geeky-gadgets-com/">here</a> and <a href="http://friendfeed.com/e/8be20617-8d57-478c-a367-98da5d02a8a0/Not-a-complete-list-of-top-diggers/">here</a> to see the problem in action <em>(or just check out the image below):</em></p>

<p><img src="http://www.readwriteweb.com/images/friendfeed_spam.png"></p>

<p>According to <a href="http://friendfeed.com/about/team">FriendFeed's Bret Taylor</a>, the problem was caused by an malfunctioning API client. At the time, he didn't know whether the problem was accidental or intentional, so they disabled the API client and researched the IP address to determine where these messages were coming from. They then got in touch with the developer to let him know what was going on.</p>

<p>As it turned out, the service at fault was <a href="http://www.gridjit.com">Gridjit</a>, a social portal service still in alpha that uses both Twitter's and FriendFeed's APIs to allow you to view and interact with both services from Gridjit's web site.</p>

<p><img src="http://www.readwriteweb.com/images/gridjit.png"></p>

<p>As soon as FriendFeed got in touch with Gridjit, Gridjit's founder, Ray Grieselhuber, <a href="http://blog.gridjit.com/2008/07/01/gridjit-posting-comments-likes-temporarily-disabled/">disabled the service's ability to post statuses, comments, and likes</a> from within Gridjit and shut off access to the account management screens. After a day's worth of research, <a href="http://blog.gridjit.com/2008/07/02/additional-details-on-the-disabled-features/">the problem was discovered</a> - it wasn't a security issue, just a bug in the code. The issues is being addressed now and the affected users who had comments posted under their name were contacted via an email that read:</p>

<blockquote>
  <p><em>I'm sending this to let you know about a bug in Gridjit's code that caused a comment to be posted to FriendFeed in your name. </em></p>

  <p><em>I spent the day reviewing the system and performing security audits to ensure that that this was not a security violation - it was not. </em></p>

  <p><em>Rather, it was a bug in the system that caused the extra comments to be posted based on some obscure query patterns. I'm taking steps to prevent this sort of thing from happening again. </em></p>

  <p><em>If you would like to see the comments and delete them, the FriendFeed links can be found here: </em></p>

  <p><a href="http://friendfeed.com/e/6def167a-f3d2-4711-aebd-6f8171919178/http-www-geeky-gadgets-com/"><em>http://friendfeed.com/e/6def167a-f3d2-4711-aebd-6f8171919178/http-www-geeky-gadgets-com/</em></a></p>

  <p><a href="http://friendfeed.com/e/8be20617-8d57-478c-a367-98da5d02a8a0/Not-a-complete-list-of-top-diggers/"><em>http://friendfeed.com/e/8be20617-8d57-478c-a367-98da5d02a8a0/Not-a-complete-list-of-top-diggers/</em></a></p>

  <p><em>I sincerely apologize for this. The quality of your experience with Gridjit is very important to me. </em></p>

  <p><em>Additional details and updates will be posted on the Gridjit blog (</em><a href="http://blog.gridjit.com)"><em>http://blog.gridjit.com)</em></a><em>. </em></p>

  <p><em>Please let me know if you have any questions. </em></p>

  <p><em>Best regards, </em></p>

  <p><em>Ray Grieselhuber</em></p>
</blockquote>

<h2>Write APIs - A Cause For Concern?</h2>

<p>While in this particular case, the issue was relatively minor and more of a strange occurrence than anything, it was only through FriendFeed's quick action that the entire service was not affected by this programming bug. Of course, it was also helpful that Gridjit is still in private alpha testing at the moment, so there aren't a lot of users currently using their service. </p>

<p>But what if this bug had come from another service that was heavily used? And what if it had been a web app that's far more mission-critical than FriendFeed? </p>

<p>The problem with providing an open API (that is, a <em><strong>write</strong></em> API) is that all it takes is one programmer to have a big impact on a service. Like in the case of Gridjit, it may be an accidental bug in their code, but it could have just as easily been someone with a more malicious intent. </p>]]>
    </content>
  </entry>

  <entry>
    <id>tag:www.readwriteweb.com,2008://1.6690-comment:59301</id>
    <thr:in-reply-to ref="tag:www.readwriteweb.com,2008://1.6690" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php"/>
    <link rel="alternate" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php#c59301" />
    <title>Comment from Aaron Brazell on 2008-07-02</title>
    <author>
        <name>Aaron Brazell</name>
        <uri>http://friendfeed.com/technosailor</uri>
    </author>
    <content type="html" xml:lang="en" xml:base="http://friendfeed.com/technosailor">
        <![CDATA[<p>Whoda thunk it? Giving unknown external entities ability to write without prejudice? Spam? No......</p>]]>
    </content>
    <published>2008-07-02T16:01:08Z</published>
  </entry>

  <entry>
    <id>tag:www.readwriteweb.com,2008://1.6690-comment:59302</id>
    <thr:in-reply-to ref="tag:www.readwriteweb.com,2008://1.6690" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php"/>
    <link rel="alternate" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php#c59302" />
    <title>Comment from Hao Chen on 2008-07-02</title>
    <author>
        <name>Hao Chen</name>
        <uri>http://friendfeed.com/bitfaker</uri>
    </author>
    <content type="html" xml:lang="en" xml:base="http://friendfeed.com/bitfaker">
        <![CDATA[<p>I'm gonna be more careful which sites I give my FF credentials to.</p>]]>
    </content>
    <published>2008-07-02T16:02:58Z</published>
  </entry>

  <entry>
    <id>tag:www.readwriteweb.com,2008://1.6690-comment:59305</id>
    <thr:in-reply-to ref="tag:www.readwriteweb.com,2008://1.6690" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php"/>
    <link rel="alternate" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php#c59305" />
    <title>Comment from Brenda Young on 2008-07-02</title>
    <author>
        <name>Brenda Young</name>
        <uri>http://friendfeed.com/4byoung</uri>
    </author>
    <content type="html" xml:lang="en" xml:base="http://friendfeed.com/4byoung">
        <![CDATA[<p>Good for Gridjit to respond so quickly, but bad that it happened at all. At least this time it wasn't a malicious source. Who knows how long it will take for that to change? It seems like these new services start out as so much fun and then it doesn't take long for spammers and others to start taking shortcuts and it really cuts in to the value for all the rest of us.We are all in uncharted territory with Social Media and people need to be careful when choosing what sites to add to FF or other social sites.</p>]]>
    </content>
    <published>2008-07-02T16:15:57Z</published>
  </entry>

  <entry>
    <id>tag:www.readwriteweb.com,2008://1.6690-comment:59306</id>
    <thr:in-reply-to ref="tag:www.readwriteweb.com,2008://1.6690" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php"/>
    <link rel="alternate" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php#c59306" />
    <title>Comment from Jon Dillon on 2008-07-02</title>
    <author>
        <name>Jon Dillon</name>
        <uri>http://friendfeed.com/jondillon</uri>
    </author>
    <content type="html" xml:lang="en" xml:base="http://friendfeed.com/jondillon">
        <![CDATA[<p>To be fair gridjit is in alpha so teething troubles are to be expected and I guess it was only people testing the gidjit service that were involved. Ray also followed up real quick and let everyone know personally what had happened which I'm sure was the first some people had heard of it. Does make you think about the API process though</p>]]>
    </content>
    <published>2008-07-02T16:19:57Z</published>
  </entry>

  <entry>
    <id>tag:www.readwriteweb.com,2008://1.6690-comment:59307</id>
    <thr:in-reply-to ref="tag:www.readwriteweb.com,2008://1.6690" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php"/>
    <link rel="alternate" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php#c59307" />
    <title>Comment from Ray Grieselhuber on 2008-07-02</title>
    <author>
        <name>Ray Grieselhuber</name>
        <uri>http://friendfeed.com/raygrieselhuber</uri>
    </author>
    <content type="html" xml:lang="en" xml:base="http://friendfeed.com/raygrieselhuber">
        <![CDATA[<p>Thanks, Jon. Of course, I was very upset that this happened but Gridjit is better now for it. Also, it does point to the strength of the remote key system that FriendFeed chose for their API and the professionalism of their team. I wish other services provided similar services (like OAuth, etc.) for access to their APIs.</p>]]>
    </content>
    <published>2008-07-02T16:26:32Z</published>
  </entry>

  <entry>
    <id>tag:www.readwriteweb.com,2008://1.6690-comment:59308</id>
    <thr:in-reply-to ref="tag:www.readwriteweb.com,2008://1.6690" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php"/>
    <link rel="alternate" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php#c59308" />
    <title>Comment from Bruno Pedro on 2008-07-02</title>
    <author>
        <name>Bruno Pedro</name>
        <uri>http://tarpipe.com/</uri>
    </author>
    <content type="html" xml:lang="en" xml:base="http://tarpipe.com/">
        <![CDATA[<p>Hello Sarah,</p>

<p>Nice post. You are right about having those concerns but the problem is not only with applications that provide a write API. Given the nature of the Web, this can also happen the other way around, with aggregators that are copying content from other sites.</p>

<p>Suppose, for instance, that there's a bug with twitter's RSS feeds, duplicating entries across users just like the example you show on your post. What would happen to the thousands of aggregators out there that use twitter's feeds? How would you solve that problem?</p>

<p>I believe the solution is to implement measures that can possibly identify duplicates, false posts, suspect activity, throttling, and so on. If FriendFeed had a similar content throttler in place it could identify the behavior you're describing, automatically disable the API client ID and inform the API client of the ocurrence.</p>]]>
    </content>
    <published>2008-07-02T16:34:11Z</published>
  </entry>

  <entry>
    <id>tag:www.readwriteweb.com,2008://1.6690-comment:59310</id>
    <thr:in-reply-to ref="tag:www.readwriteweb.com,2008://1.6690" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php"/>
    <link rel="alternate" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php#c59310" />
    <title>Comment from Slippy Lane on 2008-07-02</title>
    <author>
        <name>Slippy Lane</name>
        <uri>http://friendfeed.com/slippy</uri>
    </author>
    <content type="html" xml:lang="en" xml:base="http://friendfeed.com/slippy">
        <![CDATA[<p>There may well come a time when it is necessary to lock down the API and require developers to be issued unique unlock keys, so that any spamming or other malicious activity can be tracked and shut down promptly.</p>]]>
    </content>
    <published>2008-07-02T16:43:37Z</published>
  </entry>

  <entry>
    <id>tag:www.readwriteweb.com,2008://1.6690-comment:59311</id>
    <thr:in-reply-to ref="tag:www.readwriteweb.com,2008://1.6690" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php"/>
    <link rel="alternate" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php#c59311" />
    <title>Comment from Rob Diana on 2008-07-02</title>
    <author>
        <name>Rob Diana</name>
        <uri>http://friendfeed.com/robdiana</uri>
    </author>
    <content type="html" xml:lang="en" xml:base="http://friendfeed.com/robdiana">
        <![CDATA[<p>@SlippyLane many services do require a unique key already. FriendFeed just happens to not be one of them. The worst part is that if you have a logic bug when using the API (probably the issue with Gridjit) it can do things like multiple repeated posts. Hopefully, people give them a chance.</p>]]>
    </content>
    <published>2008-07-02T16:50:01Z</published>
  </entry>

  <entry>
    <id>tag:www.readwriteweb.com,2008://1.6690-comment:59331</id>
    <thr:in-reply-to ref="tag:www.readwriteweb.com,2008://1.6690" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php"/>
    <link rel="alternate" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php#c59331" />
    <title>Comment from Aaron Brazell on 2008-07-02</title>
    <author>
        <name>Aaron Brazell</name>
        <uri>http://technosailor.com</uri>
    </author>
    <content type="html" xml:lang="en" xml:base="http://technosailor.com">
        <![CDATA[<p>Speaking of Friendfeed... nice integration into comments...!</p>]]>
    </content>
    <published>2008-07-02T19:22:34Z</published>
  </entry>

  <entry>
    <id>tag:www.readwriteweb.com,2008://1.6690-comment:59360</id>
    <thr:in-reply-to ref="tag:www.readwriteweb.com,2008://1.6690" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php"/>
    <link rel="alternate" type="text/html" href="http://www.readwriteweb.com/archives/source_friendfeed_spam_reveale.php#c59360" />
    <title>Comment from Boredcollegekid on 2008-07-02</title>
    <author>
        <name>Boredcollegekid</name>
        <uri></uri>
    </author>
    <content type="html" xml:lang="en" xml:base="">
        <![CDATA[<p>Interesting note, plurk also had a problem related to their unofficial API release. A user was messing around with the API and unknowningly friended most of the people on plurk, skipping the approval step, basically adding themself as a friend with out people knowing. </p>]]>
    </content>
    <published>2008-07-03T02:52:02Z</published>
  </entry>

</feed>