Jump to content

Recommended Posts

Posted (edited)

Olá pessoal, estou a ter alguns problemas na gravação de conteudo que vem de um POST por parte de um editor em JS. Recebo a informação toda direitinha, mas quando passo pelo mysql_real_escape_string para o colocar no mysql_query o sistema escreve algo como:

<div>empresa S.A.</div><div><br></div><div>Z.I. Vagos - Apartado XX</div><div>XXXX-XXX Vagos</div><div>Portugal</div><div><br></div><div>Tel. +351 234 799 200</div><div>Fax +351 234 799 201</div><div><br></div><div><a href="\"mailto:geral@dominio.com\"" title="\"\"" target="\"\"">geral@dominio.com</a></div><div><br></div><div>GPS</div>

Quando é apresentado no front-end, o link como é apresentado, não funciona.

Este problema só me acontece quando coloco o website a funcionar no lado do cliente, no meu servidor, tudo funciona sem problemas, assim como o codigo é gravado na BD corretamente, não com essa tralha toda no meio.

Alguma alma sabe o porquê de isto acontecer, e de evitar isto de uma vez por todas?

A imagem do que deveria aparecer no CODE

T3bO4b9.png

Edited by charly
Posted

Passei tudo a mysqli, mas o erro continua.

$query = sprintf("UPDATE %s_articles SET title_1 = '%s', text_1 = '%s', title_2 = '%s', text_2 = '%s', title_3 = '%s', text_3 = '%s', title_4 = '%s', text_4 = '%s', title_5 = '%s', text_5 = '%s', title_6 = '%s', text_6 = '%s', title_7 = '%s', text_7 = '%s', title_8 = '%s', text_8 = '%s', title_9 = '%s', text_9 = '%s', title_10 = '%s', text_10 = '%s', category = '%s', published = '%s', code = '%s', time = '%s' WHERE id = '%s'",
 $configuration["mysql-prefix"],
 $mysqli->real_escape_string($_POST["mod_edit_article_title_1"]), $mysqli->real_escape_string($_POST["mod_editor_1"]),
 $mysqli->real_escape_string($_POST["mod_edit_article_title_2"]), $mysqli->real_escape_string($_POST["mod_editor_2"]),
 $mysqli->real_escape_string($_POST["mod_edit_article_title_3"]), $mysqli->real_escape_string($_POST["mod_editor_3"]),
 $mysqli->real_escape_string($_POST["mod_edit_article_title_4"]), $mysqli->real_escape_string($_POST["mod_editor_4"]),
 $mysqli->real_escape_string($_POST["mod_edit_article_title_5"]), $mysqli->real_escape_string($_POST["mod_editor_5"]),
 $mysqli->real_escape_string($_POST["mod_edit_article_title_6"]), $mysqli->real_escape_string($_POST["mod_editor_6"]),
 $mysqli->real_escape_string($_POST["mod_edit_article_title_7"]), $mysqli->real_escape_string($_POST["mod_editor_7"]),
 $mysqli->real_escape_string($_POST["mod_edit_article_title_8"]), $mysqli->real_escape_string($_POST["mod_editor_8"]),
 $mysqli->real_escape_string($_POST["mod_edit_article_title_9"]), $mysqli->real_escape_string($_POST["mod_editor_9"]),
 $mysqli->real_escape_string($_POST["mod_edit_article_title_10"]), $mysqli->real_escape_string($_POST["mod_editor_10"]),
 $_POST["mod_edit_article_select"],
 $publish,
 $mysqli->real_escape_string($_POST["coding"]),
 strtotime($_POST["date"]),
 intval($_REQUEST['i']));

 if ($mysqli->query($query)) {
  // MENSAGEM APRESENTADA QUANDO GRAVADO COM SUCESSO
  printf("<p>%s</p>", $language["article"]["save_sucess"]);
  print '<script type="text/javascript">setTimeout(function() {goTo(\'?page=edit-article-selection\');}, 2000);</script>';
 } else {
  // MENSAGEM APRESENTADA QUANDO OCORRE ERRO AO GRAVAR
  printf("<p>%s</p>", $language["article"]["save_failure"]);
  print '<script type="text/javascript">setTimeout(function() {back();}, 3000);</script>';
 }
Posted (edited)

Não era a isso que me referia..

Não precisas da função real_escape_string para inibir SQLinjections. Se utilizares parâmetros ficas 100% seguro.

$query = $db->prepare("UPDATE table SET name = ? WHERE id = ?");
$query->bind_param("si", $name, $id); // si = string ; integer
$query->execute();

if($query->affected_rows() > 0){
  /* Sucesso..*/
}

De salientar que isto serve para SQLinjections e não para XSSinjections.

Para os ataques via script ou utilizas um http://htmlpurifier.org/ ou uma outra função não tão boa mas que talvez te chegue para as tuas necessidades.

strip_tags($content)

Se a utilizares, no output de qualquer string da base de dados deves utilizar:

htmlspecialchars(stripslashes($content), ENT_QUOTES)
Edited by bioshock
Posted (edited)

Utilizei só parte, neste caso usei:

stripslashes($content)

e deu para o gasto!

Pelo que percebi terei que passar tudo para mysqli ou pdo, terei de ver qual aquele que melhor se irá aplicar ás minhas necessidades.

Obrigado pela vossa ajuda 😉

Edited by charly
Posted

Tendo em conta que o teu problema dependia do sistema em que estava a correr, talvez o problema esteja na configuração da opção magic_quotes_gpc. Ainda assim, o ideal é usares prepared statements, como sugerido anteriormente.

Cuidado com os filtros que usas para XSS, pois assumo que queiras que o editor gere HTML. Assumindo que aquele editor está no backend, não me parece que seja muito problemático o XSS (até porque o administrador pode querer fazer coisas esquisitas com Javascript que são facilmente apanhadas pelos filtros).

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.