PHP Twitter Bot :: Crawling Emails
Um dos projectos que estou a começar a desenvolver é um Twitter Bot que seja capaz de simular o comportamento de um utilizador durante um curto período de tempo, dependendo da configuração que o utilizador lhe quiser dar. Deve também ter todas as funcionalidades que possam ser úteis ou pensáveis para um programa deste género e por isso muito é necessário pesquisar e estudar.
Hoje surgiu-me a ideia de utilizar a pesquisa do Twitter para encontrar e-mails. Claro que não fui o primeiro a pensar nisto, então em vez de reinventar a roda fui alterá-la apenas para andar melhor.
ob_start(); function writemail($matches) { foreach($matches as $emails) foreach ($emails as $email) { echo $email.' '; ob_flush(); } } for($id=1; $id< =20; $id++) { $file = proxify_my_connection("http://search.twitter.com/search?page=".$id."&q=gmail.com+OR+msn.com+OR+hotmail.com+OR+%22email+me%22&rpp=100"); $file = strip_tags($file); preg_match_all( "([a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b)siU", $file, $matches); writemail($matches); } ob_end_flush();
O que este código faz, basicamente, é ler a página de pesquisa do Twitter e utilizando Regular Expressions encontrar os e-mails existentes na página, e depois continua pelas páginas seguintes.
/search?page=”.$id.”&q=gmail.com+OR+msn.com+OR+hotmail.com+OR+%22email+me%22&rpp=100
page numero da página
q representa a query, a chave a pesquisar
rpp results per page sendo que o máximo permitido pelo twitter é 100
Como podem reparar no meu código existe uma função que não está presente nem faz parte do PHP, a proxify_my_connection, é uma ferramenta que eu próprio desenvolvi há algum tempo e que não a quero tornar pública. Mas é fácil de a substituir, mesmo utilizando funções que já vêm de raíz no PHP. Podem também ver aqui uma função com efeito semelhante à que eu desenvolvi, no entanto não tem nada a ver uma com a outra.
Em vez da função writemail() é mais produtivo ter uma base de dados onde quardar os e-mails e verificar se estes são repetidos ou não…
Podem dar uso à vossa imaginação, aumentar e desenvolver a query, aumentar a performance do script, etc. isto foi só um pequeno exemplo do que se pode fazer com a search do twitter.
Bibliografia
Regex utilizado no meu código: http://www.fromzerotoseo.com/twitter-email-grabber/
Contribua para este blog deixando
a sua opinião e um pouco do seu conhecimento
PHP é a linguagem de programação web server-side mais utilizada a nível Mundial e neste artigo vão ser retratados os aspectos que devem fazer parte do estudo, do caminho de um WebDeveloper que quer desenvolver em PHP. Entre eles Boas práticas, Frameworks, Segurança, Caching, Buffering e Environments.
O Melhor Amigo – PHP Manual
Antes de mais é necessário aprender a linguagem em si, e o PHP é uma linguagem com uma enorme comunidade por trás que desenvolveu o PHP Manual, neste manual encontra-se todo o conhecimento necessário para se dominar a linguagem PHP. E como se não chegasse a sua enorme qualidade este é, também, gratuito e pode ser acedido quer online quer offline.
De leitura fácil encontramos no PHP Manual a documentação de como proceder à sua instalação e configuração, a documentação da estrutura lógica da linguagem bem como de todas as funções que a compõe sem nunca faltarem imensos exemplos! A secção das notas dos utilizadores é riquissima em estudos e desenvolvimentos de cada função, não dispensem a sua leitura!
Aceder ao PHP Manual em Português
Montar um Ambiente de Teste
Para testar o PHP não é necessário apenas ter um editor de texto e um browser, é necessário um servidor que corra o interpretador de PHP.
Então para começarmos a desenvolver em PHP é necessário configurar um pequeno servidor ou então utilizar um host existente…
Existem soluções que não envolvem muito trabalho nas configurações, como o MAMP (Mac), WAMP (Windows), LAMP (Linux), estas ferramentas já trazem também incluido a SGBD (Sistema de Gestão de Base de Dados) MySQL.
Depois para desenvolver o código pode utilizar ferramentas de auxilio, os IDE’s. A SmashingMagazine realizou um estudo comparativo sobre IDE’s para PHP. Ver Estudo Comparativo de IDE’s para PHP Aqui
Para quem não quer editores tão pesados aconselho o Geany (Linux) ou Notepad++ (Windows).
Desenvolver Bom Código
Isto não é algo restrito ao PHP mas a todas as linguagens de programação.
Quando programamos algo deve ter, além de uma estrutura lógica e funcional correcta, uma boa identação, documentação e deve também ser auto-explicativa (variáveis, classes e funções com nomes que descrevam facilmente o que contêm / o que fazem).
Deve ser fácil de ler e entender quer pelo próprio programador daqui a uns anos ou por outro programador que tenha de modificar algo no código desenvolvido.
Manter Funções Fora de Ciclos
Manter sempre a declaração de funções fora de ciclos é um aspecto muito importante quando visamos a performance de uma aplicação desenvolvida em PHP pois num ciclo que se repete (imaginemos) 500 vezes, a função será declarada 500 vezes, uma perda de tempo.
Organização do Código por Ficheiros
Além da organização ao nível das linhas código em si temos a organização de código relativa à separação por ficheiros e categorias. Para facilitar o entendimento e a detecção e correcção de erros o código deve ser separado lógicamente.
Imaginemos que estamos a desenvolver um CMS (Content Management System). E então devido à grande quantidade de código que tem de ser desenvolvido vamos separar o código em vários ficheiros.
Má Prática

