<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Miguel Alho - Multimédia</title>
	
	<link>http://www.miguelalho.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Thu, 19 Jul 2012 17:55:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/MytymykysPhotographyBlog" /><feedburner:info uri="mytymykysphotographyblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Beginner’s Guide to Postgres – actualização</title>
		<link>http://feedproxy.google.com/~r/MytymykysPhotographyBlog/~3/oI1o_1pGwts/</link>
		<comments>http://www.miguelalho.com/beginners-guide-to-postgres-actualizacao/#comments</comments>
		<pubDate>Thu, 19 Jul 2012 17:55:37 +0000</pubDate>
		<dc:creator>Miguel Alho</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://www.miguelalho.com/?p=1281</guid>
		<description><![CDATA[O curso de PostgreSQL que estamos a criar e a publicar no Udemy está na reta final e quase completo. Adicionamos há instantes a primeira parte das lições que explicam e exemplificam a clausula WHERE nos SELECTs. Veja o curso em http://www.udemy.com/beginners-guide-to-postgresql/]]></description>
			<content:encoded><![CDATA[<p>O <a href="http://www.udemy.com/beginners-guide-to-postgresql/" title="Beginner's Guid to PostgreSQL">curso de PostgreSQL</a> que estamos a criar e a publicar no Udemy está na reta final e quase completo. Adicionamos há instantes a primeira parte das lições que explicam e exemplificam a clausula WHERE nos SELECTs.</p>
<p>Veja o curso em <a href="http://www.udemy.com/beginners-guide-to-postgresql/" title="Beginner's Guide to PostgreSQL ">http://www.udemy.com/beginners-guide-to-postgresql/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelalho.com/beginners-guide-to-postgres-actualizacao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.miguelalho.com/beginners-guide-to-postgres-actualizacao/</feedburner:origLink></item>
		<item>
		<title>Passwords “insonsas”</title>
		<link>http://feedproxy.google.com/~r/MytymykysPhotographyBlog/~3/WBeRjqlyem0/</link>
		<comments>http://www.miguelalho.com/passwords-insonsas/#comments</comments>
		<pubDate>Sat, 14 Jul 2012 12:15:15 +0000</pubDate>
		<dc:creator>Miguel Alho</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[segurança]]></category>

		<guid isPermaLink="false">http://www.miguelalho.com/?p=1273</guid>
		<description><![CDATA[Um dos pontos fulcrais na segurança de um site é a gestão de passwords dos utilizadores.Sempre que nós como programadores implementamos um sistema de autenticação que recorre a nome de utilizador e password, temos de ter cuidados especiais. Vulnerabilidades que desconhecemos nos nossos sistemas podem comprometer a base de dados e tornar o seu conteúdo [...]]]></description>
			<content:encoded><![CDATA[<p>Um dos pontos fulcrais na segurança de um site é a gestão de passwords dos utilizadores.Sempre que nós como programadores implementamos um sistema de autenticação que recorre a nome de utilizador e password, temos de ter cuidados especiais. Vulnerabilidades que desconhecemos nos nossos sistemas podem comprometer a base de dados e tornar o seu conteúdo acessível.</p>
<p>Se considerar-mos os hábitos de utilizadores, nomeadamente a reutilização frequente de palavras passe, a descoberta de uma palavra passe num local poderá facilitar o acesso a dados do utilizador noutros locais e sistemas. Agentes maliciosos utilizam ataques para obter este tipo de informação devido ao seu valor. Ainda recentemente houve o ataque ao <a title="Linked in password atack" href="http://press.linkedin.com/node/1212">Linkedin, e a publicação da informação de passwords dos utilizadores</a>. É portanto necessário tomar medidas, não só para preservar a segurança dos dados, mas garantir que o acesso a elas não crie novas vulnerabilidades.</p>
<p>Em circunstância alguma devemos armazenar a palavra passe do utilizador na base de dados num formato legível! Se considerar-mos o funcionamento de websites e aplicações, as únicas situações que necessitaria-mos de ter a password original do utilizador numa aplicação seria para reutiliza-la na autenticação a um serviço externo, caso utilizássemos o serviço em representação do utilizador. Mas o risco associado não justifica a prática &#8211; a troca de outro tipo de chaves de autenticação é mais seguro para o utilizador. Um exemplo são as autorizações em aplicações de sites como o Facebook: a passe do utilizador não é transmitida, apenas uma chave complexa que autoriza o acesso pela aplicação.</p>
<h3><strong>Técnicas para ofuscar a password</strong></h3>
<p>Mas e a autenticação no próprio site?! A autenticação no site é efectuado através da comparação da password do utilizador, inserido no formulário de autenticação, e a password armazenada. Recorrendo a um exemplo simples, para ver o funcionamento, imagina que o nosso user José Silva utiliza uma password simples e comum &#8220;qwerty&#8221;. No formulário ele introduz o username e password, e quando clica para fazer o login, procuramos o registo dele na base e comparamos as passes. Se coincidirem:</p>
<p><code> if(formData["password"] == dbData["password"]){ ... </code></p>
<p>o utilizador passa a ter acesso ao site/aplicação. No (semi-pseudo)código, o formData representa os dados vindos do formulário e o dbData os dados provenientes da base de dados.</p>
<p>O erro que alguns programadores inconscientes destes problemas têm é não compreenderem que esta comparação não tem de ser efectuada com as versões originais da passe. Na verdade, podemos e devemos usar a versão codificada da passe, conhecida por &#8220;<strong>hash</strong>&#8221; (ou escrutínio, mas a palavra em inglês é bem mais agradável). Ou seja, a partir do momento que o utilizador regista a sua conta, o que deve ser armazenado é uma versão codificada da passe, e utilizando o um algoritmo que permita apenas a codificação num sentido (impedido recuperar o original por processamento inverso). Se recorrermos a um algoritmo como o <a title="Algoritmo MD5" href="http://pt.wikipedia.org/wiki/MD5">MD5 </a>ou o <a title="Algoritmo SHA-1" href="http://pt.wikipedia.org/wiki/SHA-1">SHA-1</a> a password fica armazenado num formato críptico e bem mais difícil de descodificar. (Nota: o SHA-1 e MD5 hoje em dia não são suficientemente seguros, já que com a capacidade de processamento disponível, a descodificação por ataques de dicionário ou força bruta são viáveis).</p>
<p>Vejam a mesma passe em ambos os formatos:</p>
<p><code> MD5: "qwerty" =&gt; d8578edf8458ce06fbc5bb76a58c5ca4<br />
SHA-1: "qwerty" =&gt; b1b3773a05c0ed0176787a4f1574ff0075f7521e<br />
</code></p>
<p>A comparação no método de autenticação passa então a ser entre versões codificadas da mesma palavra, em vez da versão original da palavra:</p>
<p><code> if(MD5.codificar(formData["password"]) == dbData["password"]){ ... </code></p>
<p>Apesar de ser muito melhor, e mais seguro que o armazenamento em texto livre da password, não é suficientemente seguro. Existem tabelas com as palavras codificadas pré-calculadas (lookup tables e rainbow tables) que permitem comparação para obter os valores originais, e mesmo a capacidade de processamento actual do hardware disponível permite efectuar o cálculo por força bruta (este a todas as combinações possíveis) em tempo útil.</p>
<h3>Um pouco de sal</h3>
<p>Uma técnica importante para contrariar o uso de tabelas de lookup consiste em adicionar um pouco de texto adicional à palavra passe, conhecido por um &#8220;salt&#8221; (daí o trocadilho do sal insonso&#8230;enfim&#8230;). O facto de acrescentar mais caracteres no inicio e/ou no fim tornará a palavra a codificar mais complexa e comprida, tornando a sua descodificação também mais complexa.</p>
<p>Voltando ao exemplo, imagina que acrescentamos o texto &#8220;p@$$wordComSal&#8221; no início da password do utilizador, antes de a codificar. Teriamos então:</p>
<p><code><br />
MD5: "p@$$wordComSalqwerty" =&gt; cd17413e25e513690f7c53fbab394e25<br />
</code></p>
<p>O facto de acrescentarmos um termo incomum no inicio da password do utilizador faz com que o uso de dicionários fique inutilizado, uma vez que o dicionário (e as hashes associadas) não terão o salt em consideração. A base de dados terá armazenado a passe codificada com o salt, e a comparação a efectuar será do tipo:</p>
<p><code> if(MD5.codificar(salt + formData["password"]) == dbData["password"]){ ... </code></p>
<p>Ainda estou a considerar um salt fixo e geral para o sistema. E mais uma vez, apesar de ser mais seguro que as anteriores, ainda não é o suficiente. Se o salt é descoberto, ataques de dicionário e força bruta passam a ser novamente possíveis, necessitando apenas de recalcular as hashes com o salt.</p>
<h3>Aleatoriedade</h3>
<p>A melhoria neste processo é possível garantindo que o salt para cada user seja distinto e, preferencialmente, aleatório. Se cada passe tem um salt diferente, a descoberta de um (por força bruta) impossibilita a criação de tabelas de lookup gerais &#8211; apenas serviriam para o registo em que foi descoberto. Além disso, as hashes devem ser geradas usando algoritmos mais seguros (SHA256, SHA512, RipeMD, WHIRLPOOL, SHA3) e a criação deverá ser lenta, recorrendo a estratégias de <i>key-streching</i> ( PBKDF2, bcrypt, and scrypt).</p>
<p>A <a href="http://crackstation.net/hashing-security.htm">crackstation</a> tem um excelente artigo sobre o tema.</p>
<p>Recomendo a escolha do bloco adequado de código e a integração em frameworks pessoais <i>core</i> para que possa ser usado facilmente.A validação da passe continua com o mesmo processo (apenas escrito de forma adequada às classes fornecidas) :</p>
<p><code> if(PasswordHash.ValidatePassword(formData["password], dbData["password"])){ ... </code></p>
<p>O campo de password do utilizador na base de dados passa a ter uma concatenação do número de iterações PBKDF2, o salt, e a hash gerada, separados pelo caracter &#8220;:&#8221;. O método <em>validate</em> separa as componentes armazenado, aplica a salt à passe submetida (o salt é especifico do utilizador) e compara a hash gerada com a armazenada. O cálculo é demorado (centenas de milissegundos) tornando ataques de força bruta pouco úteis. </p>
<p>É naturalmente importante não esquecer que esta não é a única técnica, e outros métodos devem ser empregues na construção do site / aplicação para anular todos os &#8220;buracos&#8221; existentes, reduzindo ao máximo e sempre que possível as falhas de segurança.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelalho.com/passwords-insonsas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.miguelalho.com/passwords-insonsas/</feedburner:origLink></item>
		<item>
		<title>Beginner’s Guide to PostgreSQL</title>
		<link>http://feedproxy.google.com/~r/MytymykysPhotographyBlog/~3/IQN4tZjNdow/</link>
		<comments>http://www.miguelalho.com/beginners-guide-to-postgresql/#comments</comments>
		<pubDate>Fri, 25 May 2012 11:01:47 +0000</pubDate>
		<dc:creator>Miguel Alho</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[curso]]></category>
		<category><![CDATA[formação]]></category>

		<guid isPermaLink="false">http://www.miguelalho.com/?p=1268</guid>
		<description><![CDATA[Acabei de publicar um novo curso de iniciação às bases de dados relacionais em PostgreSQL no Udemy, um site de formação on-line. O curso está dividido em 3 módulos &#8211; introdução, criação e manipulação das estruturas de dados, e SQL. Actualmente, tem 18 lições em vídeo disponíveis, e muitas em produção. O curso está em [...]]]></description>
			<content:encoded><![CDATA[<p>Acabei de publicar um <a href="http://www.udemy.com/beginners-guide-to-postgresql/">novo curso de iniciação às bases de dados relacionais em PostgreSQL no Udemy</a>, um site de formação on-line. O curso está dividido em 3 módulos &#8211; introdução, criação e manipulação das estruturas de dados, e SQL. Actualmente, tem 18 lições em vídeo disponíveis, e muitas em produção.</p>
<p>O curso está em inglês, e espero que venha a ser bastante útil a muita gente de modo a entrar no mundo desta excelente base de dados.</p>
<p><a href="http://www.udemy.com/beginners-guide-to-postgresql/">http://www.udemy.com/beginners-guide-to-postgresql/</a></p>
<p>I just finished publishing a <a href="http://www.udemy.com/beginners-guide-to-postgresql/">new beginner&#8217;s course on PostgreSQL at Udemy</a>, an online platform for learning. The course has 3 modules &#8211; an introduction to relational databases, data structures and manipulation finally SQL. Currently, the course has 18 vídeo lessons and the missing ones are currently in production.</p>
<p>The course is in english, and I hope it becomes very usefull to anyone wanting to enter the world of this amazing database system.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelalho.com/beginners-guide-to-postgresql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.miguelalho.com/beginners-guide-to-postgresql/</feedburner:origLink></item>
		<item>
		<title>Robert Myers – Evertything I’ve Learned, I Learded From Failure</title>
		<link>http://feedproxy.google.com/~r/MytymykysPhotographyBlog/~3/39Pak08tD3g/</link>
		<comments>http://www.miguelalho.com/robert-myers-evertything-ive-learned-i-learded-from-failure/#comments</comments>
		<pubDate>Sat, 09 Apr 2011 11:06:15 +0000</pubDate>
		<dc:creator>Miguel Alho</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://miguelalho.com/?p=1174</guid>
		<description><![CDATA[Um excelente talk no Info-Q a não perder! http://www.infoq.com/presentations/I-Learned-from-Failure]]></description>
			<content:encoded><![CDATA[<p>Um excelente talk no Info-Q a não perder!</p>
<p><a href="http://www.infoq.com/presentations/I-Learned-from-Failure">http://www.infoq.com/presentations/I-Learned-from-Failure</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelalho.com/robert-myers-evertything-ive-learned-i-learded-from-failure/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.miguelalho.com/robert-myers-evertything-ive-learned-i-learded-from-failure/</feedburner:origLink></item>
		<item>
		<title>Conferência SerFreelancer</title>
		<link>http://feedproxy.google.com/~r/MytymykysPhotographyBlog/~3/LBzJl_t7vWs/</link>
		<comments>http://www.miguelalho.com/conferencia-serfreelancer/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 19:24:01 +0000</pubDate>
		<dc:creator>Miguel Alho</dc:creator>
				<category><![CDATA[Notícias]]></category>
		<category><![CDATA[Aveiro]]></category>
		<category><![CDATA[conferencia]]></category>
		<category><![CDATA[freelancing]]></category>

		<guid isPermaLink="false">http://miguelalho.com/?p=1171</guid>
		<description><![CDATA[Dia 2 de Abril vou ter o prazer de participar como orador na &#8220;Conferência &#8211; Ser Freelancer em Portugal&#8221;, no IPJ de Aveiro. vai ser certamente um dia muito interessante em que vamos reunir freelancers de diversas áreas, especialmente quem está a começar, para falar dos vários aspectos inerentes ao trabalho como freelancer. Vou estar [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://freelancerportugal.com/wp-content/themes/jenzoo/images/logo.png" alt="" width="450px" /></p>
<p>Dia 2 de Abril vou ter o prazer de participar como orador na &#8220;Conferência &#8211; Ser Freelancer em Portugal&#8221;, no IPJ de Aveiro. vai ser certamente um dia muito interessante em que vamos reunir freelancers de diversas áreas, especialmente quem está a começar, para falar dos vários aspectos inerentes ao trabalho como freelancer.</p>
<p>Vou estar na conferência a representar área da programação web e desenvolvimento de software. Tem piada que vem numa altura em que preparo-me para dar o salto do freelancing para a estrutura de empresa. De qualquer forma, não deixarei de partilhar os diversos aspectos da minha experiência como tal. Há sempre muito para dizer, e muitas questões a responder. Até lá, tenho que recuperar a voz!</p>
<p>Espero ver muito pessoal por lá. Se houver tópicos que alguem gostaria que abordasse em especial, deixa um comment!</p>
<p>Mais info em <a href="http://freelancerportugal.com/">http://freelancerportugal.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelalho.com/conferencia-serfreelancer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.miguelalho.com/conferencia-serfreelancer/</feedburner:origLink></item>
		<item>
		<title>FATAL:  could not reattach to shared memory (key=…, addr=…): 487</title>
		<link>http://feedproxy.google.com/~r/MytymykysPhotographyBlog/~3/h8hZ23H5TpM/</link>
		<comments>http://www.miguelalho.com/fatal-could-not-reattach-to-shared-memory-key-addr-487/#comments</comments>
		<pubDate>Tue, 25 Jan 2011 10:07:55 +0000</pubDate>
		<dc:creator>Miguel Alho</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[base de dados]]></category>
		<category><![CDATA[PostresSQL]]></category>
		<category><![CDATA[Windows 2008 server]]></category>

		<guid isPermaLink="false">http://miguelalho.com/?p=1169</guid>
		<description><![CDATA[FATAL: could not reattach to shared memory (key=276, addr=01F20000): 487 Este é um erro que aparenta aparecer em algumas instalações PostgreSQL em Windows, em especial depois de existir algum update do OS. Uma instalação minha teve este problema, com o erro a ser registado periodicamente nos logs do PostgreSQL. Infelizmente o erro é problemático para [...]]]></description>
			<content:encoded><![CDATA[<p><code>FATAL:  could not reattach to shared memory (key=276, addr=01F20000): 487</code></p>
<p>Este é um erro que aparenta aparecer em algumas instalações PostgreSQL em Windows, em especial depois de existir algum update do OS. Uma instalação minha teve este problema, com o erro a ser registado periodicamente nos logs do PostgreSQL. Infelizmente o erro é problemático para aplicações dependentes da base de dados, uma vez que ele interrompe conecções entre a aplicação e a base de dados. É causador de um tipico erro de .NET com mensagem pouco esclarecedora:</p>
<p><code>[SocketException (0x2746): An existing connection was forcibly closed by the remote host]<br />
   System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) +232</code></p>
<p>Poderia ser de uma coneção externa, mas o pilha de chamadas tinha claramente a biblioteca NpgSQL &#8211; o <em>provider </em>PostgreSQL para .NET na lista. Não era uma conecção entre cliente e servidor, mas sim entre a aplicação e o serviço de base de dados (que é efectuado sobre TCP, mesmo estando na mesma máquina).</p>
<p>A solução é a actualização da instalação do serviço de base de dados &#8211; este caso passei do 8.4.0 para o 8.4.6. (a correcção deve ter sido introduzido no 8.4.1). Esta versão terá o <em>patch </em>para a correcção deste erro. A actualização é simples: para o serviço e correr o instalador mantendo os dados e configurações intactas (poderá ser necessário recolocar o serviço a arrancar pelo sistema utilizador LOCAL SYSTEM, se necessário).</p>
<p>Info sobre o erro ou patch:<br />
<a href="http://blog.hagander.net/index.php?url=archives/149-Help-us-test-a-patch-for-the-Win32-shared-memory-issue.html#feedback" target="_blank">http://blog.hagander.net/index.php?url=archives/149-Help-us-test-a-patch-for-the-Win32-shared-memory-issue.html#feedback</a><br />
<a href="http://www.postgresql.org/docs/8.4/static/release-8-4-1.html" target="_blank">http://www.postgresql.org/docs/8.4/static/release-8-4-1.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelalho.com/fatal-could-not-reattach-to-shared-memory-key-addr-487/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.miguelalho.com/fatal-could-not-reattach-to-shared-memory-key-addr-487/</feedburner:origLink></item>
		<item>
		<title>Recuperação de arranque em Windows Server 2008</title>
		<link>http://feedproxy.google.com/~r/MytymykysPhotographyBlog/~3/ZhNvc5Q5EIU/</link>
		<comments>http://www.miguelalho.com/recuperacao-de-sectores-de-boot-em-windows-server-2008/#comments</comments>
		<pubDate>Mon, 03 Jan 2011 10:32:05 +0000</pubDate>
		<dc:creator>Miguel Alho</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[boot]]></category>
		<category><![CDATA[bootrec]]></category>
		<category><![CDATA[diskpart]]></category>
		<category><![CDATA[recuperação]]></category>
		<category><![CDATA[Windows Server 2008]]></category>

		<guid isPermaLink="false">http://miguelalho.com/?p=1166</guid>
		<description><![CDATA[Pois. Este é um post que representa o meu dia de ano novo. A passagem foi excelente. O tarde após a passagem foi bastante assustador. Aproveitei a &#8220;paragem&#8221; para fazer uma limpeza ao meu servidor e introduzir uns discos novos. E assim se fez o caos! Passo a explicar&#8230; O meu servidor é relativamente simples [...]]]></description>
			<content:encoded><![CDATA[<p>Pois. Este é um post que representa o meu dia de ano novo. A passagem foi excelente. O tarde após a passagem foi bastante assustador. Aproveitei a &#8220;paragem&#8221; para fazer uma limpeza ao meu servidor e introduzir uns discos novos. E assim se fez o caos! Passo a explicar&#8230;</p>
<p>O meu servidor é relativamente simples e construído às necessidades. É um setup simples com dois discos de ITB em RAID 1 para sistema e repositórios de ficheiros importantes, e mais 3 discos de 640GB para &#8220;tralha&#8221;. Decidi fazer um upgrade, e acrescentar algum espaço &#8211; Ia juntar um disco de 640GB que estava na prateleira parada com uma das existentes num RAID 1 dedicado a backups, e acrescentar um disco de 1TB para mais tralha. Assim, ficaria com um total de 7 discos, representando cerca de 3TB de espaço, estando metade montado em RAID1. Uma unidade separada e dedicada a backups parece-me uma boa aposta, e quero implementar uma forma mais automatizada de os fazer, quer do servidor, da minha máquina e a dos meus colaboradores.</p>
<p>Portanto abri e limpei algum (pouco, felizmente) pó do servidor, e reorganizei a barra de discos que agora ficou completamente cheia. Introduzi o disco antigo que esteve parado (e que ainda tinha uma instalação de OS anterior do servidor, como backup), arranquei a máquina, criei um novo RAID e&#8230; O servidor entrou no OS antigo em vez da instalação actual. Arrancou pelo segundo disco em vez do primeiro. E assim o caos começou.</p>
<p>Obviamente não era isso que eu queria. Queria o arranque pelo mesmo OS que deveria estar intacto no DISCO 0. Infelizmente esta troca alterou o esquema de letras de unidades e o sector de arranque do disco principal., Não compreendi porque, infelizmente, mas tornou-se impossível arrancar pela partição de sistema do disco original, mesmo sendo a única unidade fisicamente ligada. Algo&#8230; assustador!</p>
<p>Para corrigir tive que arranjar algum método de corrigir, que não envolvê-se reinstalar. Felizmente encontrei alguns comandos que se podem executar para reconstruir o o sector e informação de arranque que passo a explicar. Há &#8220;ordem&#8221;, de certa forma, nos passos a executar q passo a descrever. Este foi o meu caso e raciocínio, mas obviamente pode mudar caso a caso.</p>
<p>O primeiro passo é introduzir e arrancar o servidor com o disco de instalação do Windows Server 2008. Ele tem ferramentas de recuperação, que podem ser executadas a partir da linha de comandos. Depois de arrancar, deve escolher a opção de reparação. Surge uma janela de escolha de unidade de sistema a recuperar. Infelizmente no meu caso, pelo menos inicialmente, não reconhecia nenhuma partição com uma instalação de sistema. De qualquer forma, escolhendo &#8220;NEXT&#8221;  permite chegar às opções seguintes e nas opções de ferramentas, escolhi a linha de comandos para abrir uma consola. Foi interessante verificar que, mesmo n conseguindo arrancar pelo OS, na consola, o windows ainda reconhecia a estrutura de partições e unidades presente no disco. Escolhendo a unidade C do sistema (>c:) executei o seguinte comando:</p>
<p><code>bootrec.exe /fixmbr</code></p>
<p>O comando repara o Master boot record. Em muitas situações este comando ou a combinação com o seguinte: </p>
<p><code>bootrec.exe /fixboot</code></p>
<p>Deveria ser suficiente para reparar o arranque. Infelizmente no meu caso não o foi, pois o  /fixboot respondeu com a mensagem de erro &#8220;Element Not Found&#8221;. Este erro significa, essencialmente, que a partição de sistema não está &#8220;activa&#8221;, e portanto deve ser activado, para o recuperador o encontrar. para tal, uso o DISKPART:</p>
<p><code><br />
>diskpart<br />
DISKPART>list disk<br />
...<br />
DISKPART>select disk 0<br />
...<br />
DISKPART>list partition<br />
...<br />
DISKPART>select partition 1<br />
...<br />
DISKPART>active<br />
DISKPART exit<br />
</code></p>
<p>Esta sequência demonstra alguns comandos do diskpart. os &#8220;list&#8221; listam os discos ou partições disponíveis no disco seleccionado. O &#8220;select&#8221; permite seleccionar e disco e partição desejada. &#8220;Active&#8221; activa a selecção. Depois de executar estes comandos, e com a partição activa, o bootrec.exe /fixboot executa correctamente e pode ser executado ainda o comando</p>
<p><code>bootrec.exe /rebuildbcd</code></p>
<p>Se tudo correr bem, deverá ser suficiente. Infelizmente, no meu caso, não o foi. Isto porque, no arranque, sugiu nova mensagem de erro, mas desta vez a indicar que o BOOTMGR estava em falta : &#8220;BOOTMGR IS MISSING&#8221;. Mais uma volta&#8230; desta vez foi suficiente executar o reparador de arranque no CD de instalação. Infelizmente, e ao contrario do Vista, esta opção não aparece na lista de ferramentas. Para aceder é necessário entrar na consola de comandos e executar:</p>
<p><code>X:\sources\recovery\StartRep.exe</code></p>
<p>Este foi o toque final necessário para ficar tudo OK. Pude finalmente concluir e ligar os restantes discos sem problemas dentro do servidor.</p>
<p>Refs:<br />
<a href="http://www.lancelhoff.com/how-to-fix-vista-mbr-repair-broken-vista/">http://www.lancelhoff.com/how-to-fix-vista-mbr-repair-broken-vista/</a><br />
<a href="http://www.pcstats.com/articleview.cfm?articleid=2264&#038;page=8">http://www.pcstats.com/articleview.cfm?articleid=2264&#038;page=8</a><br />
<a href="http://www.networksteve.com/forum/topic.php/VPN_created_using_modem_-_unable_to_modify/?TopicId=9937&#038;Posts=2">http://www.networksteve.com/forum/topic.php/VPN_created_using_modem_-_unable_to_modify/?TopicId=9937&#038;Posts=2</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelalho.com/recuperacao-de-sectores-de-boot-em-windows-server-2008/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.miguelalho.com/recuperacao-de-sectores-de-boot-em-windows-server-2008/</feedburner:origLink></item>
		<item>
		<title>Yaksha – Sociedade Violenta feat. Governo Sombra</title>
		<link>http://feedproxy.google.com/~r/MytymykysPhotographyBlog/~3/z-olK1lC0o0/</link>
		<comments>http://www.miguelalho.com/yaksha-sociedade-violenta-feat-governo-sombra/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 08:33:38 +0000</pubDate>
		<dc:creator>Miguel Alho</dc:creator>
				<category><![CDATA[Música]]></category>
		<category><![CDATA[Pessoal]]></category>
		<category><![CDATA[Gov Som]]></category>
		<category><![CDATA[Governo Sombra]]></category>
		<category><![CDATA[vídeos]]></category>
		<category><![CDATA[Yaksha]]></category>

		<guid isPermaLink="false">http://miguelalho.com/?p=1164</guid>
		<description><![CDATA[Foi lançado ontem à noite um novo vídeo do pessoal da Gov Som. Sociedade Violenta de Yaksha, com a participação de Governo Sombra foi filmado pela equipa de &#8220;La Casa Nostra&#8221;, e como habitual, participei com com assistência e iluminação. Acho que os planos com o bebé, em termos de luz, correram especialmente bem. Enjoy! [...]]]></description>
			<content:encoded><![CDATA[<p><object width="450" height="278"><param name="movie" value="http://www.youtube.com/v/HIeAltuwOx4?fs=1&amp;hl=pt_PT"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/HIeAltuwOx4?fs=1&amp;hl=pt_PT" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="450" height="278"></embed></object></p>
<p>Foi lançado ontem à noite um novo vídeo do pessoal da Gov Som. <strong>Sociedade Violenta</strong> de Yaksha, com a participação de Governo Sombra foi filmado pela equipa de &#8220;La Casa Nostra&#8221;, e como habitual, participei com com assistência e iluminação.  Acho que os planos com o bebé, em termos de luz, correram especialmente bem. Enjoy!</p>
<p>A faixa também está disponível para download em <a href="http://www.yousendit.com/download/WTNLRGx3T00zMW14dnc9PQ">http://www.yousendit.com/download/WTNLRGx3T00zMW14dnc9PQ</a>. Dia 23 sai o álbum, que, pelo que ouvi, está fortíssimo!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelalho.com/yaksha-sociedade-violenta-feat-governo-sombra/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.miguelalho.com/yaksha-sociedade-violenta-feat-governo-sombra/</feedburner:origLink></item>
		<item>
		<title>PostgreSQL 9.0 chegou</title>
		<link>http://feedproxy.google.com/~r/MytymykysPhotographyBlog/~3/w8Zd0L2fFx4/</link>
		<comments>http://www.miguelalho.com/postgresql-9-0-chegou/#comments</comments>
		<pubDate>Mon, 20 Sep 2010 13:25:05 +0000</pubDate>
		<dc:creator>Miguel Alho</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[base de dados]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://miguelalho.com/?p=1161</guid>
		<description><![CDATA[Foi oficialmente anunciado o lançamento da nova versão do PostgreSQL &#8211; a SGBD open source. Tenho usado a 8.3/8.4 muito nos últimos projectos e estou muito satisfeito com o desempenho, capacidade e funcionalidade da mesma. Esta nova versão anuncia algumas coisas novas e interessantes, como suporte para 64bits em Windows, Stored Procedures, triggers ao nível [...]]]></description>
			<content:encoded><![CDATA[<p>Foi oficialmente anunciado o lançamento da nova versão do PostgreSQL &#8211; a SGBD open source. Tenho usado a 8.3/8.4 muito nos últimos projectos e estou muito satisfeito com o desempenho, capacidade e funcionalidade da mesma. Esta nova versão anuncia algumas coisas novas e interessantes, como suporte para 64bits em Windows, Stored Procedures, triggers ao nível da coluna e condicional, e muito mais. Alista de novas features pode ser consultado no Wiki do PostgreSQL:</p>
<p><a href="http://wiki.postgresql.org/wiki/What's_new_in_PostgreSQL_9.0" target="_blank">http://wiki.postgresql.org/wiki/What&#8217;s_new_in_PostgreSQL_9.0</a></p>
<p>Mais:<br />
<a href="http://www.postgresql.org/about/press/presskit90" target="_blank">http://www.postgresql.org/about/press/presskit90</a><br />
<a href="http://www.postgresql.org/docs/9.0/static/release-9-0" target="_blank">http://www.postgresql.org/docs/9.0/static/release-9-0</a></p>
<p>Download:<br />
<a href="http://www.postgresql.org/download/" target="_blank">http://www.postgresql.org/download/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelalho.com/postgresql-9-0-chegou/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.miguelalho.com/postgresql-9-0-chegou/</feedburner:origLink></item>
		<item>
		<title>Vulnerabilidade de Segurança em Aplicações ASP.NET</title>
		<link>http://feedproxy.google.com/~r/MytymykysPhotographyBlog/~3/gGlYFjcTqQc/</link>
		<comments>http://www.miguelalho.com/vulnerabilidade-de-seguranca-em-aplicacoes-asp-net/#comments</comments>
		<pubDate>Sat, 18 Sep 2010 15:16:10 +0000</pubDate>
		<dc:creator>Miguel Alho</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[segurança]]></category>

		<guid isPermaLink="false">http://miguelalho.com/?p=1159</guid>
		<description><![CDATA[Foi anunciado ontem pela Microsoft uma vulnerabilidade no ASP.Net, associado a códigos de erro enviados pelo servidor para o cliente, e que poderiam servir para o utilizador aceder a ficheiros como o web.config. No blog do Scott Guthrie, ele refere como funciona a vulnerabilidade e como prevenir. Essencialmente, é necessário reeditar os ficheiros web.config, e [...]]]></description>
			<content:encoded><![CDATA[<p>Foi <a href="http://http://www.microsoft.com/technet/security/advisory/2416728.mspx" target="_blank">anunciado ontem pela Microsoft uma vulnerabilidade no ASP.Net</a>, associado a códigos de erro enviados pelo servidor para o cliente, e que poderiam servir para o utilizador aceder a ficheiros como o web.config.</p>
<p>No blog do Scott Guthrie, ele refere como funciona a vulnerabilidade e como prevenir. Essencialmente, é necessário reeditar os ficheiros web.config, e configurar de modo a ter os &#8220;custom errors&#8221; activos. Ele recomenda ainda ter apenas uma página de erro, e injectar algum código no Page_load dessa página:</p>
<pre lang="asp">
<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Import Namespace="System.Security.Cryptography" %>
<%@ Import Namespace="System.Threading" %>

<script runat="server">
   void Page_Load() {
      byte[] delay = new byte[1];
      RandomNumberGenerator prng = new RNGCryptoServiceProvider();

      prng.GetBytes(delay);
      Thread.Sleep((int)delay[0]);

      IDisposable disposable = prng as IDisposable;
      if (disposable != null) { disposable.Dispose(); }
    }
</script>

<html>
<head runat="server">

</head>
<body>
<div>
        An error occurred while processing your request.
    </div>

</body>
</html>
</pre>
<p>O detalhe completo em: <a href="http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx" target="_blank">http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.miguelalho.com/vulnerabilidade-de-seguranca-em-aplicacoes-asp-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.miguelalho.com/vulnerabilidade-de-seguranca-em-aplicacoes-asp-net/</feedburner:origLink></item>
	</channel>
</rss>
