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

Segurança em PHP

Discussão em 'Web Development' iniciada por xuxaki, 15 de Setembro de 2008. (Respostas: 14; Visualizações: 1190)

  1. xuxaki

    xuxaki Power Member

    Trabalho a pouco tempo com php, e surgiram-se algumas dúvidas...

    Já tenho tudo a funcionar no site que estou a fazer, mas preocupa-me a questão da segurança, já que os dados de acesso a base de dados estão explicitamente guardados no servidor...

    Eu sei que o php não deixa ver o código fonte, apenas o html final, etc, mas questiono-me se algum "hacker" mais teimoso não consiga, com relativa facilidade, sacar-me esses ficheiros?!

    Há algo que possa fazer para prevenir este tipo de situação?
     
  2. hostmake

    hostmake Power Member

    .php não pode ser acedido, por url.
    se tiver num servidor, ele vai levar sempre parse.
     
  3. Gurzi

    Gurzi Power Member


    claro que consegue, basta teres alguma coisa mal programada, consegue acederte ás pastas todas do servidor e sacar e ver os ficheiros :)
     
  4. krunch

    krunch Power Member

    Em segurança, não há "sempres". A falha mais grave de segurança é a falsa sensação de segurança :)
    Por exemplo, se queres proteger a pass da BD, podes po-la num ficheiro fora da web root, com as devidas permissões para ser lido apenas por um script do estilo "utils" que centraliza o acesso à BD. Sempre que acedes à BD deves usar esse utils. Desta forma, mesmo que o apache se passe (que é pouco provável, mas possível), o ficheiro com a pass estará protegido, nao podendo ser obtido por URL directo.
    Mas preocupa-te antes com os ataques por XSS, SQL-Inj, etc, etc. Ataca as questões de segurança por ordem de maior probabilidade do ataque respectivo.
     
  5. masterArt

    masterArt Power Member


    Claro que pode ser acedido, basta ele ter um include por url o ácaro mete-lhe uma cmd e têm acesso ao servidor todo.

    Isto por php-injection, mas milhentos métodos de atacar uma pagina.

    O melhor mesmo é nunca usar métodos de navegação do género http://pagina.com/index.php?id=homepage

    E todas as variáveis que vêm do utilizador, tipo de formulários e assim devem levar um Clean, para não serem lidos caracteres especiais.
     
  6. xuxaki

    xuxaki Power Member

    então alguém me pode dar um exemplo de como posso configurar isso?

    krunch, a tua ideia pareceu-me interessante, mas sinceramente não estou a ver como a por em prática :007:
     
  7. MPalhas

    MPalhas Power Member

    um exemplo (que é usado no Joomla e que eu aproveitei para a minha PAT)

    imagina que tens um site que é sempre acedido pelo index.php, e depois este ficheiro é que chama o resto dos ficheiros para mostrar o site. deste modo o unico ficheiro a que o utilizador precisa de ter acesso directo é o index.php

    então no inicio dele pões:

    Código:
    define(VALID_ACESS, 1);
    isto define uma constante chamada VALID_ACESS.
    nos outros ficheiros PHP começas sempre por pôr:

    Código:
    defined(VALID_ACESS) or die("Não tem permissões para aceder a esta página")
    repara que aqui e defineD, e não define. esta verifica se a constante VALID_ACESS existe. ela só irá existir se tiver sido o index.php a ser executado em primeiro lugar (e a fazer include ao ficheiro em questão)

    se um utilizador tentar aceder directamente a outro ficheiro, por exemplo, o login.php, essa constante não vai estar definida e vai receber a mensagem do die()

    isto é uma maneira, mas não precisas necessariamente de ter assim. podes só por esta protecção no ficheiro que tenha as coisas importantes (dados acesso à base de dados, funções importantes, etc)
     
  8. krunch

    krunch Power Member

    Ha imensos sites com tutoriais. Googla :)
    Resumindo:
    Todos os teus *.php que acedem a dados devem fazer require de um utils.php.
    No utils.php é tens o codigo de acesso à BD.
    Num ficheiro tipo ~/secreto tens um .php com uma variavel $pass="123";
    O utils.php faz require do php com a pass. Assim a pass está guardada apenas num sitio, em vez de estar replicada em imensos ficheiros "duvidosos".
    Valida as permissoes dos ficheiros, pondo no minimo possivel.

    Mas, tal como o masterArt disse, um ataque por xss pode lixar-te este esquema todo :D
    Ataca esta questão depois de protegeres o codigo contra os outros tipos de ataques...
     
  9. Gurzi

    Gurzi Power Member

    Boa dica ;)

    Existem milhares de defines nessas frameworks um bocado estranhas, essa é uma das bacanas

    obrigado por partilhares!

    cumps:002:
     
  10. xuxaki

    xuxaki Power Member

    Boas!
    Estou a tentar por em pratica a técnica do define e defined, mas não percebo porquê obtenho sempre a mensagem do die ("não tem permissões para ver a página"), mesmo quando acedo através do index.php!

    Eu tenho então logo no inicio do index.php (depois do header do html):
    Código:
    <?php define('ACESSO', 1); ?>
    depois tenho a verificação da opção, ou seja:
    Código:
    if($_GET['option'] == "admin"){
    include('.../admin.php');
    }
    e logo no inicio do admin.php tenho:
    Código:
    <?php defined('ACESSO') OR die("Não tem permissões para aceder a esta página!"); ?>
    Mas vai sempre para o die! Alguém me sabe dizer porquê?
     
  11. MPalhas

    MPalhas Power Member

    tira as pelicas no ACESSO (todos eles). isso não é texto, é uma constante, por isso não leva pelicas/aspas
     
  12. stblink

    stblink Power Member

    Se usares formularios, certifica-te que não sofres SQL Injection. Senão qualquer dia vês a base de dados a afogar-se no tejo :P
     
  13. _kossak_

    _kossak_ Power Member

    o primeiro define convém que fique com as pelicas, senão dá um notice indicando que está a tentar redefinir uma constante. o define acaba por funcionar porque ainda não estava atribuido valor mas de qualquer maneira é mais correcto usar as pelicas na chamada do define.
     
  14. mascker

    mascker Power Member

  15. MPalhas

    MPalhas Power Member

    então erro meu, peço desculpa. já não uso PHP a algum tempo... mas podia jurar que eu não tinha usado pelicas quando fiz isso
     

Partilhar esta Página