<?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>TiagoFigueira.com</title>
	<atom:link href="http://tiagofigueira.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://tiagofigueira.com</link>
	<description>Web Developer &#38; SysAdmin</description>
	<lastBuildDate>Thu, 24 Jun 2010 01:36:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>The ‘Microsoft.Jet.OLEDB.4.0′ provider is not registered on the local machine.</title>
		<link>http://tiagofigueira.com/the-microsoft-jet-oledb-4-0-provider-is-not-registered-on-the-local-machine/484/</link>
		<comments>http://tiagofigueira.com/the-microsoft-jet-oledb-4-0-provider-is-not-registered-on-the-local-machine/484/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 16:45:58 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[asp.net]]></category>
		<category><![CDATA[Jet 64 bits]]></category>
		<category><![CDATA[microsoft jet]]></category>
		<category><![CDATA[The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine]]></category>
		<category><![CDATA[Windows 7 64 bits]]></category>

		<guid isPermaLink="false">http://tiagofigueira.com/?p=484</guid>
		<description><![CDATA[Estava aqui de volta da importação de dados através de ficheiros excel e deparei-me com este erro: Este erro é provocado pelo facto de não existir uma versão do JET para sistemas 64 bits e eu estar a correr o Windows 7 64 bits. A solução, consoante o tipo de aplicações que estamos a desenvolver (winforms, [...]]]></description>
			<content:encoded><![CDATA[<p>Estava aqui de volta da importação de dados através de ficheiros excel e deparei-me com este erro:</p>
<p><a href="http://tiagofigueira.com/wp-content/uploads/2010/06/erro-Microsoft.Jet_.OLEDB_.4.0.jpg"  class="lightview"><img class="size-full wp-image-488 alignnone" title="erro-Microsoft.Jet.OLEDB.4.0" src="http://tiagofigueira.com/wp-content/uploads/2010/06/erro-Microsoft.Jet_.OLEDB_.4.0.jpg" alt="" width="656" height="106" /></a></p>
<p>Este erro é provocado pelo facto de não existir uma versão do JET para sistemas 64 bits e eu estar a correr o Windows 7 64 bits.</p>
<p>A solução, consoante o tipo de aplicações que estamos a desenvolver (winforms, web) é:</p>
<ul>
<li>compilar o projecto para ambientes x86, ou</li>
<li>Permitir que o IIS (Application Pool) corra aplicações em modo 32 bits (solução para o meu caso).</li>
</ul>
<p>Como é que se configura a application pool? Fácil:</p>
<p>&gt; Abrir o <strong>IIS </strong>&gt; de seguida, Navegar até às &#8220;<strong>Applications Pools</strong>&#8221;</p>
<p><a href="http://tiagofigueira.com/wp-content/uploads/2010/06/pools.jpg"  class="lightview"><img class="size-medium wp-image-489 alignnone" title="pools" src="http://tiagofigueira.com/wp-content/uploads/2010/06/pools-300x269.jpg" alt="" width="300" height="269" /></a></p>
<p>&gt; Clicar com o botão direito do rato em cima da application pool responsável por correr a aplicação em que estamos a trabalhar e escolher a opção &#8220;<strong>Advanced Set</strong><strong>tings</strong>&#8220;.</p>
<p><a href="http://tiagofigueira.com/wp-content/uploads/2010/06/pools-advsettings.jpg"  class="lightview"><img class="size-medium wp-image-490 alignnone" title="pools-advsettings" src="http://tiagofigueira.com/wp-content/uploads/2010/06/pools-advsettings-245x300.jpg" alt="" width="245" height="300" /></a></p>
<p>Por fim, colocar o &#8220;<strong>Enable 32-Bit Applications</strong>&#8221; a &#8220;<strong>True</strong>&#8220;.</p>
<p>Problema resolvido <img src='http://tiagofigueira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://tiagofigueira.com/the-microsoft-jet-oledb-4-0-provider-is-not-registered-on-the-local-machine/484/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalar o MOSS 2007 no Windows Server 2008 R2</title>
		<link>http://tiagofigueira.com/instalar-o-moss-2007-no-windows-server-2008-r2/465/</link>
		<comments>http://tiagofigueira.com/instalar-o-moss-2007-no-windows-server-2008-r2/465/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 10:58:42 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[moss]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[windows server 2008 R2]]></category>

		<guid isPermaLink="false">http://tiagofigueira.com/?p=465</guid>
		<description><![CDATA[Se já experimentaram instalar o MOSS 2007 (Microsoft Office Sharepoint Server 2007) no Windows Server 2008 R2, deparam-se com o seguinte erro: Este erro deve-se ao facto da versão original do Office SharePoint Server 2007 e do Office SharePoint Server 2007 Service Pack 1 (SP1) não serem suportados no Windows Server 2008 R2.  Ver KB [...]]]></description>
			<content:encoded><![CDATA[<p>Se já experimentaram instalar o MOSS 2007 (Microsoft Office Sharepoint Server 2007) no Windows Server 2008 R2, deparam-se com o seguinte erro:</p>
<p><a href="http://tiagofigueira.com/wp-content/uploads/2010/02/erro-instalacao-moss07.gif"  class="lightview"><img class="aligncenter size-full wp-image-466" title="erro-instalacao-moss07" src="http://tiagofigueira.com/wp-content/uploads/2010/02/erro-instalacao-moss07.gif" alt="" width="565" height="271" /></a></p>
<p>Este erro deve-se ao facto da versão original do Office SharePoint Server 2007 e do Office SharePoint Server 2007 Service Pack 1 (SP1) não serem suportados no Windows Server 2008 R2.  Ver KB 962935 (<a href="http://support.microsoft.com/default.aspx?scid=kb;pt-PT;962935">http://support.microsoft.com/default.aspx?scid=kb;pt-PT;962935</a>)</p>
<p><strong>Solução: </strong><span style="text-decoration: underline;">Criar um pacote de instalação “personalizado”, isto é, já com o SP2 do WSS 3.0 e com o SP2 do MOSS 07</span></p>
<p>Para isso temos que efectuar os seguintes passos:</p>
<ol>
<li>Copiar a instalação Original do MOSS para uma nova pasta.<br />
Exemplo: <em>D:\moss-custom\</em></li>
<li>Apagar todo o conteúdo da pasta Updates.</li>
<li>Efectuar o Download do Windows SharePoint Services 3.0 Service Pack 2 (SP2)<br />
<a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=79bada82-c13f-44c1-bdc1-d0447337051b"> http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=79bada82-c13f-44c1-bdc1-d0447337051b</a></li>
<li>Efectuar o Download do SP2 para o MOSS 2007<br />
<a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=b7816d90-5fc6-4347-89b0-a80deb27a082">http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=b7816d90-5fc6-4347-89b0-a80deb27a082</a></li>
<li>Abrir uma linha de comandos e navegar até à directoria para onde fizemos o download dos ficheiros no ponto anterior.</li>
<li>Correr os seguintes comandos:
<pre class="brush: powershell;">
wssv3sp2-kb953338-x64-fullfile-en-us.exe /extract:D:\MOSS-Custom\updates\ /quiet
</pre>
<pre class="brush: powershell;">
officeserver2007sp2-kb953334-x64-fullfile-en-us.exe /extract:D:\MOSS-Custom\updates\ /quiet
</pre>
</li>
<li> Apagar o ficheiro <strong>wsssetup.dll</strong> que se encontra na directoria dos updates.<br />
Neste exemplo, o ficheiro encontra-se no directorio <em> D:\MOSS-Custom\Updates\</em><br />
<strong><em>Nota: </em></strong>Este passo é importantíssimo. Não se esqueça dele!</li>
<li>Fim!Já podemos instalar (executar o setup na directoria d:\moss-custom\) o MOSS 2007 no Windows Server 2008 R2.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://tiagofigueira.com/instalar-o-moss-2007-no-windows-server-2008-r2/465/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>IsNull em VB.NET</title>
		<link>http://tiagofigueira.com/isnull-em-vb-net/435/</link>
		<comments>http://tiagofigueira.com/isnull-em-vb-net/435/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 23:27:32 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[asp.net]]></category>
		<category><![CDATA[VB.NET IsNull]]></category>

		<guid isPermaLink="false">http://tiagofigueira.com/?p=435</guid>
		<description><![CDATA[Estava aqui de volta de um site feito em ASP.NET (VB.NET) e estava-me a fazer falta o IsNull do C#. Solução? Utilizar o &#8220;Is Nothing&#8221; Exemplo: If (Not Request.QueryString(&#34;accao&#34;) Is Nothing) Then Response.Write(&#34; A variavel 'accao' = &#34; &#38; Request.QueryString(&#34;accao&#34;)) End If]]></description>
			<content:encoded><![CDATA[<p>Estava aqui de volta de um site feito em ASP.NET (VB.NET) e estava-me a fazer falta o <strong>IsNull </strong>do C#.<br />
Solução? Utilizar o &#8220;<strong>Is Nothing</strong>&#8221; <img src='http://tiagofigueira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Exemplo:</p>
<pre class="brush: vb;">
If (Not Request.QueryString(&quot;accao&quot;) Is Nothing) Then
   Response.Write(&quot; A variavel 'accao' = &quot; &amp; Request.QueryString(&quot;accao&quot;))
End If
</pre>
]]></content:encoded>
			<wfw:commentRss>http://tiagofigueira.com/isnull-em-vb-net/435/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Data de instalação do sistema operativo (windows based)</title>
		<link>http://tiagofigueira.com/data-de-instalacao-do-sistema-operativo-windows-based/427/</link>
		<comments>http://tiagofigueira.com/data-de-instalacao-do-sistema-operativo-windows-based/427/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 23:50:20 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[systeminfo]]></category>

		<guid isPermaLink="false">http://tiagofigueira.com/data-de-instalacao-do-sistema-operativo-windows-based/427/</guid>
		<description><![CDATA[Hoje precisei de saber quando é que tinha instalado uma máquina. Para isso, basta abrir uma linha de comandos, escrever&#8221;systeminfo&#8221; e carregar no enter . Este comando permite também obter  informações de configuração do sistema operativo da máquina local ou de uma máquina remota, incluindo service packs e hotfix(s). Para obter ajuda sobre este comando [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje precisei de saber quando é que tinha instalado uma máquina.</p>
<p>Para isso, basta abrir uma <strong>linha de comandos</strong>, escrever&#8221;<strong>systeminfo</strong>&#8221; e carregar no enter <img src='http://tiagofigueira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><img class="alignnone size-full wp-image-429" title="systeminfo" src="http://tiagofigueira.com/wp-content/uploads/2009/11/systeminfo1.jpg" alt="systeminfo" width="669" height="258" /></p>
<p>Este comando permite também obter  informações de configuração do sistema operativo da máquina local ou de uma máquina remota, incluindo service packs e hotfix(s).</p>
<p>Para obter ajuda sobre este comando escreva &#8220;systeminfo /?&#8221;.</p>
<p>Exemplos:</p>
<p>SYSTEMINFO<br />
SYSTEMINFO /?<br />
SYSTEMINFO /S sistema<br />
SYSTEMINFO /S sistema /U utilizador<br />
SYSTEMINFO /S sistema /U domínio\utilizador /P palavra-passe /FO TABLE<br />
SYSTEMINFO /S sistema /FO LIST<br />
SYSTEMINFO /S sistema /FO CSV /NH</p>
]]></content:encoded>
			<wfw:commentRss>http://tiagofigueira.com/data-de-instalacao-do-sistema-operativo-windows-based/427/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problemas com ligação de rede ao mudar Máquina virtual (vmware) ubuntu de servidor</title>
		<link>http://tiagofigueira.com/problemas-com-ligacao-de-rede-ao-mudar-maquina-virtual-vmware-ubuntu-de-servidor/409/</link>
		<comments>http://tiagofigueira.com/problemas-com-ligacao-de-rede-ao-mudar-maquina-virtual-vmware-ubuntu-de-servidor/409/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 20:48:32 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://tiagofigueira.com/?p=409</guid>
		<description><![CDATA[Noutro dia ao migrar uma máquina virtual Ubuntu para um novo servidor virtual (VMware ESXi) deparei-me um um pequeno streess. A máquina virtual tinha ficado sem rede Este problema foi causado pela mudança do Mac Address (endereço físico) da placa de rede. Para resolver isto basta consultar o novo Mac Address (xx:xx:xx:xx:xx) da placa de [...]]]></description>
			<content:encoded><![CDATA[<p>Noutro dia ao migrar uma máquina virtual  Ubuntu para um novo servidor virtual (VMware ESXi) deparei-me um um pequeno streess. A máquina virtual tinha ficado sem rede <img src='http://tiagofigueira.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Este problema foi causado pela mudança do Mac Address (endereço físico) da placa de rede.</p>
<p>Para resolver isto basta consultar o novo Mac Address (xx:xx:xx:xx:xx) da placa de rede:</p>
<pre class="brush: bash;">
$ifconfig -a
</pre>
<p>e alterar o ficheiro <strong>iftab.</strong></p>
<pre class="brush: bash;">
$cd /etc/
$sudo vim iftab
</pre>
<p>e já está.<br />
Quando muito é necessário reiniciar os serviços de rede</p>
<pre class="brush: bash;">
$sudo /etc/init.d/networking restart
</pre>
<p>Outra solução é executar este script:</p>
<pre class="brush: bash;">
mac=`ifconfig -a | grep &quot;HWaddr&quot; | cut -d &quot; &quot; -f 11`
echo &quot;eth0 mac $mac arp 1&quot; &gt; /etc/iftab
</pre>
<p>fonte: <a href="http://communities.vmware.com/thread/46069" target="_blank">http://communities.vmware.com/thread/46069</a></p>
<p>Update:</p>
<p>Outra opção (à &#8220;trapalhão&#8221; ), e que também resolve o problema é renomear a placa de rede .</p>
<p>Se for eth0, passar para eth1 ou outro qualquer <img src='http://tiagofigueira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://tiagofigueira.com/problemas-com-ligacao-de-rede-ao-mudar-maquina-virtual-vmware-ubuntu-de-servidor/409/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Oracle: Duplicar base de dados</title>
		<link>http://tiagofigueira.com/oracle-duplicar-base-de-dados/380/</link>
		<comments>http://tiagofigueira.com/oracle-duplicar-base-de-dados/380/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 20:12:29 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[base de dados]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://tiagofigueira.com/?p=380</guid>
		<description><![CDATA[Seja por precisarmos de mudar de servidor, ou por querermos ter uma réplica da base de dados de produção para testes, o certo é que, às vezes temos necessidade de copiar/duplicar uma base de dados oracle. Como fazer? 1.º passo: Para mim o mais importante é garantir que antes de fazer o que quer que [...]]]></description>
			<content:encoded><![CDATA[<p>Seja por precisarmos de mudar de servidor, ou por querermos ter uma réplica da base de dados de produção para testes, o certo é que, às vezes temos necessidade de copiar/duplicar uma base de dados oracle.</p>
<p>Como fazer?</p>
<p><strong>1.º passo:</strong><br />
Para mim o mais importante é garantir que antes de fazer o que quer que seja têm uma cópia de segurança actualizada da base de dados que querem copiar/clonar.</p>
<p><strong>2.º passo:</strong><br />
Efectuar o login, na base de dados que queremos copiar, como SYSDBA utilizando o SQL+ e correr o seguinte comando:</p>
<pre class="brush: sql;">alter d_atabase backup controlfile to trace;</pre>
<p>Este comando vai criar um ficheiro com os comandos necessários para criar a base de dados.<br />
Se não souber qual é a directoria onde são guardados os ficheiros, pode abrir o ficheiro <strong>init.ora</strong> e ver o parametro: <strong>user_dump_dest</strong></p>
<p>O ficheiro gerado será semelhante a:</p>
<pre class="brush: sql;">
...
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE &quot;BD_PRODUCAO&quot; NORESETLOGS
NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 2
MAXDATAFILES 240
MAXINSTANCES 1
MAXLOGHISTORY 113
LOGFILE
GROUP 1 'D:\ORACLE\ORADATA\BD_PRODUCAO\REDO01.LOG'  SIZE 10M,
GROUP 2 'D:\ORACLE\ORADATA\BD_PRODUCAO\REDO02.LOG'  SIZE 10M,
-- STANDBY LOGFILE
DATAFILE
'D:\ORACLE\ORADATA\BD_PRODUCAO\SYSTEM01.DBF',
'D:\ORACLE\ORADATA\BD_PRODUCAO\MYDATABSE.DBF'
;
# Recovery is required if any of the datafiles are restored
# backups, or if the last shutdown was not normal or immediate.
RECOVER D_ATABASE
# Database can now be opened normally.
ALTER D_ATABASE OPEN;
</pre>
<p><strong>3.º passo:</strong></p>
<p>Fazer o shutdown da base de dados em produção</p>
<pre class="brush: sql;">shutdown immediate</pre>
<p><strong>4.º passo:</strong><br />
Copiar os ficheiros da base de dados de produção para a nova localização.</p>
<p><strong>5.º passo:</strong><br />
Alterar o control file (ficheiro criado no 2.º passo).</p>
<p>As alterações a efectuar são:</p>
<ol>
<li>Remover todo o conteúdo do ficheiro até à linha onde está escrito &#8220;STARTUP NO MOUNT&#8221;;</li>
<li>Onde está:  CREATE CONTROLFILE <span style="color: #ff0000;">REUSE DATABASE &#8220;BD_PRODUCAO&#8221; NORESETLOGS</span><br />
Deve passar a estar:  CREATE CONTROLFILE <span style="color: #008000;">SET DATABASE &#8220;BD_REPLICA&#8221; RESETLOGS</span></li>
<li><span style="color: #008000;"><span style="color: #000000;">Remover os comandos<span style="color: #ff0000;"> recover d_atabase</span> e <span style="color: #ff0000;">alter d_atabase open</span>;</span></span>
<pre class="brush: sql;">
# Recovery is required if any of the datafiles are restored
# backups, or if the last shutdown was not normal or immediate.
RECOVER D_ATABASE
# Database can now be opened normally.
ALTER D_ATABASE OPEN;
</pre>
</li>
<li>Corrigir os caminhos para os novos ficheiros de dados.<br />
Neste caso vamos partir do principio que apenas estamos a criar uma réplica da BD e não a muda-la de servidor.<br />
Onde está: <span style="color: #ff0000;">D:\ORACLE\ORADATA\BD_PRODUCAO\</span><br />
Deve estar: <span style="color: #008000;">D:\ORACLE\ORADATA\BD_REPLICA\<br />
<span style="color: #000000;">Devem fazer o mesmo para os LOG FILES;</span></span></li>
<li><span style="color: #008000;"><span style="color: #000000;">Guardar as alterações criadas com o nome &#8220;<strong>novadb_create_controlfile</strong>&#8220;</span></span></li>
</ol>
<p><strong>6.º passo:</strong><br />
Criar um novo ficheiro INIT.ORA para a nova base de dados.<br />
Para isso o mais simples é copiar o ficheiro da base e dados em produção para um novo.<br />
Exemplo: copiar o &#8220;<strong>initBD_PRODUCAO.ora</strong>&#8221; para &#8220;<strong>initBD_REPLICA.ora</strong>&#8221;<br />
Devem ter em atenção que é necessário alterar o conteúdo do novo ficheiro(initBD_REPLICA.ora), nomeadamente os parametros:</p>
<pre class="brush: sql;">
* audit_file_dest
* background_dump_dest
* control_files
* core_dump_dest
* log_archive_dest
* user_dump_dest
</pre>
<p>convém verificar se existe mais algum parâmetro que faça referência à base de dados antiga.</p>
<p><strong>7.º passo:</strong><br />
Copiar o ficheiro de passwords (<strong>orapwd</strong>) para a nova localização.</p>
<p><strong>8.º passo:</strong><br />
Iniciar a nova base de dados:</p>
<pre class="brush: sql;">@novadb_create_controlfile</pre>
<p><strong>9.º passo:</strong><br />
Colocar a nova base de dados em modo ArchiveLog:</p>
<p>FIM!</p>
<p>PS: não se esqueçam de meter a base de dados produção em cima!</p>
]]></content:encoded>
			<wfw:commentRss>http://tiagofigueira.com/oracle-duplicar-base-de-dados/380/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gestão de Passwords (KeePass)</title>
		<link>http://tiagofigueira.com/gestao-de-passwords-keepass/377/</link>
		<comments>http://tiagofigueira.com/gestao-de-passwords-keepass/377/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 15:23:42 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[gestão de passwords]]></category>
		<category><![CDATA[password manager]]></category>

		<guid isPermaLink="false">http://tiagofigueira.com/?p=377</guid>
		<description><![CDATA[Um post rápido sobre um software (KeePass) para gestão de password&#8217;s, que utilizo à algum tempo, e que sem dúvida veio facilitar e muito a minha vida. Além de seguro é muito fácil de utilizar. O donwload pode ser efectuado aqui: http://keepass.info/download.html]]></description>
			<content:encoded><![CDATA[<p>Um post rápido sobre um software (<a href="http://keepass.info/" target="_blank">KeePass</a>) para gestão de password&#8217;s, que utilizo à algum tempo, e que sem dúvida veio facilitar e muito a minha vida.</p>
<div class="wp-caption alignnone" style="width: 625px"><img title="KeepPass ScreenShot" src="http://keepass.info/screenshots/keepass_2x/main_big.png" alt="Aspecto gráfico do KeePass" width="615" height="470" /><p class="wp-caption-text">Aspecto gráfico do KeePass</p></div>
<p>Além de seguro é muito fácil de utilizar.</p>
<p>O donwload pode ser efectuado aqui: <a href="http://keepass.info/download.html" target="_blank">http://keepass.info/download.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tiagofigueira.com/gestao-de-passwords-keepass/377/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erro ao abrir o Outlook 2007 (Não é possivel abrir a janela do outlook)</title>
		<link>http://tiagofigueira.com/erro-ao-abrir-o-outlook-2007-nao-e-possivel-abrir-a-janela/373/</link>
		<comments>http://tiagofigueira.com/erro-ao-abrir-o-outlook-2007-nao-e-possivel-abrir-a-janela/373/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 09:12:21 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[outlook 2007]]></category>
		<category><![CDATA[resetnavpane]]></category>

		<guid isPermaLink="false">http://tiagofigueira.com/?p=373</guid>
		<description><![CDATA[Hoje depois de um reboot ao PC não estava a conseguir abri o Outlook. Após alguma pesquisa e debug, lá encontrei a solução: &#8220;Limpar e gerar novamente o painel de navegação do perfil actual.&#8221; Para isso basta ir ao &#8220;Menu Iniciar&#8221;, escolher a opção &#8220;Executar&#8221; e escrever o comando: &#8220;outlook /resetnavpane&#8220;. Outros comandos que podem [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje depois de um reboot ao PC não estava a conseguir abri o Outlook.</p>
<p>Após alguma pesquisa e debug, lá encontrei a solução:<br />
<strong>&#8220;Limpar e gerar novamente o painel de navegação do perfil actual.</strong>&#8221;</p>
<p>Para isso basta ir ao &#8220;Menu Iniciar&#8221;, escolher a opção &#8220;Executar&#8221; e escrever o comando:<br />
&#8220;<strong>outlook /resetnavpane</strong>&#8220;.</p>
<p>Outros comandos que podem ser úteis para o Outlook:</p>
<p><a href="http://office.microsoft.com/pt-pt/outlook/HP010031102070.aspx" target="_blank">http://office.microsoft.com/pt-pt/outlook/HP010031102070.aspx</a><br />
<em> </em></p>
<p><em>UPDATE:</em><br />
Para quem  não consegue executar o comando através do</p>
<p>Menu Iniciar -&gt; Executar, faça o seguinte:</p>
<p>Abra uma linha de comandos (Iniciar &gt; Executar &gt; escrever &#8220;cmd&#8221; &gt; carregar no enter):</p>
<p>Navegue até à directoria onde está instalado o Microsoft Outlook</p>
<p>Exemplo:</p>
<p><strong> CD &#8220;c:\Program Files (x86)\Microsoft Office\Office12&#8243;</strong></p>
<p>Escrever o comando:</p>
<p><strong>OUTLOOK.EXE /resetnavpane</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://tiagofigueira.com/erro-ao-abrir-o-outlook-2007-nao-e-possivel-abrir-a-janela/373/feed/</wfw:commentRss>
		<slash:comments>146</slash:comments>
		</item>
		<item>
		<title>GroundWork: Erro no ficheiro PHPTAL.php</title>
		<link>http://tiagofigueira.com/groundwork-erro-no-ficheiro-phptal-php-linha-265/365/</link>
		<comments>http://tiagofigueira.com/groundwork-erro-no-ficheiro-phptal-php-linha-265/365/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 15:46:23 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[network]]></category>
		<category><![CDATA[groundwork]]></category>
		<category><![CDATA[network monitoring tools]]></category>
		<category><![CDATA[phptal]]></category>

		<guid isPermaLink="false">http://tiagofigueira.com/?p=365</guid>
		<description><![CDATA[Hoje aconteceu-me um erro estúpido no GroundWork: Warning: PHPTAL::require_once(/tmp/&#8230;&#8230;&#8230;php) [phptal.require-once]: failed to open stream: No such file or directory in /&#8230;../guava/htdocs/guava/lib/PHPTAL/PHPTAL.php on line 265 Fatal error: PHPTAL::require_once() [function.require]: Failed opening required &#8216;/tmp/tpl_1_0_1152692ea3c1dbf45f6582b0a1c4f80394.php&#8217; (include_path=&#8217;.:/&#8230;&#8230;/groundwork/core/foundation/api/php:/&#8230;&#8230;/groundwork/php/lib/php&#8217;) in /&#8230;../groundwork/core/guava/htdocs/guava/lib/PHPTAL/PHPTAL.php on line 265 Porque é que eu chamo erro estúpido? Porque a solução é limpar a cache (session cookies) do [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje aconteceu-me um erro estúpido no <a title="Software para monitorização de Redes / Serviços de Rede" href="http://www.groundworkopensource.com/products/" target="_blank">GroundWork</a>:</p>
<blockquote><p><strong>Warning: PHPTAL::require_once</strong>(/tmp/&#8230;&#8230;&#8230;php) [phptal.require-once]: <strong>failed to open stream</strong>: No such file or directory in /&#8230;../guava/htdocs/guava/lib/PHPTAL/<strong>PHPTAL.php on line 265</strong></p>
<p><strong>Fatal error: PHPTAL::require_once() [function.require]: Failed opening required </strong>&#8216;/tmp/tpl_1_0_1152692ea3c1dbf45f6582b0a1c4f80394.php&#8217; (include_path=&#8217;.:/&#8230;&#8230;/groundwork/core/foundation/api/php:/&#8230;&#8230;/groundwork/php/lib/php&#8217;) in /&#8230;../groundwork/core/guava/htdocs/guava/lib/PHPTAL/<strong>PHPTAL.php on line 265</strong></p></blockquote>
<p><strong>Porque é que eu chamo erro estúpido?</strong></p>
<p>Porque a solução é limpar a cache (session cookies) do browser e fazer o refresh à página!</p>
<p>Enfim&#8230;</p>
<p>Ao menos é de fácil solução <img src='http://tiagofigueira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://tiagofigueira.com/groundwork-erro-no-ficheiro-phptal-php-linha-265/365/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Injection: segurança de aplicações Web</title>
		<link>http://tiagofigueira.com/sql-injection-seguranca-de-aplicacoes-web/262/</link>
		<comments>http://tiagofigueira.com/sql-injection-seguranca-de-aplicacoes-web/262/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 11:29:17 +0000</pubDate>
		<dc:creator>tiago</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[segurança aplicações web]]></category>
		<category><![CDATA[sql injection]]></category>

		<guid isPermaLink="false">http://tiagofigueira.com/?p=262</guid>
		<description><![CDATA[Na semana passada ao navegar por um site, lembrei-me de fazer um pequeno teste à segurança do mesmo e para minha surpresa, ou não, o site era vulnerável a ataques do tipo sql injection. Depois de ter enviado um e-mail aos responsáveis do site a avisar e de eles terem corrigido o problema, lembrei-me de [...]]]></description>
			<content:encoded><![CDATA[<p>Na semana passada ao navegar por um site, lembrei-me de fazer um pequeno teste à segurança do mesmo e para minha surpresa, ou não, o site era vulnerável a <a title="Wikipedia - SQL Injection" href="http://en.wikipedia.org/wiki/SQL_injection" target="_blank">ataques do tipo sql injection</a>.</p>
<p>Depois de ter enviado um e-mail aos responsáveis do site a avisar e de eles terem corrigido o problema, lembrei-me de falar um pouco sobre este tema.</p>
<h5>O que é que são ataques do tipo SQL Injection?</h5>
<blockquote><p>Basicamente são ataques que exploram o facto as instruções SQL serem criadas dinamicamente com os valores dos inputs (formulários / querystring), sem que estes sejam devidamente tratados. Estes ataques tornam possível executar código sql, tal como U_PDATE, I_NSERT, D_ROP, etc., e até executar programas no servidor web!</p></blockquote>
<h5>Mas como é que funciona?</h5>
<p>Vou tentar mostrar como é que o SQL Injection funciona através  de um exemplo muito simples.</p>
<p>Para isso vou criar uma página de autenticação de utilizadores feita em PHP e MySQL.<br />
Resumidamente vou ter:</p>
<ul>
<li>uma base de dados MySQL com uma <a href="#MySQLTable">tabela &#8220;utilizadores&#8221;</a>;</li>
<li>um ficheiro em php (<a title="Código PHP" href="#codigoPHP">login.php</a>) onde vou ter o formulário HTML e o código PHP para validar os utilizadores na base de dados.</li>
</ul>
<p>O aspecto da página <a href="#codigoPHP">login.php</a> será qualquer coisa deste género:</p>
<div id="attachment_331" class="wp-caption alignnone" style="width: 310px"><img class="size-medium wp-image-331 " title="sqlInjection-login-vazio" src="http://tiagofigueira.com/wp-content/uploads/2009/08/sqlInjection-login-vazio-300x83.jpg" alt="sqlInjection-login-vazio" width="300" height="83" /><p class="wp-caption-text">Formulário de Login (login.php)</p></div>
<p><em><strong>Passando à parte prática<br />
</strong></em></p>
<p>Neste exemplo,  a construção da instrução SQL é feita de forma dinâmica, utilizando os valores dos formulários sem qualquer tipo de validação.<br />
Temos então que:</p>
<pre class="brush: php;">
$sql=&quot;S_ELECT id F_ROM utilizadores WHERE login='&quot;.$_POST[&quot;utilizador&quot;].&quot;' and password='&quot;.$_POST[&quot;password&quot;].&quot;'&quot;;
</pre>
<p>Se no formulário introduzirmos os dados:  &#8220;<strong>admin</strong>&#8221; e &#8220;<strong>1234</strong>&#8220;, a nossa instrução sql vai ficar:</p>
<pre class="brush: sql;">
S_ELECT id F_ROM utilizadores WHERE login='admin' and password='1234'
</pre>
<p>Aparentemente até aqui não existe qualquer problema. Só se adivinharmos o utilizador e a password é que vamos conseguir efectuar o login com sucesso.</p>
<p>O problema começa quando começamos a utilizar caracteres especiais do sql (que podem variar consoante a base de dados) nos inputs.<br />
Por exemplo: vamos ver o que acontece se introduzirmos  no utilizador o seguinte texto:</p>
<pre class="brush: plain;"> xpto' or 1=1#</pre>
<p>O SQL resultante seria:</p>
<pre class="brush: sql;">
S_ELECT id F_ROM utilizadores WHERE login='xpto' or 1=1#' and password='1234'
</pre>
<p>Neste caso estou a utilizar dois caracteres especiais. a pelica &#8220;  <strong>&#8216;</strong> &#8221; e o cardinal &#8220;  <strong>#</strong> &#8220;.<br />
O 1.º serve para delimitarmos campos do tipo &#8220;texto&#8221;.<br />
O 2.º serve para fazer comentários.</p>
<p>Assim sendo, como carácter <strong>#</strong> é um carácter especial ( carácter p/ comentários), tudo o que vier depois do # vai ser ignorado pelo motor da BD. Ficamos então com:</p>
<pre class="brush: sql;">
S_ELECT id F_ROM utilizadores WHERE login='xpto' or 1=1#
</pre>
<p>Se analisarmos o sql vemos que além de termos ignorado todo o código sql que vier depois do #, estamos também a inserir a condição &#8220;<strong> OR 1=1 </strong>&#8220;. Como esta condição é sempre verdade (1=1), o resultado da pesquisa vai devolver sempre pelo menos um id (a não ser que a tabela utilizadores esteja vazia).<br />
Isto é, apesar de até poder não existir nenhum utilizador com o login=xpto, 1 é sempre igual a 1 <img src='http://tiagofigueira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Outro código que podem experimentar é:</p>
<pre class="brush: plain;"> xpto' or 1=1 limit 1#</pre>
<p><em><strong>Porquê o &#8220;limit 1&#8243;?</strong></em><br />
porque desta forma limitamos o n.º de resultados a 1.</p>
<p><em><strong>Então mas porque é que isso é importante?</strong></em><br />
Pode ser ou não. Depende da forma como o programador está a validar o resultado da query à base de dados.<br />
Se o programador tivesse feito qualquer coisa deste género:</p>
<pre class="brush: php;">

// ligação à base de dados
 mysql_connect(&quot;localhost&quot;, &quot;root&quot;, &quot;******&quot;)or die(&quot;cannot connect&quot;);
 mysql_select_db(&quot;junkDB&quot;)or die(&quot;cannot select DB&quot;);
 // construção da instrução sql
 $sql=&quot;S_ELECT * F_ROM utilizadores WHERE login='&quot;.$_POST[&quot;utilizador&quot;].&quot;' and password='&quot;.$_POST[&quot;password&quot;].&quot;'&quot;;
 // execução da instrução sql
 $result=mysql_query($sql);
 // variável que diz o n.º de resultados obtidos
 $count=mysql_num_rows($result);

 // se o n.º de resultados for igual a 1, então é porque os dados introduzidos
 // no formulário são válidos. Isto é, existe um utilizador com o login e password
 // iguais aos introduzidos no formulário
 if($count==1) {
    echo &quot;Dados correctos!&quot;;
 }
 else{
    echo &quot;Dados incorrectos!&quot;;
 }
</pre>
<p>com o código:</p>
<pre class="brush: plain;"> xpto' or 1=1#</pre>
<p>Só iríamos conseguir &#8220;entrar&#8221; caso existisse apenas 1 registo na tabela utilizadores.<br />
Bastava a tabela ter dois utilizadores para já não conseguirmos &#8220;entrar&#8221;.<br />
Ao utilizarmos o &#8220;limit 1&#8243; estamos a dizer que só queremos 1 registo. Logo a condição ($count==1) vai ser sempre verdadeira.</p>
<h5>Código Necessário para simular este exemplo:</h5>
<p><a name="MySQLTable">Criar a tabela &#8220;utilizadores&#8221;:</a></p>
<pre class="brush: sql;">
--
-- Table structure for table `utilizadores`
--
C_REATE TABLE IF NOT EXISTS `utilizadores` (
 `id` int(4) NOT NULL AUTO_INCREMENT,
 `login` varchar(65) NOT NULL DEFAULT '',
 `password` varchar(65) NOT NULL DEFAULT '',
 PRIMAR Y KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
--
-- Dumping data for table `utilizadores`
--
I_NSERT INTO `utilizadores` (`id`, `login`, `password`) VALUES
(1, 'gestor', '1234'),
(2, 'admin', '1234');
</pre>
<p><a name="codigoPHP">O conteúdo do ficheiro login.php é:</a></p>
<pre class="brush: php;">

&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
    &lt;head&gt;
        &lt;title&gt;Login - Security test&lt;/title&gt;
        &lt;style type=&quot;text/css&quot;&gt;
            /*folha de estilos básica*/
            *{font-family:verdana; font-size:12px; color:#333;}
            form{width:400px; border:2px solid #ddd;}
            form p{font-size:14px; font-weight:bold;}}
            input{ border: solid 1px #ddd; background-color:#f5f5f5;}
            label{font-weight:bold;}
            .red{color:red;}
            .green{color:green;}
            #sql{ width:400px; background-color:#336699; color:white; padding:5px; margin:10px; text-align:left;}
        &lt;/style&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;center&gt;
&lt;!-- formulário --&gt;
        &lt;form name=&quot;form1&quot; method=&quot;post&quot; action=&quot;login.php?action=validateUser&quot;&gt;
            &lt;p&gt;Acesso Reservado&lt;/p&gt;
            &lt;label for=&quot;username&quot;&gt;Utilizador:&lt;/label&gt;
            &lt;input name=&quot;utilizador&quot; type=&quot;text&quot; id=&quot;username&quot; /&gt;
            &lt;br /&gt;
            &lt;label for=&quot;password&quot;&gt;Password:&lt;/label&gt;
            &lt;input name=&quot;password&quot; type=&quot;password&quot; id=&quot;password&quot; /&gt;
            &lt;br /&gt;
            &lt;input type=&quot;submit&quot; name=&quot;Submit&quot; value=&quot;Login&quot; /&gt;
        &lt;/form&gt;
&lt;!-- // formulário --&gt;

        &lt;?php
// &quot;verificar&quot; se o formulário foi submetido e validar o utilizador
            if(isset($_POST[&quot;utilizador&quot;]) &amp;&amp; isset($_POST[&quot;password&quot;]) ) {

// ligação à base de dados
mysql_connect(&quot;localhost&quot;, &quot;root&quot;, &quot;********&quot;)or die(&quot;cannot connect&quot;);
mysql_select_db(&quot;junkDB&quot;)or die(&quot;cannot select DB&quot;);

// construção da instrução sql
// notem que estou a utilizar os inputs directamente, sem qualquer tipo de validação.
                $sql=&quot;S_ELECT * F_ROM utilizadores WHERE login='&quot;.$_POST[&quot;utilizador&quot;].&quot;' and password='&quot;.$_POST[&quot;password&quot;].&quot;'&quot;;

// execução da instrução sql
                $result=mysql_query($sql);

// variavel que diz o n.º de resultados obtidos
                $count=mysql_num_rows($result);

// se o n.º de resultados for igual a 1, então é porque os dados introduzidos
// no formulário são válidos. Isto é, existe na base de dados UM utilizador
// com o login e password iguais aos introduzidos no formulário
                if($count==1) {
                    echo &quot;&lt;p class=\&quot;green\&quot;&gt;Dados correctos!&lt;/p&gt;&quot;;
                }
                else{
                    echo &quot;&lt;p class=\&quot;red\&quot;&gt;Dados incorrectos!&lt;/p&gt;&quot;;
                }
                echo &quot;&lt;div id=\&quot;sql\&quot;&gt;&lt;b&gt;SQL:&lt;/b&gt;&lt;br&gt;$sql&lt;/div&gt;&quot;;
            }
            ?&gt;
        &lt;/center&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Para quem quiser aprofundar os conhecimentos sobre este tema ficam aqui alguns links muito interessantes:</p>
<ul>
<li><a href="http://unixwiz.net/techtips/sql-injection.html">SQL Injection Attacks by Example</a></li>
<li><a href="http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/#LineCommentAttacks">SQL Injection Cheat Sheet</a></li>
<li><a href="http://www.securiteam.com/securityreviews/5DP0N1P76E.html">SQL Injection Walkthrough</a></li>
<li><a href="http://dev.mysql.com/tech-resources/articles/guide-to-php-security-ch3.pdf">guide-to-php-security-ch3</a></li>
<li><a href="http://www.owasp.org/index.php/Testing_for_SQL_Injection_%28OWASP-DV-005%29">Testing for SQL Injection (OWASP-DV-005)</a></li>
</ul>
<h5>Notas:</h5>
<ul>
<li>Este exemplo é muito simples e tem como objectivo apenas mostrar o que é o sql Injection.</li>
<li>Relativamente ao site do meu teste, de referir que enviei um e-mail aos responsáveis pelo site a avisar dos problemas de segurança, tendo corrigido de imediato os problemas e agradecido o meu aviso. Gostei <img src='http://tiagofigueira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 1090px; width: 1px; height: 1px;">Testing for SQL Injection (OWASP-DV-005)</div>
]]></content:encoded>
			<wfw:commentRss>http://tiagofigueira.com/sql-injection-seguranca-de-aplicacoes-web/262/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
