1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

PHP - Como Ligar à BD, Inserir, Eliminar, Procurar, Listar, Modificar

Discussão em 'Web Development' iniciada por ScalaZone, 11 de Agosto de 2008. (Respostas: 17; Visualizações: 13515)

  1. ScalaZone

    ScalaZone Power Member

    Bem, depois de muitas mensagens, pedidos e esclarecimento de dúvidas em relação ao PHP+MySql ... decidi postar fragmentos de código, que são os essenciais, das imensas possibilidades que temos em trabalhar com uma base de dados.

    Ligar à base de dados:
    Inserir dados na base de dados:
    mysql_close();}

    Eliminar um registo na BD
    Modificar um registo ou "update" a um registo
    Fazer uma pesquisa na BD
    Listar dados
    Bem mais do que isto não posso fazer.
    Alguns bons programadores devem estar a gozar com esta situação, uma vez que tive o trabalho de disponibilizar literalmente, todo o código necessário a estas bases aplicações com uma base de dados.

    Nada de PM's sobre este assunto.
    Obrigado
    :009:
     
  2. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Boas!

    E se $id_elemina = "0' OR '1'='1"? (magic_quotes = off)

    Não quero deitar por terra o teu trabalho, mas acho que este tipo de coisas é tão sensível que o ideal será ensinar explicando. Apenas isso tem a desvantagem do utilizador nem sempre saber o que está a fazer, e acaba por cair no erro mais comum de todos - SQL Injection.
     
    Última edição: 12 de Agosto de 2008
  3. alakazan

    alakazan Power Member


    É certo que tens razão, mas repara que o objectivo do ScalaZone também não era dar aqui um curso de PHP/MYSQL e ainda técnicas anti hacking. Sql injection, php injection, xss são preocupações que aqueles vêm perguntar como se liga à bd e se enfia lá dados não têm.

    Mas não deixas de ter razão, a questão da segurança é extremamente importante nos dias que correm.
    Como tal vou deixar aqui um pequeno contributo para ajudar os que têm menos conhecimentos a prevenirem-se contra SQL injection.

    Antes de passarem um valor para a bd, apliquem-lhe esta função:


    PHP:
        function mysql_prep$value ) {
            
    $magic_quotes_active get_magic_quotes_gpc();
            
    $new_enough_php function_exists"mysql_real_escape_string" ); // i.e. PHP >= v4.3.0
            
    if( $new_enough_php ) {
                
                if( 
    $magic_quotes_active ) { $value stripslashes$value ); }
                
    $value mysql_real_escape_string$value );
            } else { 
                
                if( !
    $magic_quotes_active ) { $value addslashes$value ); }
                
            }
            return 
    $value;
        }
    Usar da seguinte forma:

    PHP:
    $valor_que_vai_para_bd=mysql_prep($valor);
    .
     
    Última edição: 12 de Agosto de 2008
  4. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Eu sei, e volto a repetir que não quero desvalorizar o trabalho tido, mas é que ver coisas destas (acessível apenas a Power Members - refiro-me ao site do Nesquik ter sido crackado) serve para lembrar que enquanto os developers não aprenderem que a segurança de uma aplicação é tão importante como a mesma, os sites deles vão, invariavelmente, acabar da mesma forma.
     
  5. alakazan

    alakazan Power Member

    LOOL o site da Nesquik, nem sabia que isso tinha site, lol.
     
  6. paperless

    paperless Power Member

    Por acaso comecei nestas andanças a semana passada e desde cedo houve pessoas que me alertaram para a possibilidade de injectarem texto nas queries à bd.

    Ora...se eu que comecei há tão pouco tempo e já estou ciente desse facto como é que algo desse genero acontece no site da nesquik?
     
  7. Zed_Blade

    Zed_Blade Power Member

    É uma boa pergunta e provavelmente quem fez o site estava ciente disso. Talvez não soubesse como proteger ou simplesmente não se quis dar ao trabalho..
     
  8. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Há muito mais formas de injectar código do que o simples "OR 1=1" :) muitas chegam a ser verdadeiramente complexas, e esse tipo de coisas pode passar despercebido ao programador. Não tem necessariamente de ser um mau programador, mas pelo menos devia estar a par dos problemas mais recentes; devia estar "em cima dos acontecimentos" (mas nem eu estou, por isso não posso falar muito :x )
    Por exemplo, se te estiverem a aconselhar constantemente o uso da função mysql_real_escape_string, fica a saber que essa função teve um certo problema com caracteres dos charsets BIG5 e GBK. Link. Penso que isso tenha sido corrigido nas versões mais recentes, mas nem todos os alojamentos têm as versões mais actualizadas do software ;)

    A questão aqui é que "de pequenino é que se torce o pepino" (isto é, é bom começar logo do princípio a ganhar boas práticas), e, por melhor que o programador daquele site seja, percebe-se assim que não chegou para evitar esta falha.

    Agora o essencial é porem aquilo a trabalhar. Não sei há quanto tempo está assim, mas se está um concurso a decorrer, é bom que resolvam o mais rápido possível.
     
  9. ScalaZone

    ScalaZone Power Member

    Php - bd


    É assim,
    como eu expliquei, ou secalhar esqueci-me de dizer. Não dei todos os passos, apenas os principais. É óbvio que faltam muitas questões de segurança e não só. Muitas validações, mas como disseram, e muito bem, não estou aqui para dar um curso!
    Apenas de uma maneira geral, abordei o assunto.
    Obrigado pela tua opinião.
    Obrigado ao alakazan pelo seu contributo.

    Ps: podem muito bem começar por aplicarem isto aos vossos exercicios na escola :x2:
     
  10. hostmake

    hostmake Power Member

    Se tiver um ficheiro global, que trata de todos os REQUEST's, no topo algo do tipo fica bem:

    foreach ($_POST as $key => $valor) {
    $_POST[$key] = mysql_real_escape_string($valor);
    }

    Pelo que vocês não tem que se preocupar, pois o valor do POST já foi tratado e reposto para poderem usar directamente do $_POST
     
  11. Suesana

    Suesana Power Member

    duvida protecção da BD

    como se protege a bD? para que ninguem consiga mudar as coisas e estroirar com a BD?
     
  12. anjo2

    anjo2 Power Member

    1º Boa programação
    2º Não permitir acessos exterior à base de dados (apenas aberto para localhost)
    3º Apenas acesso com um username e com uma password segura
     
  13. Suesana

    Suesana Power Member

    é possivel explicares que queres dizer com a 1ª e a 2ª?
     
  14. anjo2

    anjo2 Power Member

    A 1ª é usar por exemplo "mysql_real_escape_string" antes de enviar os dados para a base de dados, a 2ª depende da configuração dos servidores, mas por exemplo num alojamento podes conseguir aceder à base de dados a partir do teu pc, e isso pode ser inseguro.
     
  15. Suesana

    Suesana Power Member

    e se não se deve conseguir aceder a BD atraves do pc iriamos como?
     
  16. anjo2

    anjo2 Power Member

    só através do servidor onde está o código.
     
  17. Suesana

    Suesana Power Member

    eu acedo atravez do cpanel para mandar a BD e o resto mando pelo Filezilla
     
  18. anjo2

    anjo2 Power Member

    phpmyadmin? Isso está no servidor, no cPanel podes definir ips para acederem de fora do servidor, com programas próprios ou sites que estejam noutros servidores.
     

Partilhar esta Página