Как удалить добавленные вручную обратные слеши в SQL-инъекциях?
Я использую MySQL и PHP для управления своими данными на моем сайте.
У меня есть параграф, напечатанный в формате TeX, в котором так много математических формул. Я хочу вставить в свою базу данных и получить то же самое в другом месте.
При получении я использую mathjax для отображения математической части. Проблема при вставке данных.
Когда я вставляю данные
$\int f d\mu $ ( Note that this '\' is required to run the math formula)
Я получаю вставленные данные как
$\\int f d \\mu $
Там две обратные косые черты вместо одной.
Как предотвратить обратную косую черту, которая добавляется каждый раз с добавленной вручную обратной косой чертой (что необходимо).
Будет ли stripslashes()
помощь или любые другие решения?
Заранее спасибо.
<form action="" method="POST">
<input type="hidden" name="id" value=<?php echo $print->Id; ?> >
<table class="speaker-abstract" style="width:49%; float:left;">
<tr>
<th> Update the Abstract Details Here </th>
</tr>
<tr>
<td>
<label> Title of the Talk </label>
<input style="width:95%" type="text" name="title1" value="<?php echo $print->title_of_the_talk1; ?>">
</td>
</tr>
<tr>
<td>
<label> Abstract of the Talk (Type in TeX format) </label>
<textarea style="width:95%" name="abstract1" rows="10" ><?php echo $print->Abstract1; ?></textarea>
</td>
</tr>
</table>
<table class="speaker-abstract" style="width:49%; float:left;">
<tr>
<th> If any other, update the Abstract Details Here </th>
</tr>
<tr>
<td>
<label> Title of the Talk </label>
<input style="width:95%" type="text" name="title2" value="<?php echo $print->title_of_the_talk2; ?>">
</td>
</tr>
<tr>
<td>
<label> Abstract of the Talk (Type in TeX format) </label>
<textarea style="width:95%" name="abstract2" rows="10" > <?php echo $print->Abstract2; ?> </textarea>
</td>
</tr>
</table>
<input style="float:right;" type="submit" name="update_abstract" value="Submit/Update">
</form>
и PHP-код для отправки формы и отображения данных заключается в следующем.
<?php
$success_msg="Updated Successfull !!!";
$search= "Search the Speaker Here";
if (isset($_POST['update_abstract'])){
$id=$_POST['id'];
$title1=$_POST['title1'];
$title2=$_POST['title2'];
$abstract1=$_POST['abstract1'];
$abstract2=$_POST['abstract2'];
$update=$wpdb->update(
'Invited_Speakers_auto',
array(
'title_of_the_talk1' => $title1,
'title_of_the_talk2' => $title2,
'abstract1' => $abstract1,
'abstract2' => $abstract2
),
array( 'id' => $id )
);
if ($update==true){
echo $success_msg.$abstract1;
}else
{
$success_msg="There is an error in the update";
}
}
?>
PS:
Пожалуйста, обратите внимание, что мне нужна косая черта, вставленная пользователем, я просто удалил косые черты, которые автоматически вставляются во время вставки sql.
stipslashes()
Помогает мне удалить добавленные косые черты в выводе.
но я хочу удалить обратную косую черту во время самой вставки.
1 ответ
Вы можете использовать MySqli или PDO с подготовленным заявлением. Кстати, это самый известный метод предотвращения инъекций SQL. Узнайте больше о профилактике инъекций Sql из этого фантастического ответа!
Следующий код успешно вставляет строку в базу данных MySql и читает из нее. Надеюсь, поможет!
<?php
$_user = 'root';
$_password= 'root';
$_db = 'localtest';
$_host = 'localhost';
$_port = 3306;
$con = new mysqli($_host, $_user, $_password, $_db) or die(mysql_error);
$new = '$\int f d\mu $';
//insert into mysql table
$sql="INSERT INTO test (math) VALUES (?); ";
$stmt = $con-> prepare($sql);
$stmt -> bind_param("s", $new);
$stmt -> execute();
// Reading From DB
$id = 1;
$sql="SELECT math FROM test WHERE id = ?";
$stmt = $con->prepare($sql);
$stmt->bind_param("i", $id);
$stmt -> execute();
$stmt->store_result();
/* Get the number of rows */
$num_of_rows = $stmt->num_rows;
/* Bind the result to variables */
$stmt->bind_result($new);
if($num_of_rows < 1){
echo "Can't find any record!";
mysqli_close($con);
exit();
}
while ($stmt->fetch())
{
echo $new . PHP_EOL;
/* free results */
$stmt->free_result();
}
mysqli_close($con);
exit();
?>
Обновить
Если вы не можете использовать PDO или MySqli, тогда mysql_real_escape_string
может помочь вам правильно избежать специальных символов.
Вы также можете попробовать использовать htmlentities
перед вставкой в базу данных, а затем html_entity_decode
когда получено.