

PHPでformを作成しているのですが、input属性をprint関数で表示するにはどうすれば正しいのでしょうか。

[code]

    <?php
    print '<input type="hidden" name="argmt_id" value="'.$r2['argmt_id'].'">';
    ?>
    
    <?php
    print "<input type='hidden' name='argmt_id' value='".$r2['argmt_id']."'>";
    ?>
    
[/code]

よろしくお願いします。


CC BY-SA 3.0
2016-06-22T03:51:38.717
26933
2016-06-22T09:11:56.517
2016-06-22T04:00:24.830
8000
15279
question
php
PHP printと引用符の使い方


どちらも同じですが  
ダブルクォートで囲むhtmlを出力するスタイルでよろしいかと思います。

<http://yutaka.hatenablog.jp/entry/2013/06/01/010304>


CC BY-SA 3.0
2016-06-22T04:06:06.997
26935
2016-06-22T04:06:06.997
5839
26933
answer


HTML の文法上ではタグの属性値はシングルクォートでもダブルクォートでもどちらで括っても構わないことになっています。

  * [8.1.2.3 Attributes - 8 The HTML syntax - HTML5](https://www.w3.org/TR/html5/syntax.html#attributes-0)
  * [4.4 Attributes - HTML syntax - HTML5](https://www.w3.org/TR/html-markup/syntax.html#syntax-attributes)

> attribute values can contain text and character references, with additional
> restrictions depending on whether they are unquoted attribute values,
> single-quoted attribute values, or double-quoted attribute values.

したがって単にHTMLをレンダリングして表示するだけなら、どちらであろうと機能的には差はありません。

**しかしセキュリティ面まで考慮するならば、次に挙げるエスケープ処理を行うべきです。**

  1. HTMLタグの属性値は必ず `"` ダブルクォートで括る
  2. `<` `>` `&` 等のHTMLで特別に扱われる文字をHTMLエンティティ `&lt;` `&gt;` `&amp;` 等に置換する
  3. HTMLタグ属性値の `"` で括られた属性値の中にある `"` をHTMLエンティティ `&quot;` に置換する

例示されたソースの `$2['argmt_id']`
に何が入るのかはわかりませんが、HTMLタグの入力を許可しない前提ならば、必ず上記のエスケープ処理を施してください。

セキュリティ対策は自力で行うよりは既存の著名なフレームワークに頼る方が安全で良いのですが、どうしても自力で実装しなければならない事情があるのであれば、一例として次のような
function を定義した上で、動的にhtmlを生成する箇所すべてにエスケープ処理を施すようにするのが良いでしょう。

[code]

    function xssafe($data, $encoding='UTF-8')
    {
        return htmlspecialchars($data, ENT_QUOTES | ENT_HTML5, $encoding);
    }
    
    ...
    
    print '<input type="hidden" name="argmt_id" value="' . xssafe($r2['argmt_id']) . '">';
    
[/code]

参考URL：

  * [htmlspecialchars - PHP](https://www.php.net/manual/ja/function.htmlspecialchars.php)
  * [IPA 安全なウェブサイトの作り方](https://www.ipa.go.jp/security/vuln/websecurity.html)
  * [PHP セキュリティに関するチートシート](https://jpcertcc.github.io/OWASPdocuments/CheatSheets/PHPSecurity.html) ※こちらは作成中で未完成の模様


CC BY-SA 3.0
2016-06-22T09:11:56.517
26948
2016-06-22T09:11:56.517
2023-11-17T20:01:02.963
-1
10492
26933
answer