Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho uma página que tem o seguinte código (resumido):
<?php include "../injection.php"; ?>
<?php
if (isset($_POST['ok'])) {
//error_reporting(0);
if ($rowConf[1] == 'ativado') { //$rowConf[1] está como ativado
$var = $_POST['banco']; //variável que está como DROP
echo $teste = trataInjectVar($var);
}
exit;
}
Lembrando que $rowConf[1] tem como valor o seguinte: ativado.
Acontece que isso não está funcionando. Somente funciona se eu tirar aquela linha do include e inserir todo o conteúdo do arquivo injection.php. Alguém tem alguma idéia do erro que estou cometendo?
Obrigado!
Acabei de tentar isso e não funcionou também...
Continua com a mesma mensagem de erro:
Fatal error: Call to undefined function trataInjectVar() in /usr/local/apache2/htdocs/pecas/admin/index.php on line 163
Onde index.php é essa página que eu postei antes.
Pois é gente, dá raiva viu?!!!
Ainda não resolvi, tive que colocar o código do arquivo inteiro ali dentro, daí quando eu precisar para outra página vou ter que copiar e colar tudo!
Você estava chamando o arquivo de forma errônea, o arquivo injection.php estava na mesma pasta do arquivo index?
../injection.php
Você está voltando uma pasta e incluindo o arquivo injection.php que está uma pasta antes do index.php
Geralmente index.php é o arquivo que fica na Raiz.
e você volta uma pasta para pegar o arquivo injection.php
creio que está errado isto.
Estrutura de pastas1
>
www/
|
+-testes/
|-------+ imagens/
+ INDEX.PHP
+ INJECTIONS.PHP
Se estiver deste modo. O include deve ser feito apenas assim.
include("injection.php");
O arquivo index.php está na pasta /ADMIN
O arquivo injection.php está na pasta /INCLUDES
Tentei alterar o caminho, mas daí dá outro erro, esse informando realmente que não foi possível encontrar o arquivo, que o include falhou e tal.
E agora?
Posta todo arquivo Index e o Injection ae =D.
Vou postar, mas o index é meio grandinho:
<?php include("../includes/head.php"); ?>
<?php include("../includes/conexao.inc.php"); ?>
<style type="text/css">
.validation-advice {
color: #ff0000;
font-weight: normal;
font-size:12px;
font-family:"Trebuchet MS", "VAGRounded BT", Arial;
}
div#conteudo .required {
color: #000000;
}
table tr th.cter, .cter {
text-align: center;
}
table.disptagbanner {
background-color: #dddddd;
width: 100%;
}
table div.disptagempty {
padding:10px;
border: 1px dashed;
margin: 10px;
background-color: #e1f9c8;
}
img.icon {
border: 0px;
background-color: #009900;
background-image: url(images/bg_rounded.gif);
background-repeat: no-repeat;
}
body {
font-weight: normal;
font-size:14px;
font-family:"Trebuchet MS", "VAGRounded BT", Arial;
}
a:link {
text-decoration: none;
}
a:visited {
text-decoration: none;
}
a:hover {
text-decoration: none;
}
a:active {
text-decoration: none;
}
</style>
<script src="../js/prototype.js" type="text/javascript"></script>
<script src="../js/validation.js" type="text/javascript"></script>
<script src="../js/validation-custom.js" type="text/javascript"></script>
</head>
<?php
$rowConf = mysql_fetch_array(mysql_query("SELECT email,injection FROM configuracoes"));
?>
<body onLoad="form1.mail.focus();">
<div align="center">
<h1 style="width:50%">SSP - Sistema de Solicitação de Peças </h1>
</div>
<form id="form1" onSubmit="return true;" onMouseOut="document.getElementById('ok').style.display = 'none'" method="post" action="<?php $_SERVER['PHP_SELF']; ?>" class="tjform">
<table width="55%" border="0" align="center" cellspacing="5">
<tr>
<th colspan="2" class="hl"><div align="center"><strong>Opções de gerenciamento </strong></div></th>
</tr>
<tr>
<td colspan="2" class="hl"> </td>
</tr>
<tr>
<td colspan="2" class="hl">Geral:</td>
</tr>
<tr>
<td width="40%" align="right" valign="top">E-mail do destinatário:</td>
<td width="70%"><input name="mail" type="text" class="required" id="form1_mail" title="Este campo não pode ficar em branco!" value="<?php echo $rowConf[0]; ?>" size="35" /></td>
</tr>
<tr>
<td align="right">Detectar PHP Injection: </td>
<td><label>
<input name="inject" type="radio" value="ativado" <?php if ($rowConf[1] == 'ativado' ) echo 'checked="checked"'; ?>>
Sim </label>
<label>
<input name="inject" type="radio" value="desativado" <?php if ($rowConf[1] == 'desativado' ) echo 'checked="checked"'; ?>>
Não</label></td>
</tr>
<tr>
<td colspan="2"></td>
</tr>
<tr>
<td colspan="2" align="center"><hr /></td>
</tr>
<tr>
<td colspan="2" align="center"> </td>
</tr>
<tr>
<td colspan="2" align="left">Conexão:</td>
</tr>
<tr>
<td width="40%" align="right" valign="top">Host:</td>
<td width="70%"><input name="host" type="text" value="<?php echo $admin_host; ?>" class="required" id="form1_host" title="Preencha o host!" size="35" />
<a href="#" onClick="java script:form1.host.value='<?php echo $_SERVER['SERVER_NAME']; ?>';"> « <?php echo $_SERVER['SERVER_NAME']; ?></a> </td>
</tr>
<tr>
<td width="40%" align="right" valign="top">Database:</td>
<td width="70%"><input name="banco" type="text" value="<?php echo $admin_database; ?>" class="required" id="form1_banco" title="Preencha o nome do banco de dados!" size="35" /></td>
</tr>
<tr>
<td width="40%" align="right" valign="top">Usuário:</td>
<td width="70%"><input name="usuario" type="text" value="<?php echo $admin_usuario; ?>" class="required" id="form1_usuario" title="Preencha o nome do usuário no banco de dados!" size="35" /></td>
</tr>
<tr>
<td width="40%" align="right" valign="top">Senha:</td>
<td width="70%"><input name="senha" type="password" value="<?php echo $admin_senha; ?>" id="form1_senha" size="35" /><input name="ok" type="hidden" value="ok"></td>
</tr>
<tr>
<td colspan="2" align="center"><hr /></td>
</tr>
<tr>
<td colspan="2" align="center"> </td>
</tr>
<tr>
<td colspan="2" align="center"><button type="submit" value="Salvar" title="Salvar"><img src="../images/ok.png" width="24" height="24" style="vertical-align: middle;" /> Salvar</button>
<button type="submit" value="Restaurar" title="Restaurar"><img src="../images/restaurar.png" width="24" height="24" style="vertical-align: middle;" /> Restaurar</button></td>
</tr>
<tr>
<td colspan="2" align="center"> </td>
</tr>
<?php
if (isset($_GET['conf'])) {
if ($rowConf[1] == 'ativado') {
trataInjectArray($_GET);
}
?>
<tr>
<td colspan="2" align="center"><div id="ok" style="border:thin dashed; border-color:#0099CC; width:40%;"><img src="../images/ok.png" width="24" height="24" style="vertical-align: middle;" /> Configurações salvas.</div></td>
</tr>
<?php } ?>
<tr>
<td colspan="2"></td>
</tr>
<tr>
<td colspan="2"></td>
</tr>
</table>
<p> </p>
</form>
<script type="text/javascript">
<!--//
new Validation('form1');
//-->
</script>
</body>
</html>
<?php
if (isset($_POST['ok'])) {
//error_reporting(0);
if ($rowConf[1] == 'ativado') { //$rowConf[1] está como ativado
include "../injection.php";
trataInjectArray($_POST);
}
//Salva email e inject
mysql_query("UPDATE configuracoes SET email = '".$_POST['mail']."', injection = '".$_POST['inject']."' WHERE id = 1 ");
//Grava no arquivo
$string = '<?php ';
$string .= "\$admin_host='";
$string .= $_POST['host'];
$string .= "';\$admin_database='";
$string .= $_POST['banco'];
$string .= "';\$admin_usuario='";
$string .= $_POST['usuario'];
$string .= "';\$admin_senha='";
$string .= $_POST['senha']."';";
$string .= ' ?>';
$abre = fopen("../includes/confs.php", "w+");
$escreve = fwrite($abre, $string);
fclose($abre);
echo '<script type="text/javascript">window.location.href=\'index.php?conf=save\';</script>';
}
?>
E agora o injection.php:
<?
// TRATA UM ARRAY
function trataInjectArray($postOrGet) {
foreach ($postOrGet as $index=>$posted) {
$indice = $index;
$erro[$index] = inject($posted);
if ($erro[$index] == 1) {
echo 'Tentativa de PHP Injection na variável <font color="red">'.strtoupper($indice).'</font> com o conteúdo <font color="red">'.strtoupper($posted).'</font><br />';
exit;
}
}
}function trataInjectVar($var) {
$erro = inject($var);
if ($erro == 1) {
echo 'Tentativa de PHP Injection com <font color="red">'.strtoupper($var).'</font><br />';
exit;
}
return false;
}function inject($txt) { //verifica sql injection
$inject=0;
$badword = array("select","insert","update","delete","drop","destroy","alter","truncate");
for($i = 0; $i < sizeof($badword); $i++) {
if(substr_count($txt,$badword[$i]) != 0) {
$inject=1;
break;
}
}
return $inject;
}
?>Hehehehe!
Valeu!
PS: Acho que vale uma explicação do que quero fazer. Criei um sitezinho aqui pro trabalho e estou fazendo esta página de configurações gerais. Nela você pode trocar as conexões (host, database, user, pwd) e também pode trocar o e-mail da pessoa responsável pelas mensagens de alerta, bem como ativar o modo de filtragem de PHP Injection para todo o site.
O arquivo index.php está na pasta /ADMIN
O arquivo injection.php está na pasta /INCLUDES
Tentei alterar o caminho, mas daí dá outro erro, esse informando realmente que não foi possível encontrar o arquivo, que o include falhou e tal.
E agora? http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif
<?php include "../injection.php"; ?>
<?php
if (isset($_POST['ok'])) {
//error_reporting(0);
if ($rowConf[1] == 'ativado') { //$rowConf[1] está como ativado
$var = $_POST['banco']; //variável que está como DROP
echo $teste = trataInjectVar($var);
}
exit;
} http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif
se index.php está em \admin
e injection.php está em \includes
por quê está fazendo
include "../injection.php"; ???
nunca encontrará o arquivo, pois o caminho está errado..
a partir da pasta a partir de qualquer pasta que esteja 1 nível abaixo da pasta raíz, para incluir algum arquivo dentro da pasta "/admin"
include "../admin/injection.php";
observações:
1. tags PHP
está abrindo e fechando as tags PHP sem necessidade:
<?php include "../injection.php"; ?>
<?php
if (isset($_POST['ok'])) {
se o conteúdo seguinte é PHP, então, não precisa fechar e abrir novamente, pois ao fazer isso estará enviando uma linha vazia e gerando um cache no header output
correção
<?php
include "../admin/injection.php";
if (isset($_POST['ok'])) {
obs: existem diversos outros erros graves nos códigos.
portanto, tenha ciência de que outros tipos de erros podem acontecer
Obrigado pela ajuda de vcs! Infelizmente estou fora do trabalho e devo voltar só em uma ou duas semanas, mas queria dizer o seguinte:
E gostaria imensamente de saber quais são as outras falhas graves que foram apontadas. Quero evoluir, aprender e fazer códigos cada vez melhores e mais seguros. Portanto se puder realmente me indicar o que está errado ou que possa vir a comprometer alguma coisa, eu agradeceria imensamente!
Muito obrigado mais uma vez pelas dicas e paciência. Sei que as vezes é complicado analizar o código dos outros ainda mais se vier todo cheio de falhas!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Valeu gente!
tenta tirar os parênteses.