pdo fetchВсе с htmlspecialchars - защита js инъекция - PullRequest
0 голосов
/ 25 апреля 2020

Таким образом, мой веб-сайт позволит пользователям сохранять <script>alert("hey");</script> практически в любом поле, а затем, когда я его отредактирую, будет отображаться предупреждение, а это не должно. Читая об этом, кажется, что вы должны использовать htmlspecialchars при выборе и рендеринге данных.

У меня есть API-слой, где я выбираю данные и возвращаю json, который затем отображается с помощью jsrender.

Вот пример моего запроса и API:

$return = ["list",[]];
$sql = "SELECT * FROM `News`;"
if ($stmt = $GLOBALS['mysqli']->prepare($sql)) {
        if ($stmt->execute($param)) {
            $list = $stmt->fetchAll(PDO::FETCH_ASSOC);
            $return["list"] = $list ;
        }
}

header('Content-Type: application/json');
echo json_encode( $return);

Мои шаблоны выглядят примерно так:

<div class="card-header  py-1 px-2">
        {{:Comment}}
</div>

В моем API, где бы я поместил htmlspecialchars?

1 Ответ

2 голосов
/ 25 апреля 2020

Он должен быть закодирован в месте непосредственно перед тем, как он будет преобразован в HTML, и, поскольку вы делаете это не в PHP, а на самом деле в JavaScript, вы должны делать это там (последовательно).

(Если вы вместо этого закодируете его со стороны PHP, вы должны помнить, что этот текст только предназначен для отображения, в противном случае вы получите двойное кодирование, как только вы, например, передать его другому методу API.)

В JSRender для этого есть тег {{>...}} (вместо {{:...}}). Подробнее см. В документах .

<div class="card-header  py-1 px-2">
        {{>Comment}}
</div>
...