##本文にてApexサーバ側のデータをVisualforce画面に表示する時の脆弱性を整理する。
##Apexサーバ側のデータをVisualforce画面に表示する方法
◆従来のJSを利用すること
つまり、VisualforceのHiddenタグを定義して、JSやjQueryを利用して値を取得する
testVFPage1.html
<apex:inputHidden id="testId" value="{!testApexValue}" />
<script>
function getValue() {
console.log($('id$=testId').val());
}
</script>
◆Visualforce独自な値取得方法を利用すること
つまり、VisualforceのHiddenタグを定義しなくても、{!$component.XXXX}を利用してサーバ側のデータが参照できること。
testVFPage2.html
<script>
function getValue() {
// Hidden項目を定義しない
console.log('{!$component.testApexValue}');
}
</script>
##脆弱性になるパターン
◆上記の2つの方法は特に脆弱性にならないです。
◆上記の2つコードを混ぜて実装する場合、脆弱性になる!!!
testVFPage3.html
<!-- Hidden項目を定義する -->
<apex:inputHidden id="testId" value="{!testApexValue}" />
<script>
function getValue() {
console.log('{!$component.testApexValue}');
}
</script>
##解決案
一つの項目について、Hiddenタグと{!$component.XXXX}を同時に利用しないように注意しましょう。
・Hiddenを定義する場合、JSの中に{!$component.XXXX}を利用しないこと。従来のJSを利用して値を取得すること。
・JSの中に{!$component.XXXX}を利用する場合、Hiddenを定義しないこと。