charly Posted February 28, 2014 at 10:44 AM Report #547053 Posted February 28, 2014 at 10:44 AM (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 Edited February 28, 2014 at 10:46 AM by charly
bioshock Posted February 28, 2014 at 10:49 AM Report #547058 Posted February 28, 2014 at 10:49 AM Se o teu problema é a segurança dos dados, não seria necessário usar essas funções manhosas se utilizasses mysqli* e não mysql (deprecated).
I-NOZex Posted February 28, 2014 at 10:55 AM Report #547060 Posted February 28, 2014 at 10:55 AM primeiro, porque guardas HTML na base de dados? é algum campo de texto livre/comentario? B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net
charly Posted February 28, 2014 at 10:59 AM Author Report #547064 Posted February 28, 2014 at 10:59 AM Porque o cliente têm um editor para lhe facilitar o trabalho na parte de inserção de conteúdos no seu web-site.
I-NOZex Posted February 28, 2014 at 11:05 AM Report #547067 Posted February 28, 2014 at 11:05 AM ok, entao agora aplica-se a regra que o @bioshock falou: se estás preocupado com segurança, usa msqli ou PDO, pois mysql_* está descontinuado á varias versões, pois tem montes de falhas de segurança... B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net
charly Posted February 28, 2014 at 11:24 AM Author Report #547073 Posted February 28, 2014 at 11:24 AM Tentei colocar o modulo em mysqli mas a gravação continua igual, é colocado junto códigos especiais de HTML.
I-NOZex Posted February 28, 2014 at 11:35 AM Report #547079 Posted February 28, 2014 at 11:35 AM The string to be escaped. Characters encoded are NUL (ASCII 0), \n, \r, \, ', ", and Control-Z. http://pt2.php.net/mysqli_real_escape_string por isso é normal o link nao tar a aparecer bem... B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net
charly Posted February 28, 2014 at 11:53 AM Author Report #547091 Posted February 28, 2014 at 11:53 AM 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>'; }
bioshock Posted February 28, 2014 at 12:01 PM Report #547097 Posted February 28, 2014 at 12:01 PM (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 February 28, 2014 at 02:12 PM by bioshock
charly Posted February 28, 2014 at 12:34 PM Author Report #547110 Posted February 28, 2014 at 12:34 PM (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 February 28, 2014 at 12:34 PM by charly
I-NOZex Posted February 28, 2014 at 03:58 PM Report #547139 Posted February 28, 2014 at 03:58 PM mysqli e pdo sao praticamente iguais (sem entrar em grandes detalhes) mysqli é uma forma de aceder orientado a objectos a bd's mysql, PDO permite aceder a varios sistemas de bd, mysql, sqlite, mssqlserver, ... B2R » Beat2Revolution v3.0b | Regista e divulga-nos beat2revolution.net
Rui Carlos Posted March 1, 2014 at 01:17 PM Report #547223 Posted March 1, 2014 at 01:17 PM 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). Rui Carlos Gonçalves
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now