Yii Framework Forum: sql-инъекции в AR - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

sql-инъекции в AR Rate Topic: -----

#1 User is offline   Albert 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 44
  • Joined: 09-September 09

Posted 03 October 2009 - 10:00 AM

Есть код:

	public function rules()
	{
		return array(
			...
			array('album_id', 'numerical', 'integerOnly'=>true),
			array('album_id', 'exist'),
			...
		);
	}

Тут очевидно, что получаем возможность sql-инъекции через валидатор exist несмотря на ...'numerical', 'integerOnly'=>true...
Есть ли какой-нибудь простой способ этого избежать или самому всегда в контроллере писать mysql_real_escape_string() для каждого атрибута?
0

#2 User is offline   KJedi 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 381
  • Joined: 19-October 08
  • Location:Nikolaev, Ukraine (Europe)

Posted 03 October 2009 - 03:41 PM

хм, а каким образом там идет SQL-иъекция?
дело все в том, что в Yii об этом уже позаботились :)
и все запросы готовятся через PDO, а его использование исключает возможность простой инъекции. Да, есть какие-то варианы через китайские символы хакнуть, но это экзотика :)
Posted Image
My Blog: http://programmersnotes.info/ - tips, design patterns, client and server-side coding, yii articles and simply my experience.

Follow me on twitter: http://twitter.com/KonstantinMirin
Add me to your friends on facebook: http://www.facebook....hp?id=784832902
0

#3 User is offline   Albert 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 44
  • Joined: 09-September 09

Posted 05 October 2009 - 01:00 AM

Да, все верно, теперь понял. Ошибка закралась в самописный валидатор. Там ковычки в запрос попадали через критерий
Малость затупил. :wacko:

Другой вопрос, допустим есть таблица с альбомами фотографий
id
gall_id - галерея
albumname - имя альбома
мне надо исключить возможность одинаковых имен альбомов в одной галерее
первое что приходит на ум:

			array('albumname', 'unique',
				'criteria'=>array(
					'condition'=>'gall_id = :gall_id',
					'params'=>array(':gall_id'=>$this->gall_id)
				),

Но это не работает, хотя указан дополнительный критерий запроса. В результате вообще никакой валидации не происходит, можно добавлять записи с одинаковым albumname и gall_id
0

#4 User is offline   unloved 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 16
  • Joined: 25-April 09

Posted 05 October 2009 - 04:47 AM

напиши свою функцию валидации, в которой просто каунтом по базе с нужными параметрами gall_id и albumname выбери все с текущими значениями. если больше нуля, то вызов ошибки.
0

#5 User is offline   Albert 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 44
  • Joined: 09-September 09

Posted 05 October 2009 - 05:02 AM

да, уже сделал так, некуда деваться. Но все ж интересно как использовать criteria для unique.

CUniqueValidator said:

criteria property (available since v1.0.8 )
public array $criteria;
additional query criteria. This will be combined with the condition that checks if the attribute value exists in the corresponding table column. This array will be used to instantiate a CDbCriteria object.

Это тоже самое по сути должно быть
0

#6 User is offline   Albert 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 44
  • Joined: 09-September 09

Posted 05 October 2009 - 06:02 AM

Проблема найдена. Список валидаторов из rules модель получает при ее создании, а не при вызове validate().

Quote

array('albumname', 'unique',
'criteria'=>array(
'condition'=>'gall_id = :gall_id',
'params'=>array(':gall_id'=>$this->gall_id)
),

В этот момент все атрибуты пусты
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users