<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Falando de Segurança &#187; media player</title>
	<atom:link href="http://www.falandodeseguranca.com/tag/media-player/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.falandodeseguranca.com</link>
	<description>Por Gabriel Lima</description>
	<lastBuildDate>Mon, 05 Jul 2010 17:14:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Plugin do Media Player expõe existência de arquivos.</title>
		<link>http://www.falandodeseguranca.com/2009/11/plugin-do-media-player-expoe-existencia-de-arquivos/</link>
		<comments>http://www.falandodeseguranca.com/2009/11/plugin-do-media-player-expoe-existencia-de-arquivos/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 22:40:37 +0000</pubDate>
		<dc:creator>Gabriel Lima</dc:creator>
				<category><![CDATA[Navegadores]]></category>
		<category><![CDATA[media player]]></category>

		<guid isPermaLink="false">http://www.falandodeseguranca.com/?p=263</guid>
		<description><![CDATA[Por alguns anos, trabalhei com streaming de áudio e vídeo. Um software que fez parte constante de meu trabalho foi o Windows Media Player. Não posso negar, seu plugin (objeto) para browsers traz uma série de recursos que muitos desconhecem.  Com a excelente documentação disponível na MSDN em mãos, você poderá criar um player dinâmico, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 5px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F11%2Fplugin-do-media-player-expoe-existencia-de-arquivos%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.falandodeseguranca.com%2F2009%2F11%2Fplugin-do-media-player-expoe-existencia-de-arquivos%2F&amp;source=gabrielpato&amp;style=compact" height="61" width="50" /><br />
			</a>
		</div>
<p><img class="alignleft size-full wp-image-265" src="http://www.falandodeseguranca.com/wp-content/uploads/2009/11/Windows-media-player_128.png" width="114" height="114" /> Por alguns anos, trabalhei com streaming de áudio e vídeo. Um software que fez parte constante de meu trabalho foi o <strong>Windows Media Player</strong>. Não posso negar, seu plugin (objeto) para browsers traz uma série de recursos que muitos desconhecem.  Com a <a href="http://msdn.microsoft.com/en-us/library/dd563945%28VS.85%29.aspx" target="_blank">excelente documentação disponível na MSDN</a> em mãos, você poderá criar um player dinâmico, tratando playlists, enviando erros durante o streaming ao servidor, anotando banda usada, pacotes perdidos, etc, tudo por JavaScript.</p>
<p>Claro que nem tudo é belo e devo parar meus elogios por aqui. Vocês bem sabem: Mais recursos, mais lugares para uma falha aparecer. E é, apareceu.</p>
<p>Esqueça a principal função de um player. Deixemos pra lá as mp3s ou vídeos que ele deveria tocar. Vamos unir tudo aquilo que o plugin nos oferece e então, no post de hoje, veremos<strong> como detectar de arquivos locais do computador do usuário</strong> <strong>usando o objeto do Windows Media Player para navegadores</strong>.</p>
<p>Quando solicitamos ao player embutido no navegador que conecte-se à determinada URL ou arquivo local, uma série de ações ocorrem. O WMP, precisa, por exemplo, conectar-se à url, receber uma playlist, enviar o request pela mídia a ser executada, etc.</p>
<p>Cada etapa do carregamento da mídia pode ser obtida pela propriedade <em>player.</em><strong>openState</strong>, que retorna o ID correspondente a ação atual, e a cada mudança de etapa o evento <em>player</em><strong><em>.</em>OpenStateChange </strong>é acionado. Não há nenhuma relação entre os IDs e um mesmo evento pode ser chamado mais de uma vez durante o processo.</p>
<p>Aí então, fica bem simples entender a mágica do funcionamento da detecção. O player terá estados diferentes ao encontrar ou não o arquivo, e, monitorando as mudanças, teremos a informação que desejamos.</p>
<p>O único problema é que o WMP abrirá apenas arquivos que possa interpretar, como mp3, wmv, avi, etc, e, certamente, queremos ter a liberdade de detectar todas as demais extenções.</p>
<p>Quando pedimos para abrir um arquivo que ele não reconheça como mídia, ele perguntará ao usuário se deseja continuar, avisando, ainda, a extenção solicitada. Isso mandaria pro saco nossa detecção, não é mesmo?</p>
<p>É aí que o autor do blog <strong>lrv.ch.vu</strong> <span style="color: #888888;">(..que nome, hein?)</span> fez uma descoberta que faz ignorar esta pergunta: Ele percebeu que quando executamos no player uma url HTTP que retorne um redirecionamento para o endereço que queremos testar (como <strong>file://boot.ini,</strong> por exemplo), o player irá continuar normalmente, sem pedir qualquer interação.</p>
<p>Infelizmente, o post no blog citado não oferece muitos detalhes. Ele não diz, por exemplo, qual o tipo de redirecionamento (301 ou 302) é necessário, e, pra completar, sua página de exemplo, que usa formulários php e jquery, não teve detalhes exibidos. A didática foi pro saco.</p>
<p>Como já estava com a mão na massa e já havia programado alguns testes, resolvi seguir a dica do redirecionamento e dar sequencia. O gringo lá tinha razão. O redirecionamento HTTP &#8220;<strong>302</strong>&#8221; (Moved Temporarily) faz o player seguir o caminho sugerido e continuar a execução. Já com o código 301 não tive sucesso.</p>
<p>Já com o redirecionamento feito e a mudança de estado sendo monitorada pelo evento openStateChange, veja, abaixo, como a detecção é feita:</p>
<p>Eventos que ocorrem ao carregar<strong> </strong>um arquivo inexistente pelo redirecionamento:<strong> file://teste.exe<br />
</strong></p>
<p>ESTADO: <strong>21</strong><br />
ESTADO:<strong> 6</strong><br />
ESTADO: <strong>6</strong><br />
ESTADO: <strong>6</strong></p>
<p>Eventos que ocorrem ao carregar<strong> </strong>um arquivo existente pelo redirecionamento:<strong> file://boot.ini </strong></p>
<p>ESTADO: <strong>21 &#8211; </strong>Opening a URL with an unknown type.<br />
ESTADO:<strong> 6</strong> &#8211; Playlist is open.<br />
ESTADO: <span style="color: #ff0000;"><strong>8</strong></span> <span style="color: #ff0000;">- A new media item is about to be loaded.</span><br />
ESTADO: <strong>6</strong> &#8211; Playlist is open.<br />
ESTADO: <strong>6 &#8211; </strong>Playlist is open.</p>
<p>Opa! Olha lá! O openState 8 só ocorre quando o arquivo existe. Temos em mãos o poder de verificar a existência de arquivos locais!</p>
<p>Programei um scanner que, rapidinho, pode verificar uma lista de arquivos e dizer quais existem. O código está limpo e você pode ficar a vontade para ler e aprender. Abaixo, segue o código do arquivo wmp.php chamado, que cria o redirecionamento necessário para a verificação:</p>
<pre name="code" class="php">
&lt;?php
header("HTTP/1.1 302 Moved Temporarily");
header("Location: file:///".$_GET['arquivo']);
?&gt;
</pre>
<p><strong><a href="http://www.falandodeseguranca.com/exemplo/wmp.html" target="_blank">Entre já na página de testes que criei, clique aqui!</a></strong> <em>(Internet Explorer, apenas)</em><br />
Caso queira ver todos os possíveis IDs do openState e suas respectivas descrições, <a href="http://msdn.microsoft.com/en-us/library/dd564037%28VS.85%29.aspx" target="_blank">veja este link da MSDN.</a></p>
<p>Por hoje é só. Se você conferir os posts anteriores, de como criar módulos para BeEF, perceberá que facilmente você pode migrar essa detecção de arquivos locais para um módulo.</p>
<p>Feedbacks são SEMPRE bem vindos. Comente!</p>
<p>Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.falandodeseguranca.com/2009/11/plugin-do-media-player-expoe-existencia-de-arquivos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
