Por que devo usar o esc_url?


12

Essa coisa dificulta minha codificação. O codex do Wordpress justifica o uso do esc_url falando vagamente sobre segurança. Mas vale realmente a pena?

Por exemplo, qual é o importante e prático benefício de segurança usando

<?php echo esc_url( home_url( '/' ) ); ?>

ao invés de

<?php echo home_url() ?>

PS: Não estou falando sobre desenvolvimento de temas, mas sobre um site específico.

Respostas:


12

Se você verificar a documentação sobre Validação de Dados , tem o seguinte a dizer sobre a função:

Sempre use esc_url ao limpar URLs (em nós de texto, nós de atributo ou em qualquer outro lugar). Rejeita URLs que não possuem um dos protocolos fornecidos na lista de permissões, [...] elimina caracteres inválidos e remove caracteres perigosos.

Aí está - benefício prático de segurança. Protocolo válido, sem caracteres obscuros.

A resposta sobre a necessidade é firmemente sim . Escapar da saída é a prática de segurança mais básica.


2
Com todo o respeito, não vejo como o link doméstico, por exemplo, pode representar um risco à segurança. Talvez essas diretrizes sejam para criação de temas e não se apliquem a códigos "particulares"? Afinal, pode ser melhor codificar o endereço residencial e outros links em html e não usar php, se houver riscos de segurança?
IXN 12/09/15

9
É muito mais produtivo aplicar práticas de segurança de maneira consistente e universal, do que debater se cada caso vale a pena. :)
Primeiro,

7
Por outro lado, um recurso sugerido pelo Codex estabelece a Regra No. 3: Confie no WordPress . Isso parece desaconselhar as funções principais do wp como home_url(), se usadas em seu contexto apropriado. De acordo com essa recomendação, eu esperava home_urlrealizar sua própria higienização.
Franco

3

bem, todas as entradas do usuário devem ser higienizadas ... Se o URL que você injeta não for do usuário (por exemplo, configuração do site por alguém em quem você confia totalmente, valores codificados), você pode se livrar do esc-url.

mas se eu pudesse injetar esse URL no seu site, poderia injetar facilmente o código js ou o código de redirecionamento ... ou mesmo o código do servidor em algumas situações.

isso pode levar ao seqüestro de sessões e ao roubo de contas de usuários e outras opções ruins.

Editar:

No seu exemplo, esc_url( home_url( '/' ) );
ele operou com um valor semi-codificado! portanto, esc_urlpode ser eliminado.
Dito isto, ainda não vejo por que incomodar as distinções entre quando existe uma ameaça e quando não existe e geralmente sugeriria manter esc_url () para todos os valores.


3
"A configuração do site por alguém em quem você confia" ainda é literalmente uma entrada do usuário. :)
Primeiro

@ Primeiro, sim, estou com você, mas ele ficou tão "enojado" usando esc_url, fui um pouco mais perdoador.
21315 Tomer W

2

Outras coisas que você deve ter em mente esc_url()são: <a href="SANITIZE_THIS_URL">your_text</a>.se você usar o URL na saída HTML, como um atributo href para um link ou um atributo src para um elemento de imagem, você deve usar esc_url().

esc_url_raw()é para outros casos em que você deseja um URL limpo, mas não deseja que as entidades HTML sejam codificadas. Portanto, qualquer uso não HTML (DB, redirecionamento) usaria isso.

A esc_url_raw()função fará o mesmo esc_url(), mas não decodificará as entidades, o que significa que não substituirá & por & # 038 e assim por diante. Como Mark apontou, é seguro usar esc_url_raw()em consultas de banco de dados, redirecionamentos e funções HTTP, como `wp_remote_get () 'para obter mais informações sobre esc_url_raw ()


1

esc_url é usado para produzir um HTML válido (não para limpar a entrada). Você deve usar isso sempre que não tiver 100% de certeza de que o que deseja gerar é um HTML válido para esse contexto.


Toda a família de funções de escape é explicitamente desinfetante.
Rarst
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.