Все просто. ВСЕ входящие данные должны быть пропущены через mysql_real_escape_string () перед вставкой в базу данных. Если вы знаете, что что-то должно быть целым числом, например, установите его в целое число перед тем, как вставить его и т. Д. Помните, что это просто для остановки внедрения SQL. XSS и проверка данных различны.
Если вы хотите, чтобы что-то было электронной почтой, вам, очевидно, необходимо подтвердить это, прежде чем вставить его в базу данных.
htmlentities () очищает данные, что означает изменение данных. Я думаю, что вы всегда должны хранить необработанные данные в базе данных, и когда вы получите эти данные, выберите, как вы хотите их очистить.
Мне нравится использовать следующую функцию в качестве «оболочки» для mysql_real_escape_string () .
function someFunction( $value )
{
if ( is_int( $value ) || is_float( $value ) ) {
return $value;
}
return "'" . mysql_real_escape_string( (string) $value ) . "'";
}
Если значением является число с плавающей запятой или целое число, то запускать mysql_real_escape_string () не имеет смысла. Причина, по которой я преобразую значение в строку перед передачей его в mysql_real_escape_string () , заключается в том, что иногда это значение может не быть строкой.
Пример значения, не являющегося строкой:
http://localhost/test.php?hello[]=test
Внутри test.php вы запускаете mysql_real_escape_string () в $ _GET ['hello'], ожидая, что hello будет строкой. Хорошо, так как человек установил значение в массив, это фактически вызовет уведомление, так как привет не строка.