Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Uma função que eu criei pode ser acessada diretamente e externamente? Se sim, como faço para impedir isso.
por exemplo:
tenho uma função, aonde eu uso o mysqli e trato as variáveis adequadamente, de forma segura.
function insere_dados_no_mysql($recebe_dados_para_inserção){
# a função não pode ser chamada diretamente, apenas a página aonde ela está pode ser invocada
}
Minha preocupação é a seguinte:
-Se alguém for capaz de invocar essa função diretamente por chamada externa como por exemplo "javascript ajax", essa pessoa pode simplesmente inserir dados na minha base de dados, sem estar autenticado.
-Eu procurei sobre o assunto em sites de busca, mas não encontrei nada específico sobre isso, por isso gostaria de uma ajuda aqui do fórum, se alguém puder me dizer se essa chamada é possível, ou se o PHP nativamente impede esse tipo de chamada em função da segurança, etc.É impossível chamar, de forma externa, uma função diretamente do PHP. Entretanto, é possível executar/requisitar de forma indireta, que é o caso de acesso a URL e WebServices.
Se, de alguma forma, você utiliza a função ao acessar uma URL e essa URL não está protegida por autenticação ou até um básico request_referrer, a sua função será executada externamente.
Eu penso que seja exatamente assim Gabriel, mas não achei a documentação aonde diz que é exatamente assim que ela se comporta, e por isso fiquei na dúvida.
Até aonde eu entendo (sou principiante), um atacante consegue se infiltrar principalmente por falhas no recebimento de informação externa (quando o programador não higieniza/valida no lado do servidor get, post, quando estes vão para o banco de dados, ou aparecem como "echo get ou post" na página, em geral quando não higieniza adequadamente as informações que chegam externamente ao servidor)
imagino que:
function minha_funcao_recebe_GET_da_url_por_exemplo($recebe_um_perigo_indireto_pois_atacante_injeta_na_url_algo_que_vai_para_dentro_da_funcao){
# cuidado com a lógica
}
porém:
function minha_funcao_dentro_da_pagina_invoca_na_logica_interna_sem_interacao(){
# uma atacante não pode fazer nada aqui, se eu não pegar informações externas como por exemplo um $_GET
}
Cara, eu desconfio que com Headers você consiga definir esse tipo de regra com eficiência, mas eu ainda to estudando sobre eles e não posso te afirmar com 100% de certeza, mas pra evitar isso depende de como você ta fazendo essa inserção e a transação dos dados, exemplo:
Vamos supor que você possui um form na página (form.php) e que esse form vai ter um action="" em outra página: