2014-02-05 7 views
0

Есть ли способ улучшить безопасность этой функции? Я все еще новичок в PHP. Хотелось бы посоветовать.Улучшение безопасности для функции PHP

public function postNewMessage($user_name, $message) 
{ 
$user_name = $this->mysqli->real_escape_string($user_name); 
$message = $this->mysqli->real_escape_string($message); 
$query  ='INSERT INTO Messages (posted_on, user_name, message) 
VALUES (NOW(), "'.$user_name.'", "'.$message.'")'; 
$result = $this->mysqli->query($query); 
} 
+1

Да. Прочтите это ** полностью ** - http://php.net/manual/mysqli.quickstart.prepared-statements.php – Phil

+0

Кроме того, почему этот помеченный 'javascript'? – Marty

+0

Мой плохой. Спасибо за ссылку! – Moonlightcoder

ответ

1

Вы можете использовать подготовленные операторы вместо «вручную», избегая ваших переменных; если все будет хорошо, побега будет достаточно, но подготовленные заявления также являются более чистым подходом.

$stmt = $this->mysqli->prepare('INSERT INTO Messages 
    (posted_on, user_name, message) 
    VALUES (NOW(), ?, ?)'); 
$stmt->bind_param("ss", $user_name, $message); 
$stmt->execute(); 

Смотрите также: prepared statements

+0

Не могли бы вы подробнее рассказать об экранировании? Поскольку я хотел бы осваивать основы наилучшего преодоления моих переменных. И если возможно, вы можете объяснить, почему вы удалили $ results? – Moonlightcoder

+0

@Moonlightcoder: использование подготовленных операторов означает, что вам больше не нужно беспокоиться об экранировании параметров. Вот почему они должны быть предпочтительнее, чем вручную сбрасывать параметры. [подробнее см. здесь] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1) –

Смежные вопросы