Fabyo 66 Denunciar post Postado Dezembro 4, 2005 cara você continua viajando muito você é cego ou o que? foreach ($_POST as $campo => $valor) { $$campo = $valor;} register_globals nao usa $_POST nem $_GET se quiser usar o foreach para pegar dados via GET use: foreach ($_GET as $campo => $valor) { $$campo = $valor;} outra coisa é você só ler uma coisa mas nao saber o porque muita gente usa o register_globals em on e outras nao mas a maioria nao sabe o porque de nao usar como ja falei sou contra o uso do register_globals em on, mas sei trabalhar com o php e sei sobre segurança nao adianta nada você usar o register_globals mas nao entender o porque nao vou ficar discultindo com você porque isso é perda de tempo se você prefere escrever 50 linhas pra pegar 50 campos isso é problema seu, mas eu nao meus codigos sao os menores possiveis só pra finalizar se eu espero uma variavel exemplo $campo vinda de um formulario via post dai se eu usar o foreach eu pego essa variavel ja com o register_globals on eu poderia digitar na url e pegar ela via get agora tenta provar que você consegue fazer alguma coisa com essa variavel, tenta passar ela via get sendo que eu to recebdo via post é tudo questao se saber trabalhar, nao adianta só argumentar sem saber ao menos provar do que ta falando outra coisa que você nao soube entender, é que aquele exemplo do manual sobre simular é para as pessoas continuarem usando seus scripts sem precisar auterar tudo de uma vez por isso chama "simular", mas aquilo é uma maneira correta de fazer usando o register_globals off você simula para manter o script compativel sem precisar ficar auterando tudo Compartilhar este post Link para o post Compartilhar em outros sites
micox 2 Denunciar post Postado Dezembro 4, 2005 cara você continua viajando muito você é cego ou o que?Calma cara. Vamos manter uma discussão de nível (afinal você é administrador).Uma boa discussão é sempre boa pra aumentar o conhecimento de todos. Vamos continuar até chegarmos em um consenso. Pode ser que eu realmente esteja errado.Bem. Vamos lá.1.register_globals nao usa $_POST nem $_GET http://br.php.net/manual/pt_BR/ini.sect.da...egister-globalsregister_globals boolean Define se registra váriáveis de Ambiente, GET, POST, Cookie e Servidor como variáveis globais2. outra coisa é você só ler uma coisa mas nao saber o porque muita gente usa o register_globals em on e outras nao mas a maioria nao sabe o porque de nao usarcomo ja falei sou contra o uso do register_globals em on, mas sei trabalhar com o php e sei sobre segurança nao adianta nada você usar o register_globals mas nao entender o porqueNão entendi o que você disse acima, ficou um pouco ambíguo. Nós todos não já concordamos que o register_globals é perigoso? já. Todos nós já concordamos que o register é perigoso.3.nao vou ficar discultindo com você porque isso é perda de tempose você prefere escrever 50 linhas pra pegar 50 campos isso é problema seu, mas eu nao meus codigos sao os menores possiveisComo eu já disse anteriormente, existem várias formas de você ter segurança no código do foreach. Não estou condenando ele por completo e sim condenando sua utilização em locais indevidos e por pessoas que não souberem o perigo que PODEM estar correndo.Só pra complementar o tópico existe outra função que faz quase o mesmo que o foreach polêmico: import_request_variables. Ele tem a vantagem de você colocar um prefixo nas variáveis importadas, tornando-as seguras e impedindo que modifiquem variáveis já existentes no script.Segurança e eficiência no código. É só pesquisar um pouco.4.agora tenta provar que você consegue fazer alguma coisa com essa variavel, tenta passar ela via get sendo que eu to recebdo via postDe acordo com o protocolo HTTP, a única diferença (básica, pois tem outras diferenças galera, mas no escopo do PHP esta é a única diferença) entre o GET e o POST é o fato de o GET ter um limite de caracteres.Portanto eu poderia passar a variável pra você da seguinte forma:(Eu nao queria ter que ensinar este truque, mas lá vai)1. Abra sua página que tem o formulário POST2. Digite o seguinte no navegador e depois dê ENTER: javascript:document.forms[0].elements[0].name="novo_nome";alert(document.forms[0].elements[0].name)3. Feche este alertazinho que se abriu (verifique que ele já contém o NOVO nome do seu campo)4. Submite seu formulário.OPAA!!! parece que seu primeiro elemento do form mudou de nome???? Então eu posso mandar a variável que eu quiser para seu script??(obs. A tecnica acima foi testada no meu mozilla Firefox versão 1.5 windows xp sp1)Mesmo que você esteja recebendo qualquer variável via POST é muito simples passá-la (agente nao precisa passa-la apenas por GET não).Eu te passei uma nova variável com o nome que eu queria e com o valor que eu queria através de um truque simples como o de cima (e olha que tem outros truques mais complicados e mais difíceis de serem detectados).Como TODOS OS ESPECIALISTAS EM SEGURANÇA DIZEM: Não confie em segurança do lado do cliente!5. "simular", mas aquilo é uma maneira correta de fazer usando o register_globals off você simula para manter o script compativel sem precisar ficar auterando tudoNo meu entendimento, acho que se você SIMULAR a utilização do register_globals=on, você TERÁ os MESMOS problemas de segurança que se o register_globals estiver em ON, pois, como você mesmo disse, ESTÁ SIMULANDO. ENTÃO INCORRERÁ NO MESMO ERRO!!! Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Dezembro 4, 2005 cara to calma mas você ainda nao entendeu tente passar um dado via get se eu to esperando via post é só isso nao adianta você falar de javascript nem nada nao tem nada haver com a situação vou ser mais direto eu te desafio eu faço um sistema com foreach e você tenta enviar alguma coisa via get beleza? nao sei o porque você nao consegue entender uma coisa tao simples você ta viajando porque você nao sabe pra que serve o register_globals e muito menos porque ele ta como padro off se você quer mudar um valor de um campo num formulario basta digita-lo cara nao sei onde você quer chegar se ta falando besteira outra coisa sobre simular pra que simular uma coisa se é melhor deixar on ?, o lance la é simular para poder usar o sistema sem precisar auterar tudo nao faz sentido a pessoa deixar o register_globals off e simular ele e sobre seu exemplo do javascript "nossa que dahora, meu revolucionario seu exemplo, eu nem sei o que é javascript " = ) diferença entre post e get: HTTP é o protocolo padrao pra transporte de páginas na internet. PHP é uma linguagem de script que processa as informações no servidor e envia pro usuário geralmente utilizando HTTP. Apesar de você processar os dados de um form em PHP, o envio dos dados acontece no HTTP entre o browser e o servidor. Considerando o seguinte exemplo html: <html> <body> <form method="get"> <input name="campo1" type="hidden" value="valor1" /> <input name="campo2" type="hidden" value="valor2" /> <input type="submit" /> </form> <form method="post"> <input name="campo1" type="hidden" value="valor1" /> <input name="campo2" type="hidden" value="valor2" /> <input type="submit" /> </form> </body> </html> ao clicar no primeiro submit, que é GET, o seguinte cabecalho HTTP é enviado pro servidor: GET /exemplo.php?campo1=valor1&campo2=valor2 HTTP/1.1 Vale a pena lembrar que esse e EXATAMENTE o mesmo comando que ele envia caso você digite a URL (http://site/exemplo.php) no browser. Ao clicar no segundo botão, o seguinte header é enviado para o servidor: POST /exemplo.php HTTP/1.1 Content-Type: application/x-www-form-urlencoded Content-Length: 27 campo1=valor1&campo2=valor2 Perceba que tanto em um quanto o outro, os dados são enviados em forma "url-encoded". No caso do POST, os dados podem ser geralmente em multipart/form-data ou x-www-form-urlencoded. Nao vou entrar em detalhes nisso. 1: POST e GET são métodos do HTTP RFC2616 - HTTP. você ainda nao conseguiu provar uma falha usando foreach ,ainda mais que o foreach apenas pega os dados vindos do form usando o $_POST nao tem como você mandar um campo via get register_globals nao usa $_POST nem $_GET o register_globals pega os dados vindos for formulario seja get ou post e cria uma variavel do mesmo nome isso ele faz internamente mas usando foreach com $_POST eu só vou receber uma variavel via post ja o register_globals nao importa se é get ou post é ai que ta a insegurança e usando forech ta seguro porque nao tem como uma pessoa enviar um campo via get Compartilhar este post Link para o post Compartilhar em outros sites
micox 2 Denunciar post Postado Dezembro 4, 2005 Ah... beleza... agora to começando a entender porque você ainda não entendeu o que eu estou dizendo. você está encucado com o Get,POst. Cara, tira essa história de que post é seguro da sua cabeça. Pois mesmo que você esteja esperando só variáveis via POST no seu script PHP eu posso passá-la uma nova variável com a mesma facilidade que eu passo no GET. Vou tentar te explicar por partes: 1- O register_globals não é perigoso só por causa do GET não. 2- Se o register_globals estiver on, as variáveis passadas por POST também serão (potencialmente) perigosas para o sistema. (esta é a frase mais importante do meu post) Ah. e o javascript que eu passei acima é só pra mostrar que (assim como as variáveis do GET), as variáveis do POST podem ter seu nome facilmente alteradas pelo usuário. sacou? Se um cara tentasse atacar por get ele não iria alterar o nome das variáveis? pois é... ali em cima eu só tô ensinando também comé que ele altera o nome das variáveis/campos do post. Outra coisa. Se no seu script você só recebe coisas via POST e eu quero atacá-lo, não tem porque eu tentar fazer isso via GET (eu seria muito ingênuo). Eu mudaria o nome de suas variáveis utilizando o script que postei acima. Entendeu? Não é questão de GET ou POST. A função foreach polêmica (e o register_globals) PODE ser insegura em qualquer dos 2 casos. GET e POST é tudo (quase) a mesma coisa... Por isso o pessoal RECOMENDA não utilizar QUALQUER forma de script que permita a um usuário alterar suas variáveis. PS.: Já que você quer comodidade, utilize o import_request_variables com prefixos. você terá comodidade e segurança. ---------------------------------------------------------------------------------------------------------- Novo post agora com o mesmo exemplo do php.net: <?phpif (authenticated_user()) { $authorized = true;}if ($authorized) { include "/highly/sensitive/data.php";}?> Se eu mandar uma variável chamada 'authorized' com o valor TRUE e o register_globals estiver em ON, o script acima dá m***** certo? Agora veja o script abaixo: <?phpforeach ($_POST as $campo => $valor) { $$campo = trim($valor);}if (authenticated_user()) { $authorized = true;}if ($authorized) { include "/highly/sensitive/data.php";}?>O que estou tentando dizer desde o início, é que o script de cima também dará m***** se alguem me mandar uma variável chamada 'authorized'=TRUE, MESMO QUE O REGISTER_GLOBALS ESTEJA EM FALSE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! PS.:Como eu já disse acima, o fato de você estar esperando só variável Post não fará diferença pois eu também consigo alterar nomes de variáveis posts (de acordo com meu js "superrevolucionário", como você mesmo disse) Entendeu agora???? PS2.: Desculpe a demora em responder, pois minha net está lenta... Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Dezembro 4, 2005 cara você ainda nao entendeu, e nao vem querer me ensinar porque eu sei do que to falando cara eu falo que se usar a função foreach é segura e provo agora você vem com um monte de historia mas nao prova nada só fala e fala coisas sem sentido e fora do assunto agora pra que ou porque mudar nome de variaveis sendo que eu to esperando uma coisa exemplo $b = $_POST["b"]; echo $b; dai você usa seu javascript e muda o nome do campo pra c que adianta? o que eu to tentando te dizer é que o foreach nao é inseguro cara pare pra pensar um pouco usando $_POST tem o mesmo grau de segurança que o foreach ($_POST ... ,tente entender isso se no meu sistema eu to esperando a variavel $a pra fazer alguma coisa com ela tanto $_POST["a"] ou foreach ($_POST...) é a mesma coisa ou sera que ainda nao entendeu ? se for falar de segurança podemos falar de varias coisas mas ja foje do assunto que nao tem nada haver register_globals on com o foreach você mesmo sitou o exemplo do manual no exemplo ali usando register_globals on eu posso passar $authorized = true; via get exemplo www.site.php?authorized=1 agora se eu deixar register_globals em off nao daria e mesmo eu usando o foreach tbm nao porque o foreach ta lendo o conteudo do $_POST e outra coisa eu nao to encucado com get nem post, eu sei passar dados via get e post e ate enviar um cookie falso e nao tem nada haver com javascript Compartilhar este post Link para o post Compartilhar em outros sites
micox 2 Denunciar post Postado Dezembro 4, 2005 Fabyo. Poxa cara, eu to vendo que você tá muito nervoso. Tanto que acaba achando que eu não entendi coisas básicas.1. Veja isto que você colocou como se eu nao tivesse entendido: $b = $_POST["b"];echo $b;dai você usa seu javascript e muda o nome do campo pra 'c' que adianta?Poxa, cara. Desde o início do tópico eu estou sendo a favor deste código acima... ( e também do import_request_variables com prefixos).Pois com ele não é possível me mandarem variáveis surpresa.2.usando $_POST tem o mesmo grau de segurança que o foreach ($_POST ...Como eu exemplifiquei no meu post anterior esta afirmação sua é falsa.Leia o exemplo anterior (aquele que eu fiz com base no php.net) e veja que é possível alterar qualquer variável com ele.3.eu posso passar $authorized = true; via getexemplo www.site.php?authorized=1Aí que está o que eu estou tentando te dizer cara. EU POSSO PASSAR A VARIÁVEL 'authorized'=1 POR POST TAMBÉM E NÃO SÓ POR GET!!! Entenda isto e você entenderá o que eu estou dizendo!!!4.agora se eu deixar register_globals em off nao dariae mesmo eu usando o foreach tbm nao porque o foreach ta lendo o conteudo do $_POSTQUALQUER UM PODE PASSAR NOVAS VARIÁVEIS VIA POST TAMBÉM!!! E NÃO SÓ POR GET!!!!! Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Dezembro 4, 2005 cara você que nao esta entendendo nao ,se o caso é burlar aquele exemplo acima $authorized = true; bom beleza eu consigo burlar ele o que você nao ta entendendo é que você ta falando de passar um dado via get ou post entao se ta falando da falha de segurança do script em si e nao do foreach exemplo: <?php foreach ($_POST as $campo => $valor) { $$campo = trim($valor);} if (authenticated_user()) { $authorized = true; } if ($authorized) { include "/highly/sensitive/data.php"; } ?> <?php $authorized = $_POST["authorized"]; if (authenticated_user()) { $authorized = true; } if ($authorized) { include "/highly/sensitive/data.php"; } ?> esses 2 exemplos sao a mesma coisa e eu consigo enviar um campo authorized com valor true mas ai que ta essa falha nao tem nada haver com o foreach isso que você nao consegue enchergar estamos falando de insegurança do exemplo $authorized agora sobre o foreach continuo repetindo ele ta pegando os dados via post se você consegue mudar e dai mudou mas tera o mesmo efeito com $_POST se você bular um você burla o outro é isso que você nao consegue entender sera que agora você entendeu ? Compartilhar este post Link para o post Compartilhar em outros sites
micox 2 Denunciar post Postado Dezembro 4, 2005 Desisto cara. você venceu... Não vou continuar com isso.Não tenho mais nem o que falar, eu já falei tudo, só não entende quem não quer!!! :( É só ler os tópicos que eu postei acima, com exemplos e tudo.Resumindo: A falha do foreach é que você não terá controle sobre suas variáveis. você acha isso bom???? eu nao!!!!Com o segundo código que você postou, eu tenho CONTROLE sobre as variáveis e EU QUIS que o cara escrevesse no $authorized. Por isto o $_POST sempre será infinitamente mais seguro que o código "foreach ($_POST as $campo...".E diferentemente de meus posts iniciais (pois agora eu já estudei o assunto) eu afirmo com CERTEZA ABSOLUTA: $_POST[] sempre será infinitamente mais seguro (o import_request_variables também. gostei dele :) ).você ganhou. Vou dormir, não postarei mais. É só ler meus posts anteriores. Falows cara. Foi uma boa discussão, pena que você não se convenceu. Espero que não tenha problemas com isso. (Ah. com certeza você não terá depois de tudo que eu falei...)Mas lembre-se: se você não tem controle sobre suas variáveis, quem terá? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Dezembro 4, 2005 beleza t+ vai na fé se você acha que ta certo quem sou eu pra te convencer o contrario, mas continuo com minha razao e acho que você viajou ate agora e desculpe se eu falo assim mas é a maneira que eu falo nao to com raiva por causa disso Compartilhar este post Link para o post Compartilhar em outros sites
micox 2 Denunciar post Postado Dezembro 4, 2005 FAlows... té outro dia.Espero que agente concorde em outros pontos ao tentar ajudar os outros, senão esse fórum vai virar só discussão viagem. hehaehahe Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Dezembro 4, 2005 beleza :D , mas nao leve a mal nada nao, e as vezes pode parecer que fui grosso ou tava bravo mas nao é isso nao falta de um smile pra ajudar a mostrar melhor o que sentimos :D :clap: :rolleyes: B) t+ Compartilhar este post Link para o post Compartilhar em outros sites