|
|
|
| Читал много статей и литературы по защите таблиц MySQL. Пробовал сам делать инъекции защита выстояла, но хочу сказать сразу, у меня нет опыта в этой области.
У меня вот такой вопрос. Можно ли кодом приведенным ниже исключить SQL инъекции.
Если нет, то каким образом сделать защиту лучше. Заранее большое спасибо.
<!-- Формы ввода forms.php -->
<?PHP
if(!empty($_POST))
{
include("forms2.php");
}
?>
<table width="950" align="center" border="0" cellpadding="5" cellspacing="0" >
<form enctype='multipart/form-data' method="POST" >
<tr>
<td align="center" valign="middle" class="colorText" colspan="2">
<?PHP
if (!empty ($error))
{
print "<p class=colorWarning>$error</p>";
}
?>
</td>
</tr>
<tr>
<td height="30" align="right" valign="middle" >
<span class="colorNameForm">Фамилия<font color="#FF0000">*</font></span>
</td>
<td height="30" align="left" valign="middle" >
<input size="35" type="text" class="colorEnterForm" name="family" maxlength="30" <?PHP echo "value=$family"; ?>>
</td>
</tr>
<tr>
<td height="30" align="right" valign="middle" >
<span class="colorNameForm">Телефон<font color="#FF0000">*</font></span>
</td>
<td height="30" align="left" valign="middle" >
<input size="35" type="text" class="colorEnterForm" name="phone" maxlength="50" <?PHP echo "value='$phone'"; ?>>
</td>
</tr>
</form>
</table>
<!-- Обработчик HTML-формы forms2.php -->
<?PHP
$family = trim(htmlspecialchars($_POST['family']));
$phone = trim(htmlspecialchars($_POST['phone']));
//фамилия
if (empty($family)){$error = "Пожалуйста введите вашу фамилию"; return;}
if (!preg_match("|^[\w\-\. ]+$|i", $family)){$error = "Не верный формат фамилии"; return;}
//номер контактного телефона
if (empty($phone)){$error = "Пожалуйста введите номер контактного телефона"; return;}
//соединения с MySQL сервером
include("connect.php");
//директива magic_quotes_gpc
if (ini_get("magic_quotes_gpc"))
{
$phone = stripcslashes($phone);
}
//экранируем спецсимволы mysql_real_escape_string
$phone = mysql_real_escape_string($phone);
//==============================
//заносим данные в MySQL таблицу
//==============================
//закрытие соединения с MySQL сервером
mysql_close ($db);
}
?>
|
| |
|
|
|
|
|
|
|
для: Eduard777
(16.01.2011 в 12:39)
| | Да, можно (все корректно), если поле phone является строковым, а не числовым. | |
|
|
|
|
|
|
|
для: Eduard777
(16.01.2011 в 12:39)
| | выбор в данном контексте stripcslashes вместо stripslashes как минимум сомнителен.
ну и ini_get("magic_quotes_gpc") вместо get_magic_quotes_gpc() тоже уверенности не вселяет.
А ну как переменную уберут, как и обещали? | |
|
|
|