ウェブサイトにおける最も一般的な重大な脆弱性はクロスサイトスクリプティング(XSS)です。 これにより、攻撃者は悪意のあるスクリプトを他者のページに挿入し、疑いを持たないユーザーのブラウザで実行させることができます。 ページを変更したり、機密情報を入手したり、ユーザーのIDを盗んだりすることも可能です。[lead]
テンプレートシステムはXSSに対する防御に失敗しています。Latteは、コンテキスト依存のエスケープにより、効果的な防御を備えた唯一のシステムです。[lead]
安全性の高いウェブサイトを求めるなら、Latteを使用します。[lead]
データソース: Acunetix Web Vulnerability Report
いくつかの異なるコンテキストでの変数$text
の自動エスケープの例(上のテンプレートは編集可能です):
{var $text = "O'Neill"} - テキスト内: <span>{$text}</span> - 属性内: <span title={$text}></span> - 引用符なし属性内: <span title={$text}></span> - JavaScript内: <script>var = {$text}</script>
- テキスト内: <span>O'Neill</span> - 属性内: <span title='O'Neill'></span> - 引用符なし属性内: <span title="O'Neill"></span> - JavaScript内: <script>var = "O'Neill"</script>
誇張ではありません。あなたはすでにLatte言語を知っています。すでに式を書く方法を知っています。実際、それらはPHPとまったく同じように書かれます。 したがって、Latteで物事をどのように書くかについて考える必要はありません。ドキュメントを調べる必要もありません。 別の言語を学ぶ必要はありません。PHPのように書くだけです。 Latteの構文について詳しくはこちら
<ul>
{foreach $users as $user}
<li>{$user->name}</li>
{/foreach}
</ul>
{if $post->status === Status::Published}
Read post
{elseif count($posts) > 0}
See other posts
{/if}
{$product?->getDiscount()}
{$foo[0] + strlen($bar[Bar::Const])}
{array_filter($nums, fn($n) => $n < 100)}
LatteはPHPに基づいていますが、TwigはPythonに基づいています。Latteのデザイナーは、2つの異なる規約を常に切り替える必要はありません。
たとえば、テンプレートでのfor person in people
とPHPでのforeach $people as $person
の間で。
Latteには{...}
という1つの区切り文字があるため、{% %}
と{{ }}
のどちらを使用するか考える必要さえありません。
<ul>
{foreach $foo->items as $item}
<li>{$item->name}</li>
{/foreach}
</ul>
<ul>
{% for item in foo.items %}
<li>{{ item.name }}</li>
{% endfor %}
</ul>
ユーザーはこの機能を愛しています。私たちはそれをn:属性と呼んでいます。HTML要素をラップする{if} ... {/if}
のようなペアのタグは、そのn:if
属性として書くことができます。
これにより、非常に効率的な表記が可能になります。属性にはinner-
およびtag-
プレフィックスを付けることもでき、その場合、動作はそれぞれ要素の内部または開始および終了HTMLタグに適用されます。
n:属性について詳しくはこちら
n:属性を使用する場合:
<ul n:if="count($menu) > 1" class="menu">
<li n:foreach="$menu as $item">
<a n:tag-if="$item->href" href={$item->href}>
{$item->caption}
</a>
</li>
</ul>
そして、それらを使用しない場合:
{if count($menu) > 1}
<ul class="menu">
{foreach $menu as $item}
<li>
{if $item->href}<a href={$item->href}>{/if}
{$item->caption}
{if $item->href}</a>{/if}
</li>
{/foreach}
</ul>
{/if}
Latteは次世代のテンプレートシステムです – HTMLを理解します。他のシステムが単なる文字の集まりとしか見なさない場所で、LatteはHTML要素を見ます。 これが、コンテキスト依存のエスケープ
Blade、Twig、その他のシステムがテンプレートを見る方法
░░░░░░░░░░░░░░░
░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░@yield ('description')░
░░░░░░░
░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░
@foreach ($navigation as $item)
░░░░░░░░░░░░{{$item->link}}░{{$item->title}}░░░░░░░
@endforeach
░░░░░
░░░░░░░░
░░░░░░░░░░░░{{ $appName }}░
░░░░░░░░░
░░░░░░░
░░░░░░░
Latteがテンプレートを見る方法
<!DOCTYPE html>
<html>
<head>
<title>It's all about context</title>
<meta name="description" content={include description}>
</head>
<body>
<ul class="navigation">
{foreach $navigation as $item}
<li><a href={$item->link}>{$item->title}</a></li>
{/foreach}
</ul>
<script>
var appName = {$appName};
</script>
</body>
</html>
洗練されたテンプレートの再利用と継承
Latteはフードのすぐ下に装甲バンカーを持っています。それはサンドボックスモードと呼ばれ、ユーザー自身が編集するような信頼できないソースからのテンプレートを隔離します。 タグ、フィルター、関数、メソッドなどへのアクセスを制限します。どのように機能しますか?
Latteは、作業と同時にテンプレートを最適なPHPコードにコンパイルします。したがって、純粋なPHPを作成した場合と同じくらい高速です。 コンパイルされたPHPコードは明確でデバッグが容易です。ソースファイルを変更するたびに、テンプレートは自動的に再コンパイルされます。
私たちはLatteを18年以上開発してきました – そして、それはまだ続いています!私たちが提供するライブラリは、したがって非常に成熟し、安定しており、広く使用されています。それらは多くのグローバル企業に信頼されており、多くの重要なウェブサイトが私たちに依存しています。 誰がLatteを使用し、信頼していますか?
読者は、ドキュメントの明瞭さと完全性を称賛しています。快適な読書をお祈りします。
Latteはオープンソースであり、完全に無料で使用できます。