Ryusuke Fuda's Tech Blog

Softweare Enginier about Web, iOS, Android.

アドレスバーでJSが動いてしまう脆弱性対処法

javascriptで値を渡すときに、htmlにencodeしていないとjsが動いてしまう。

<script type="text/javascript">

    var product_id = 

    function gotopay(){"<?php echo $_GET['product_id']; ?>";
      document.payform.action="https://aaa/shopping/products?id="+product_id+";
      document.payform.submit();
    }


</script>

となっている場合、
$_GET['product_id'] はエンコードしなければいけない。

<script type="text/javascript">

    var product_id = 

    function gotopay(){"<?php echo htmlspecialchars($_GET['product_id']); ?>";
      document.payform.action="https://aaa/shopping/products?id="+product_id+";
      document.payform.submit();
    }

</script>

この場合、
formのvalueもちゃんとエンコードする。

<form>
<input type="hidden" value="<?php echo htmlspecialchars($_GET['product_id']); ?>" name="product_id">
</form>