-----------------------------------------
脆弱性の種類
------------------------------------------
クロスサイトスクリプティング
-----------------------------------------
脆弱性のあるファイル
-----------------------------------------
html/input_zip.php
-----------------------------------------
対策
-----------------------------------------
57行目
if(count($data_list) > 0) {
$func = "fnPutAddress('" . $_GET['input1'] . "','" . $_GET['input2']. "');";
↓
if(count($data_list) > 0) {
lfCheckInput();
$func = "fnPutAddress('" . $_GET['input1'] . "','" . $_GET['input2']. "');";
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
72行目
$objErr = new SC_CheckError();
↓
$objErr = new SC_CheckError($_GET);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
75-77行目
$objErr->doFunc( array("郵便番号1",'zip1',ZIP01_LEN ) ,array( "NUM_COUNT_CHECK" ) );
$objErr->doFunc( array("郵便番号2",'zip2',ZIP02_LEN ) ,array( "NUM_COUNT_CHECK" ) );
↓
$objErr->doFunc( array("郵便番号1",'zip1',ZIP01_LEN ) ,array( "NUM_CHECK", "NUM_COUNT_CHECK" ) );
$objErr->doFunc( array("郵便番号2",'zip2',ZIP02_LEN ) ,array( "NUM_CHECK", "NUM_COUNT_CHECK" ) );
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
下記の関数を追加
function lfCheckInput(){
$pattern = "/^[0-9a-z_]+$/";
foreach (array('input1', 'input2') as $key_name) {
$ret = preg_match_all($pattern, $_GET[$key_name], $matches);
if (!$ret) {
$msg = sprintf('invalid param: $_GET[%s]="%s"', $key_name, $_GET[$key_name]);
gfPrintLog($msg);
sfDispSiteError('');
}
}
}
リビジョン16816で修正
参照URL:http://svn.ec-cube.net/open_trac/changeset/16816