Я чувствую, что вы можете получить какую-то общую информацию о предмете санитарии и ухода.
- Чтобы понять, как написать защищенный PHP-код, вам необходимо предотвратить против XSS.
- Для предотвращения использования XSS необходимо, чтобы реализовал надлежащее выходное экранирование и, возможно, потребуется внедрить санацию данных.
- Для обеспечения безопасности данных и вывода данных вы должны понять, почему это проблема и как это сделать должным образом.
Санитарная
Санитарная должно быть сделано перед сохранением данных в базу данных. Он гарантирует, что вещи, которые не должны быть сохранены в базе данных, не являются. Также полезно сделать это снова после того, как вы прочитали данные из своей базы данных, если вы что-то упустили, и ваша база данных теперь содержит что-то вредное. Как правило, если вы просто сохраняете текст, вы можете разрешить сохранение любого текста, и в этом случае санация не нужна. Но похоже, что вы храните html ...
Если вы храните html, вы, вероятно, планируете вывести его в браузеры в какой-то момент, и вы не хотите, чтобы он содержал вредоносные скрипты для ваших пользователей. Sanitizing html для удаления вредоносного javascript на самом деле очень сложно из-за многих способов вставки javascript. Для этого были написаны целые библиотеки PHP (например, wp_kses_*), и этого недостаточно, чтобы просто удалить все теги сценариев <, как предлагают некоторые ответы SO. Кроме того, вам нужно будет обновить код html sanitization, чтобы предотвратить самые новые атаки. В целом, это очень высокий риск/техническое решение. Если вы хотите пройти этот маршрут, есть некоторые решения here.
Обычно вы хотите дать своим пользователям возможность форматировать текст с помощью подмножества того, что предлагает html (например, жирный шрифт, курсив, подчеркивание и, возможно, некоторые цвета), а лучший подход - использовать более легкий язык, такой как Markdown или BBCode
Также вы должны сохранить свои поля только как текст и полностью обработать стиль в своем приложении.
Выход Экранирование
Это шаг вправо перед выводом данных. Когда вы собираете HTML-код для вывода в PHP, вам нужно преобразовать все, что еще не html, в безопасный html. Если вы используете язык шаблонов, это автоматически обрабатывается автоматически. По-моему, это самая непонятная концепция разработчиков PHP сегодня, и, к сожалению, она является одной из самых важных.Я не буду здесь, но я очень рекомендую this further reading.
Важное обновление
Этот код НЕ санитарную данные, то маскирование.
filter_var_array($row, FILTER_SANITIZE_SPECIAL_CHARS);
теперь я вижу, что смутно, слово «Фильтр» имеет такой общий смысл этого ответа и может, возможно, относятся к как обеззараживание и убежать. Я удалил его из своего ответа, чтобы помочь устранить любую путаницу.
Ваш пример - Санитарная
Я не пойду так далеко, чтобы сказать, никогда не хранить HTML в поле базы данных, но это намного сложнее, таким образом. Вам нужно решить, что ожидается и действительно. Если вы уточните свой вопрос с более подробной информацией о конкретных данных, станет ясно, какими должны быть эти ограничения.
Ваш пример - выход спасаясь
Если переменные уже содержат хорошо сформированы строки фрагмента HTML, то вы можете смело добавлять переменные, используя «» (оператор конкатенации строк) внутри открытого и закрытого тега. То, что вы поставили в своем вопросительном коде, является правильным. Тем не менее, я предпочитаю использовать прямой вывод с короткими тегами, поскольку он делает код более удобочитаемым, и в любом случае нет необходимости вставлять все в строку PHP.
<td><?= $row['tokens'] ?></td>
<td><?= $row['direction'] ?></td>
<td><?= $row['graph'] ?></td>
<td><?= $row['module'] ?></td>
Примечание: Как описано выше, путем вывода HTML вы просите клиентов доверять, анализировать и отображать его. Если эти переменные действительно содержат неверный или плохой HTML, то это проблема с вашей санитацией.
- Выходной выход должен/НЕ очищать ваши данные.
- Санитария должна/НЕ удалять ваши данные.
Это просто две разные концепции, работающие вместе.
Поскольку ваш id должен быть быть целым числом из вашей базы данных, вы можете использовать его таким образом, чтобы убедиться, что это так.
<a href='upong.php?soya=<?= (int)$row['id'] ?>Specific type</a>
Если значение не колдовать до целого (потому что произошло нечто неожиданное, которое вы не учитывали), вы в конечном итоге с 0 в вашем URL, который обычно является не то, что вредно.
Это важно, каковы ваши данные. Являются ли первые 4 поля сохранены как текст или html? Можно ли считать id целым? – Phil
Первые 4 поля сохраняются как html. Вы правы, идентификатор целочисленный. – Global
Ваш вывод из базы данных, что, по-вашему, вам нужно для «Sanitize»? – nogad