No último post falamos de um caso real de XSS em plugin WordPress.
Mas o que é XSS?
Cross-site Scripting (XSS) é um tipo de ataque de injeção de código malicioso em aplicações web, classificado entre as principais vulnerabilidades.
Sempre digo que não existe bala de prata, no caso do último post o developer usou um método que poderia ajudar mas de forma errada.
Nesse post falamos de como proteger o XSS. Somente o XSS, então vamos lá.
XSS como vimos é um ataque de injeção de código, e podemos defender limpando o dado de entrada e/ou limpando o dado que vai ser impresso.
Limpando a entrada:
<form>
<input type="text" name="title" value="title" />
<input type="submit" />
</form>
$title = sanitize_text_field( $_POST['title'] );
update_post_meta( $post->ID, 'title', $title );
Neste caso use sanitize_text_field(), pois é um text field, mas tem diversas opções, como:
- sanitize_option()
- sanitize_text_field()
- sanitize_textarea_field()
- sanitize_title()
- e outros
Limpando a saída:
Como nem sempre podemos confiar no dado que entrou, temos que limpar a saída, neste caso deve ser usar:
<form>
<input type="title" name="title"
value="<?php echo esc_attr( $title ); ?>" />
<input type="submit" />
</form>
Neste caso, limpamos a saída do atributo com esc_attr pois estamos limpando um atributo de uma tag, mas temos mais opções como:
- esc_textarea
- esc_js
- esc_html
- esc_url
Pronto, estamos todos protegidos.
Vejo vocês no próximo post, talvez como se proteger de um path traversal.
Até mais….