Boa Prática

Aprender Object Oriented Programming
Object-oriented programming (OOP) ou Programação Orientada a Objectos (POO) em Português utiliza objectos para representar partes da aplicação permitindo separar em secções lógicas o código, facilitando a sua modificação e organização.
Aprender a Utilizar uma Framework
Muitos defendem que se deve aprender a utilizar frameworks na iniciação ao PHP porque com elas se aprende a desenvolver código mais avançado, a organizar melhor o código, a torná-lo lógico, a fazer debbug de erros, etc.
Outros defendem que não se deve aprender a utilizar frameworks na iniciação ao PHP porque no inicio o que os utilizadores necessitam é fazer os seus erros, aprender a desenvolver o seu código de raíz, sem funções e classes prontas a utilizar (exceptuando aquelas que vêm de raíz no PHP claro).
Eu considero que o utilizador deve dar uma olhadela a algumas frameworks e decidir se as deve ou não utilizar, porque cada pessoa é unica e pode aprender de diversas formas. Frameworks que considero muito bem estruturadas: Kohana, CodeIgniter e CakePHP .
Nunca Confie nos Utilizadores
Um dos aspectos mais importantes ao nível da segurança de aplicações informáticas é nunca confiar nos utilizadores da aplicação que estamos a desenvolver.
E que implica isso? Validar tudo o que entra! URL’s, formulários, cookies, sessões e até headers dos browsers.
Vamos então ver alguns exemplos de validações pois seria impossível cobrir todas as validações possíveis.
Validar Dados
É muito importante validar e corrigir todos os dados que possam ser introduzidos pelo utilizador! Infelizmente tenho visto imensas aplicações web sem qualquer protecção contra ataques tornando-as completamente vulneráveis a ataques.
Imaginemos o seguinte URL: joaopedropereira.com/xpto.php?id=1245
Que falha pode ser explorada aqui? O parâmetro dado ao id que pode ser utilizado para um SQL Injection por exemplo. Como fazer esta validação? Através de Regex:
function is_natural($str){ return (bool)preg_match( '/^[0-9]+$/', $str); } if(is_natural($_GET['id'])) { /* código */ } else die('Erro');
Outro exemplo também com URL: joaopedropereira.com/xpto.php?email=email@domain.tld
function is_email($str){ return (preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? TRUE : FALSE; } if(is_email($_GET['email'])) { /* código */ } else die('Erro');
Também com formulários se deve proceder de uma forma semelhante a esta.
ID Cliente
Email
function is_natural($str){ return (bool)preg_match( '/^[0-9]+$/', $str); } function is_email($str){ return (preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? TRUE : FALSE; } if(is_email($_POST['email']) AND is_natural($_POST['id'])) { /* código */ } else die('Erro');
Vimos então que se podem validar os dados através de Regex mas existem outras formas de o fazer.
Imaginemos que temos um formulário que envia um campo de texto. Não podemos criar uma função em Regex para o efeito, assim temos de utilizar outras funções mais ou menos complexas para fazer a limpeza destes dados (recomendo o estudo das funções de validação da Kohana ou CodeIgniter).
function proteger($str) { $str = strip_tags($str); $str = mysql_real_escape_string($str); return $str; }
Com esta função adicionamos alguma segurança ao nosso código limpando tags como as utilizadas em ataques XSS e limpamos os dados contra SQL Injection. (Atenção: esta função não inibe todos os ataques apenas os dificulta um pouco).
Existe também uma forma de melhorar a segurança que dá menos trabalho pois apenas com algumas linhas de código podemos limpar todos os dados passados por $_POST, $_GET, $_REQUEST, $_COOKIE, $_SESSION, etc.
Eu normalmente crio um ficheiro que incluo no inicio de cada página parecido com o seguinte:
foreach ($_POST as $key => $value) { $_POST[$key] = proteger($value); } foreach ($_GET as $key => $value) { $_GET[$key] = proteger($value); } foreach ($_REQUEST as $key => $value) { $_REQUEST[$key] = proteger($value); } foreach ($_COOKIE as $key => $value) { $_COOKIE[$key] = proteger($value); } foreach ($_SESSION as $key => $value) { $_SESSION[$key] = proteger($value); }
Ambiente de Teste vs. Ambiente Real
Um dos problemas com que me deparava quando me iniciei no desenvolvimento de aplicações web em PHP (como o tempo passa…) era a mudança de variáveis entre o ambiente de teste e o real, como por exemplo as configurações da base de dados…
Até ter adoptado uma metodologia que me permitia ao alterar apenas uma linha alternar entre os ambientes.
define('LIVE', true); if(LIVE) { error_reporting(0); define('DB_HOST', 'localhost'); define('DB_USER', 'root'); define('DB_PASSWORD', ''); define('DB_DATABASE', 'basededadosxpto'); } else { error_reporting(E_ALL); define('DB_HOST', 'joaopedropereira.com'); define('DB_USER', 'joao'); define('DB_PASSWORD', 'pedro'); define('DB_DATABASE', 'joao_basededados'); }
Com esta metodologia só preciso de modificar a linha que define a constante LIVE como true ou false conforme esteja a trabalhar num ou noutro ambiente, podem também verificar ali a alteração do error_reporting, enquanto no caso do Ambiente Real não quero que sejam mostrados nenhuns erros aos visitantes por questões quer de segurança quer de aspecto, no caso do Ambiente de Teste quero saber todos os pormenores.
Utilizar Output Buffering
Utilizar Output Buffering é uma excelente maneira de optimizar a performance de uma aplicação em PHP. Sem Output Buffering a sua aplicação só vai mostrar o HTML no fim de toda a página estar carregada, com o Output Buffering a sua aplicação mostra o HTML já carregado quando o programador ordena!
O Developer Brian Cray criou um artigo muito interessante sobre este assunto para a DevTips. Veja-o aqui.
Utilizar Sistemas de Caching
Os Sistemas de Caching são interessantes para aumentar a performance de uma aplicação em PHP. No entanto há que ter em atenção alguns aspectos como por exemplo numa amostragem de resultados em tempo real não se podem utilizar sistemas de caching ou então teremos dados desactualizados…
Existem sistemas prontos a usar mas também podemos desenvolver o nosso sistema de caching como por exemplo algo do género:
$cache_file = 'cache_files/' . md5($_SERVER['SCRIPT_URI']); $cache_time = 1200 * 60; //60min*6 * 60 segundos (6HORAS) if(file_exists($cache_file) AND is_readable($cache_file) AND (time() - $cachetime < filemtime($cache_file))) { require_once($cache_file); } else { ob_start(); /* o código do ficheiro */ $file = fopen($cachefile, 'w'); fwrite($file, ob_get_contents()); fclose($file); ob_end_flush(); }
Sistemas de Caching:
Eu não mordo…
Não tenha medo de comentar, não tenha medo de perguntar, de criticar ou elogiar! Qualquer dúvida pergunte, qualquer reparo faça-o, todas as opiniões e comentários são bem vindos aqui no blog.
Pode também divulgar o artigo, eu não acuso ninguém que divulgue o meu artigo nas diversas redes sociais ou nos próprios blogs (mencionando a fonte ou autor) de plágio
.
Typography Tools List
Um dos aspectos a ter em conta ao desenvolver uma página web é a tipografia da mesma e felizmente para nós webdevelopers e webdesigners existem algumas ferramentas que nos permitem comparar diferentes combinações de propriedades de forma a escolher a melhor para cada trabalho.
Typetester
A ferramenta Typetester permite comparar até 3 fontes lado a lado.
É possível seleccionar qualquer fonte do seu computador (óptimo para fontes compradas) ou usar as fontes disponíveis que são as chamadas web-safe fonts pois são comuns a vários sistemas. É também possível personalizar a cor, o espaçamento, o tamanho, entre outros parâmetros.
É sem dúvida uma excelente ferramenta no que toca a decidir que fonte utilizar em cada elemento da página.
CSS Type Set
Esta ferramenta é talvez a melhor ferramenta existente nos nossos dias, ela permite sem alterar uma linha de código CSS alterar e personalizar completamente a tipografia de um texto introduzido, cor, espaçamento de caracteres e palavras, altura, e outros estilos utilizando uma interface de muito fácil utilização que vai gerando automaticamente o código CSS a incluir na página
Typechart
Esta ferramenta permite escolher entre uma variedade de fontes seguras para a web e ver o seu aspecto quer em Sistemas Operativos Windows, quer em Sistemas Operativos Mac.
Pode-se pesquisar fontes baseadas no estilo (negrito, itálico, etc), no seu tipo e escolher as fontes por nome.
Esta ferramenta disponibiliza também o código CSS para cada combinação de opções o que torna muito fácil a integração com os nossos trabalhos.
Flipping Typical
Para quem não se interessa em utilizar as fontes seguras e prefere utilizar no seu projecto uma outra fonte que se encontra no seu computador pode utilizar esta ferramenta. O que esta ferramenta faz é listar as fontes existentes no computador do visitante e mostrá-las de forma a poder o utilizador seleccionar a que mais lhe interessa para o seu projecto.
Atenção que é bastante relativo, pois no mesmo computador encontra mais ou menos fontes dependendo dos browsers por exemplo…
E vocês que ferramentas tipográficas utilizam?
Validar Dados em ASP
O que vos venho mostrar hoje é como dificultar o trabalho a pessoas que queiram explorar vulnerabilidades no vosso sistema programado em ASP. Esta semana tive um trabalho em mãos que consistia em resolver um problema num site Inglês programado em ASP pois este andava a ser atacado por hackers através de SQL Injection e através desta técnica também criavam ataques de XSS. Não precisei de muito tempo até identificar um possível buraco que pudesse ser explorado. Depois de alguns testes lá consegui obter informações sobre a base de dados desse site mas também sobre outras bases de dados existentes no mesmo servidor o que mostra não só a falta de cuidado do programador mas também do alojamento, mas como o segundo caso não me dizia respeito tratei de corrigir o primeiro.
Como Validar Dados Em ASP
Existem várias maneiras de validar dados quando estamos a desenvolver aplicações em ASP.
Função: IsNumeric()
A maior parte dos dados passados através de parâmetros nos URL são valores numéricos correspondentes a ID’s, assim a função que a linguagem ASP traz por defeito (built-in) IsNumeric() chega para verificar se os valores dos parâmetros passados correspondem a um número. Foi isto que utilizei para o caso em especifico. O programador tinha feito algo como:
GetNews = "SELECT NewsID, campox, campoy, Imagem1, Imagem2, Artigo FROM empresa_News WHERE NewsID = '"&request("id")&"' " Set RSNews = MyConn.execute(GetNews)
E isto passava o valor do id sem qualquer tipo de validação. Passando agora a algo como
if IsNumeric(request("id")) === TRUE then GetNews = "SELECT NewsID, campox, campoy, Imagem1, Imagem2, Artigo FROM empresa_News WHERE NewsID = '"&request("id")&"' " Set RSNews = MyConn.execute(GetNews)
Mas podiam ter sido utilizadas outras técnicas caso não se tratasse de um valor numérico.
Escape dos Dados
function stripQuotes(str) stripQuotes = replace(str, "'", "") end function
Esta função vai fazer com que todos os caracteres ‘ desapareçam, pode-se adaptar esta função para outros caracteres, o que é algo que aconselho vivamente a fazerem, bem como a palavras como script, xp_, select, drop, update, where, entre outras.
Desafio
Desafio todos os leitores a criarem uma função em ASP para fazer uma validação e tratamento dos dados protegendo as páginas de SQL Injection e de ataques XSS. Para isso só precisam de deixar a vossa função nos comentários.
A melhor função será publicada num post com uma menção para o seu autor.
Show some love, divulguem e participem
O que é a Usabilidade?
A Usabilidade é um termo utilizado para mostrar a facilidade de utilização e compreensão de uma interface, está directamente ligada à facilidade que o utilizador tem em alcançar os seus objectivos.
A o estudo da Usabilidade numa aplicação web é muito importante para tornar a aplicação web mais eficiente e produtiva! A Usabilidade está também intimamente relaccionada com a Acessibilidade de uma aplicação web e sua Optimização, e em casos não relaccionados com o assunto especifico de criação de uma aplicação web também são tidos em conta no estudo da Usabilidade aspectos como a ergonomia.
Podemos definir Usabilidade separando-a em vários componentes:
- Learnability: How easy is it for users to accomplish basic tasks the first time they encounter the design?
- Efficiency: Once users have learned the design, how quickly can they perform tasks?
- Memorability: When users return to the design after a period of not using it, how easily can they reestablish proficiency?
- Errors: How many errors do users make, how severe are these errors, and how easily can they recover from the errors?
- Satisfaction: How pleasant is it to use the design?
Fonte: Usability 101: Introduction to Usability
Porque devem ser feitos estudos de Usabilidade?
Na criação de aplicações web um dos pontos que se deve ter sempre em mente durante a fase de desenho da interface é a Usabilidade da mesma, é necessário ver a Usabilidade como condição essêncial para qualquer interface! read more…
Torne o seu site mais rápido com Gzip
Já utiliza a compressão gzip na sua página? Espero que sim, isto porque tal como vou mostrar hoje, comprimir a vossa página com gzip torna a página surpreendentemente mais rápida!
Para demonstrar isto guardei a página da SAPO que é uma página com bastante conteúdo, e por isso bastante pesada, tem cerca de 413Kb.
O que se poupa comprimindo os ficheiros com gzip? Velocidade e bandwidth, então para host’s em que este segundo é limitado esta é uma técnica imprescindível!
Nos testes seguintes apenas vou utilizar o ficheiro HTML da SAPO e não todos os recursos externos (imagens, css e JavaScript).
Recentemente decidi fazer update do sistema operativo secundário do meu portátil, o Windows Vista, pois este para além da lentidão própria do sistema, estava a dar-me muitos problemas e não me permitia trabalhar correctamente.
Então decidi experimentar o Windows Seven. Depois de fazer a instalação do Windows Seven, tal como estava à espera fiquei sem o boot menu ao qual acedia anteriormente, e não conseguia aceder ao meu sistema principal, Linux distribuição Ubuntu. Fiz boot do sistema normalmente com Windows Seven e comecei à procura de como solucionar isto, há muito que não tinha de resolver estas questões… E nada encontrei talvez por ainda o problema ser recente, não o caso geral mas o caso particular. Depois de alguma pesquisa e tentativas cheguei a uma solução.
Como solucionar o problema
- Correr o Ubuntu em LiveCD
- Abrir a consola
- escrever sudo grub
- escrever find /boot/grub/stage1
- Verificar output [meu ex.: hd(0,5)]
- escrever root(hd(0,5)
- escrever setup(hd0)
E com estes passos já deve estar o problema solucionado e devem novamente conseguir aceder à listagem dos vários sistemas operativos.
Alguém teve a mesma situação? Conhecem outra forma de o fazer?
Recentemente deparei-me novamente com a necessidade de colocar um portal em modo de manutenção para proceder a algumas actualizações e ia fazer como habitual de acrescentas três linhas ao inicio do ficheiro index.php, algo do género:
include('modomanutencao.php'); die();
Mas desta vez isto não me satisfez e senti a necessidade de fazer isto de uma forma mais “profissional” não a desenrascar, porque assim o site continuaria online caso entrassem por outro URL.
E o primeiro pensamento que me veio à cabeça foi utilizar o htaccess. Assim comecei a escrever algumas regras para o htaccess redireccionar todos os utilizadores para o modomanutencao.php menos eu, pois tinha de fazer testes a tudo.
RewriteCond %{HTTP:portalmanutencao} !^1$
RewriteRule ^(.*)$ modomanutencao.php
E o que fazem estas duas linhas? A primeira é uma condição que diz que todos os browsers que não enviem o Header portalmanutencao com o valor 1 têm de seguir a regra da segunda linha que diz que todas as páginas que tentarem aceder serão redireccionadas para a página modomanutencao.php
Para mudar e acrescentar HTTP Headers podem utilizar o seguinte plugin caso utilizem o browser Mozilla Firefox: Modify Headers
Depois da manutenção feita quando estava a fazer o meu jogging ao fim do dia isto ficou-me na cabeça e pus-me a pensar noutras maneiras de se fazer isto e surgiu-me mais uma ideia também utilizando o htaccess, que basicamente funciona de maneira parecida à interior, só que neste caso redirecciona também o utilizador para a página de modo de manutenção exceptuando quem tiver o IP definido.
ErrorDocument 503 http://joaopedropereira.com/modomanutencao.php Order deny,allow Deny from all Allow from 127.0.0.1 #colocar o IP de quem estiver a fazer a manutenção
Aprender mais sobre o mod_rewrite do apache
Existem mais formas de o fazer, utilizando htaccess, PHP, etc.
Como é que vocês fazem quando definem o modo de manutenção nas páginas que administram?
Online Marketing Expo Lisboa 2009
O que se vai falar na OMExpo Lisboa
Apesar de ser a primeira vez que este evento vem a Portugal, A OMExpo Lisboa pretende também no nosso pais ser o evento de referência no que toca ao marketing online, como tal os temas que se vão abordar, não poderiam ser mais específicos e interessantes para todos os profissionais da área. Na OMExpo Lisboa terá como temas principais o Marketing em sites de busca, Analítica da Web, E-Mail Marketing, Mobile Marketing, Marketing Afiliado, Behavioral Targeting e Marketing Online.
A quem se destina a OMExpo Lisboa
Este evento tem como objectivo reunir os directores das grandes empresas nacionais, tanto na área do Marketing, do Marketing Online, da Publicidade e Meios Digitais. Mas para os profissionais individuais e webmasters também será um evento de extrema importância, pois pela primeira vamos ver reunidos no evento nacional os principais sponsors para o mercado nacional. Vai ser uma oportunidade única para conhecer pessoas, trocar ideias, dar sugestões e falar pessoalmente com as pessoas que directa ou indirectamente trabalham connosco através dos nossos sites. Dai eu faço um apelo especial a todos os webmasters para aparecem em força neste evento, à que mostrar às grandes empresas que os sites “homemade” representam uma grande e óptima oportunidade de negócio dentro desta área.
Gostava de ir… Quando e Onde?
Se tal como eu está interessado em participar nesta conferência de excelência que temos a sorte de ser realizada em Portugal fique sabendo que é já este mês, a 24.06.2009, e será realizada no Lisbon Marriott Hotel. Por isso não marque nada para esse dia e apareça por lá.
Caso não esteja em condições financeiras de assistir a esta conferência porque não candidatar-se a um dos 5 bilhetes grátis que o Mais-Tráfego tem para oferecer ou então beneficiar dos 15% de desconto que oferecem utilizando o código promocional: “MAISTRAFEGO24?
Direct URL: http://online-marketing.com.pt/lisboa/2009/index.php
O que acham deste evento? Estão a pensar ir?
Hoje venho mostrar-vos como é fácil encontrar vulnerabilidades em páginas web, para inaugurar esta nova “categoria” do blog o website escolhido foi o jogo web-based System Empires jogo este que tenho vindo a jogar e a falha nele explorada será o tipo de falha Cross-site scripting (XSS) esta falha, para os que não sabem, permite fazer injecção de código numa página, esta é uma vulnerabilidade client-side pois só se dá no browser da vítima e não afecta, directamente, o servidor.
Nota: esta falha é apenas vísivel a membros registados no jogo. Vulnerabilidade corrigida (mais informações)











