@AlikDex

Достаточное ли условие для удаления в плане безопасности?

Удаление фоточки с альбома пользователя, которую может удалять только пользователь, либо админ.
Итак:
$member['user_id'] - id залогиненого юзера.
$admin - флажок, если юзер с правами админе (упрощено)
$image_id - собственно ид фоточки.
if ( ! $admin ) {
		$user_name = "AND a.user_id = '" . ($member['user_id']) . "'";
	} else {
		$user_name = "";
	}
	
	$sql = "DELETE LOW_PRIORITY i 
			FROM `" . PREFIX . "_images_info` AS i 
			INNER JOIN (
				SELECT album_id
				FROM `" . PREFIX . "_album_info` 
				WHERE album_id={$id} {$user_name} 
			)  AS a USING (album_id)
			WHERE i.album_id=a.album_id AND i.image_id={$image_id}";

Сижу ломаю голову, хватит ли этого от несанкционированного удаления.

П.С.
таблица с фотками напрямую с юзером никак не связаны, только опосредованно через альбом(который в свою очередь связан с владельцем через id).
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ответы на вопрос 2
Для безопасности и защиты от несанкционированного удаления вы бы лучше начали использовать prepared_statements. Причем тут они? А притом, что:
1) будут выполняться только те запросы, которые вы сами написали, без риска "дополнения" этих запросов человеком со стороны;
2) логика вашего кода станет более прозрачной, и, следовательно, будет проще выяснить, нет ли нежелательных веток в нем или необработанных ситуаций. Сейчас мне пришлось сначала удивиться, когда я увидел это:
WHERE album_id={$id} {$user_name}
и потом заново все перечитать и понять, что у вас $user_name это оказывается фильтр такой. Вот когда приведете код в порядок, и будете более-менее уверены в отсутствии sql-injection, сами ответите на свой вопрос.
Ответ написан
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
по безопасности imho в целом достаточно.

некоторые замечания:

1. i.album_id=a.album_id я бы переместил в условие join
2. LOW_PRIORITY работает только на myisam - не надо использовать myisam.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы