Prevenção de segurança de injeção de PHP Através do processo acima, podemos compreender os princípios e métodos de injeção de PHP. Claro, também podemos desenvolver métodos de prevenção correspondentes:
A primeira são as configurações de segurança do servidor. Já falamos sobre as configurações de segurança do servidor Windows e não as repetiremos novamente. As principais aqui são as configurações de segurança do php+mysql e as configurações de segurança do host Linux. . Para evitar a injeção de php+mysql, primeiro defina magic_quotes_gpc como On e display_errors como Off. Se for um tipo id, usamos a função intval() para convertê-lo em um tipo inteiro, conforme mostrado no código:
$id=intval($id);
mysql_query="select *from example where articieid='$id'"; Ou escreva assim: mysql_query("SELECT * FROM article WHERE articleid=".intval($id)."")
Se for um tipo de caractere, use addlashes() Filtre-o e depois filtre "%" e "_" como:
$search=addslashes($search);
$pesquisa=str_replace(“_”,”_”,$pesquisa);
$pesquisa=str_replace(“%”,”%”,$pesquisa);
Claro, você também pode adicionar código anti-injeção geral PHP:
/******************************
Descrição geral do código de segurança anti-injeção do PHP:
Determine se a variável passada contém caracteres ilegais, como $_POST, $_GET
Função:
Anti-injeção
******************************/
//Caracteres ilegais a serem filtrados
$ArrFiltrate=array("'",";","união");
//O URL para onde ir após a ocorrência de um erro. Se não for preenchido, a página anterior será padronizada.
$StrGoUrl="";
//Se existe um valor no array
função FunStringExist($StrFiltrate,$ArrFiltrate){
foreach ($ArrFiltrate as $key=>$value){
if (eregi($valor,$StrFiltrate)){
retornar verdadeiro;
}
}
retornar falso;
}
//Mesclar $_POST e $_GET
if(function_exists(array_merge)){
$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);
}outro{
foreach($HTTP_POST_VARS as $key=>$valor){
$ArrPostAndGet[]=$valor;
}
foreach($HTTP_GET_VARS as $chave=>$valor){
$ArrPostAndGet[]=$valor;
}
}
//A verificação começa
foreach($ArrPostAndGet as $key=>$valor){
if (FunStringExist($valor,$ArrFiltrate)){
echo "alert(/"Neeao prompt, caractere ilegal/");";
if (vazio($StrGoUrl)){
echo "history.go(-1);";
}outro{
echo "window.location=/"".$StrGoUrl."/";";
}
saída;
}
}
?>
/******************************
Salvar como checkpostandget.php www.devdao.com
Em seguida, adicione include("checkpostandget.php"); na frente de cada arquivo php.
******************************/
Além disso, o nome de usuário e a senha do administrador são criptografados em MD5, o que pode efetivamente impedir a injeção de PHP.
Existem também alguns cuidados de segurança que precisam ser reforçados no servidor e no mysql.
Para configurações de segurança do servidor Linux:
Para criptografar a senha, use a ferramenta "/usr/sbin/authconfig" para ativar a função de sombra de senha e criptografar a senha.
Para proibir o acesso a arquivos importantes, entre na interface de comando do Linux e digite no prompt:
#chmod 600 /etc/inetd.conf //Altera os atributos do arquivo para 600
#chattr +I /etc/inetd.conf // Certifique-se de que o proprietário do arquivo seja root
#chattr –I /etc/inetd.conf // Limitar alterações neste arquivo
Para proibir qualquer usuário de mudar para o usuário root por meio do comando su, adicione as duas linhas a seguir no início do arquivo de configuração su, ou seja, o diretório /etc/pam.d/:
Autenticação suficiente /lib/security/pam_rootok.so depuração
Autenticação necessária /lib/security/pam_whell.so group=wheel
Exclua todas as contas especiais
#userdel lp etc. excluir usuário
#groupdel lp, etc. Exclua o grupo para proibir programas suid/sgid não utilizados
#find / -type f (-perm -04000 - o –perm -02000 ) -execls –lg {} ;