Jump to content
rjsma

Conflito com o mysql_real_escape_string

Recommended Posts

rjsma

Boas,

Andava aqui a proteger o meu formulário da falha xss e é ai que deparo que tenho um problema com a função do real_escape_string.


if(isset($_POST['submeter'])){
$mensagem = mysql_real_escape_string($_POST['mensagem']);

$mensagem = nl2br($mensagem);
}

Ao usar a função do mysql_real_escape_string  e como é obvio ele anula uma outra função que é o nl2br. Não sabem como posso solucionar este problema?

Abraços

Share this post


Link to post
Share on other sites
brunoais

O mysql_real_escape_string() é para ser usado exclusivamente com o mysql_query(). Não tem mais usos. Usar para o quer que seja mais torna-o inconsistente e imprevisível.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
XRS

O objectivo é guardares numa BD e enviares por exemplo um E-mail ao utilizador bem formatado? Ou o objectivo é mesmo guardares na BD com essa formatação?

Share this post


Link to post
Share on other sites
rjsma

O mysql_real_escape_string() é para ser usado exclusivamente com o mysql_query(). Não tem mais usos. Usar para o quer que seja mais torna-o inconsistente e imprevisível.

EU uso o mysql_real_escape_string para prevenir no formulario o sql injection.

O objectivo é guardares numa BD e enviares por exemplo um E-mail ao utilizador bem formatado? Ou o objectivo é mesmo guardares na BD com essa formatação?

Utilizo o nl2br para guardar na base de dados as quebras de linhas (<br>) que é inserido numa textarea para depois listar esse registo.

Se não usar a função nl2br, acontece-me isto.

Texto inserido na textarea

Olá, isto é um teste...

Cumprimentos.

Na listagem do registo:

Olá, isto é um teste... Cumprimentos

Share this post


Link to post
Share on other sites
brunoais

Experimenta usar o nl2br() antes do mysql_real_escape_string()


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
rjsma

Já experimentei, anula sempre a função nl2br porque esta função utiliza tags e o mysql_real_escape_string() anula sempre essas tags

Share this post


Link to post
Share on other sites
scorch

Sim, podes substitui-los tu manualmente. Usas a função str_replace(). Vai dar ao mesmo, acho. :(


PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
rjsma

o str_replace não serve para trocar strings?  :dontgetit:

Se não usar o nl2br acontece-me isto.

Texto inserido numa textarea.

Olá, como estás?

......

......

Cumprimentos

Mas depois na listagem desta mensagem, já não lista com o mesmo formato que foi escrita na textarea.

Resultado:

Olá, como estás?............Cumprimentos

É por isso que usava o nl2br, mas agora visto que tenho aqui um conflito com  mysql_real_escape_string() que me anula a função, tenho que seguir outro caminho para mostrar o registo formatado como deve ser.

A função str_replace penso que não faz o que eu quero.

Share this post


Link to post
Share on other sites
scorch

Faz. Só tens de substituir todos os \n para <br />. :(


PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
rjsma

Faz. Só tens de substituir todos os \n para <br />. :(

O problema é que não grava nenhuma tag( nem \n nem <br/>). Se usar o nl2br  aparece-me o <br/>.

Share this post


Link to post
Share on other sites
scorch

Hum... Estranho. Mostra o código que estás a usar. 🤔


PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Share this post


Link to post
Share on other sites
rjsma

if(isset($_POST['submeter'])){

$mensagem = $_POST['mensagem'];

$mensagem = nl2br($mensagem);

.....
.....
}

E isto grava-me na bd de seguinte forma:

Olá,isto é um teste...<br />

<br />

Cumprimentos...

Share this post


Link to post
Share on other sites
brunoais

Podes mostrar mais código nesse if?


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
rjsma

Podes mostrar mais código nesse if?

Claro! :(


if(isset($_POST['submeter'])){
$utilizador = mysql_real_escape_string($_SESSION['utilizador']);
$mensagem = $_POST['mensagem'];
date_default_timezone_set('Europe/Lisbon');
$data = date("Y-m-d");
$hora = date("H:i:s");

$mensagem = nl2br($mensagem);

$consulta_inserir = mysql_query("INSERT INTO comentarios (id_url, utilizador, mensagem, data, hora) VALUES ('$id_url','$utilizador','$mensagem','$data', '$hora')");
$consulta_estatisticas = mysql_query("UPDATE utilizadores SET nr_comentarios = nr_comentarios + 1 where utilizador='$utilizador'");
$nr_comentarios = mysql_query("UPDATE favoritos SET nr_comentarios = nr_comentarios + 1 where id='$id_url'");

if($consulta_inserir < 0){
echo "Não foi possível enviar o comentário";
}
}

Share this post


Link to post
Share on other sites
mAiN_iNfEcTiOn

Olá azevedo,

Sugiro o seguinte:

if(isset($_POST['submeter'])){
$mensagem = nl2br($mensagem);
$mensagem = htmlentities($mensagem); # Isto converte os <br/> para <br/> (ou algo do género)
$mensagem = mysql_real_escape_string($_POST['mensagem']);
}

E depois, quando fores adquirir novamente da base de dados, fazes o html_entity_decode:

$mensagem = html_entity_decode($mensagem);

....

De qualquer forma, queria deixar bem claro que o problema poderá advir do facto de teres o magic_quotes_gpc() activo...

Verifica qual é o resultado do código:

var_dump( get_magic_quotes_gpc() );die();

Se der 1, é porque efectivamente estará activo e terás que fazer (através do .htaccess):

php_flag magic_quotes_gpc Off

Abraço

Share this post


Link to post
Share on other sites
rjsma

mAiN_iNfEcTiOn segui a tua sugestão com pequenos ajustes. Agora funciona correctamente.

Obrigado  :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.