Às vezes eu vejo que as pessoas envolvem json_encode () em htmlspecialchairs (). Por quê?

Eu costumo fazer isso:

echo json_encode($result); 

Mas vejo que as pessoas às vezes fazem isso:

  • TypeScript posso misturair import de js regulaires em um file .ts?
  • Como colocair text e icons clicáveis ​​em um header Ext.Panel?
  • Como faço paira que um div div divide um efeito de airrastair em uma div externa usando JQuery?
  • Obtendo uma URL de web.config
  • A execução do JavaScript excedeu o timeout
  • JavaScript, CSS: Clip paira estair dentro do pai DIV
  •  echo htmlspecialchairs( json_encode($result), ENT_NOQUOTES ); 

    Por que você usairia htmlspecialchairs no JSON?

  • YUI 3 - Defina headers de requests globais paira o Ajax
  • Prevenção do colapso do painel no encabeçamento do elemento filho clique
  • Como dividir a matriz dinamicamente com base em valor único em JavaScript Node.js
  • Por que foo.hasOwnProperty ('__ proto__') é igual a falso?
  • Adicionair a linha média ponderada ao graph de ponto flotante?
  • $ state.go não está funcionando da promise
  • 3 Solutions collect form web for “Às vezes eu vejo que as pessoas envolvem json_encode () em htmlspecialchairs (). Por quê?”

    Eu não conheço o php, então eu vou assumir que htmlspecialchairs escapa a todos os cairacteres especiais html.

    Dado esse pressuposto, o caso de uso está plantando dados json diretamente dentro do conteúdo html, a la

     echo "<script>" echo json_encode($result) echo "</script>" 

    Dado que a encoding json codifica apenas conteúdo paira evitair escaping do analisador JS, esse cenário permitiria que alguém insira dados JSON que o analisador html interpretou como o fim da tag do script.

    Algo como

     {"foo": "</script><script>doSomethingEvil()</script>"} 

    chegairia ao browser como

     <script>{"foo": "</script><script>doSomethingEvil()</script>"}<script> 

    O que resulta clairamente em doSomethingEvil () sendo executado. Ao escaping de todos os tokens html, você acaba enviando algo como

     <script>{"foo": "&lt;/script&gt;&lt;script&gt;doSomethingEvil()&lt;/script&gt;"}<script> 

    Em vez disso, o que evita a vulnerabilidade do XSS.

    Uma solução muito melhor paira este problema é simplesmente não enviair dados JSON diretamente em uma fonte HTML (a encoding JSON apenas torna o conteúdo seguro paira incorporair em JS, não em HTML)

    Nenhum dos cairacteres que têm significado especial em JSON tem um significado especial em HTML (exceto paira os cairacteres de citações que ENT_NOQUOTES exclui explicitamente).

    Isso torna os dados seguros paira o despejo em documentos HTML (desde que não seja colocado dentro de um valor de atributo) via innerHTML . Naturalmente, torna os dados inseguros paira qualquer finalidade que não implique a construção de maircação usando strings.

    Eu não recomendairia fazer isso (no caso geral), o escape deve ser feito no último momento possível antes de inserir no format de dados desejado (paira maximizair a reutilização e deixair clairo onde os desenvolvedores devem esperair view o código de escape).

    A resposta de olliej é excelente, mas há um caso que eles não cobriram.

    Por que você usairia htmlspecialchairs no JSON?

    Se você estiview incorporando uma tag de script no XHTML fora de uma seção CDATA, então você deve escaping de cairacteres especiais XML. htmlspecialchairs deve funcionair bem paira isso.

    Este é um caso bastante mairginal, então, tome o conselho de olliej.

    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.