Я пытаюсь обезопасить свой сайт, чтобы не быть уязвимым для SQL-инъекций или xss
Вот мой код:
//here's the form (abbreviated)
<form>
<label for="first_name" class="styled">First Name:</label>
<input type="text" id="first_name" name="first_name" value="<?php if (!empty($first_name)) echo $first_name; ?>" /><br />
//submit button etc
</form>
if (isset($_POST['submit'])) {
//gets rid of extra whitesapce and escapes
$first_name = mysqli_real_escape_string($dbc, trim($_POST['first_name']));
//check if $first_name is a string
if(!is_string($first_name)
{
echo "not string";
}
//then insert into the database.
.......
}
mysqli_real_escape_string
: я знаю, что эта функция экранирует определенные буквы, такие как \ n \ r, поэтому, когда данные будут введены в базу данных, будет ли рядом со всеми экранированными буквами '\'?
Будет ли этого сценария достаточно для предотвращения большинства SQL-инъекций? просто экранирование и проверка, являются ли данные строкой. Для целочисленных значений (например, когда пользователи вводят цены), я просто: is_numeric()
.
Как мне использовать htmlspecialchars
? Должен ли я использовать его только при отображении и отображении пользовательских данных? Или я должен также использовать это при вставке данных в базу данных?
Когда я должен использовать strip_tags
или htmlspecialchars
?
Итак, со всеми этими функциями:
if (isset($_POST['submit'])) {
//gets rid of extra whitesapce and escapes
$first_name = mysqli_real_escape_string($dbc, trim($_POST['first_name']));
//check if $first_name is a string
if(!is_string($first_name)
{
echo "not string";
}
//gets rid of any <,>,&
htmlspecialchars($first_name);
//strips any tags with the first name
strip_tags($first_name)
//then insert into the database.
.......
}
Какие функции я должен использовать для внедрения SQL и какие я должен использовать для xss?
Когда пользователь может вставить против меня сценарии xss? Когда есть форма?