 
			
				14.02.2011, 20:39
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 
 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.12.2008 
					
					
					
						Сообщений: 4,201
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от e1f
			
		
	 | 
 
	| 
		давайте будем сами делать то, что уже реализовано в db-интерфейсах. мы же умные, черт побери
	 | 
 
	
 
 неправильное какое-то определение. В db-интерфейсах реализовано и экринирование, и binding. Скорее "давайте ограничим пользователя в том, куда и что можно вставлять, в надежде, что он на этом и остановится"
 
	
 
	| 
		
			Сообщение от dmitriymar
			
		
	 | 
 
	| 
		но этот вариант по ресам займёт больше чем изначальная замена их спец символами.
	 | 
 
	
 
 это еще надо доказать
 
	
 
	| 
		
			Сообщение от dmitriymar
			
		
	 | 
 
	| 
		любое искажение данных-кавычка не в том месте где была изначально или изменение их колва -приравнивается к потере данных...
	 | 
 
	
 
 mysql_real_escape_string ничего не искажает
 
	
 
	| 
		
			Сообщение от dmitriymar
			
		
	 | 
 
	
		по моему у него в видеокурсе я встречал пример где одно экранирование не спасало 
jolly-wind.ru
	 | 
 
	
 
 у кого? Да и мало ли почему jolly-wind.ru могло не спасать одно экранирование  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.02.2011, 20:56
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.04.2009 
					
					
					
						Сообщений: 1,263
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от x-yuri
			 
		
	 | 
 
	| 
		неправильное какое-то определение. В db-интерфейсах реализовано и экринирование, и binding. Скорее "давайте ограничим пользователя в том, куда и что можно вставлять, в надежде, что он на этом и остановится"
	 | 
 
	
 
 Экранирование реализовано средствами самого php, так? Мы экранируем данные, запихиваем их в запрос, отдаем библиотеке для работы с БД. В то время как 
 prepared statements - фича базы данных.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.02.2011, 20:57
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 х.з 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 21.11.2010 
					
					
					
						Сообщений: 4,588
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от x-yuri
			
		
	 | 
 
	
		любое искажение данных-кавычка не в том месте где была изначально или изменение их колва -приравнивается к потере данных... 
mysql_real_escape_string ничего не искажает
	 | 
 
	
 
 в этиом варианте может исказить-поскольку применяются все символы и экранирование невозможно будет отличить от реально введённых пользователем данных
 
	
 
	| 
		
			Сообщение от x-yuri
			
		
	 | 
 
	| 
		у кого? Да и мало ли почему jolly-wind.ru могло не спасать одно экранирование
	 | 
 
	
 
 ну вот пришли к тому что экранирование одно может не помочь ограничить инъекции. а ограничить тип данных я не могу- в силу специфики данных  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.02.2011, 21:56
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 
 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.12.2008 
					
					
					
						Сообщений: 4,201
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от e1f
			
		
	 | 
 
	| 
		Экранирование реализовано средствами самого php, так?
	 | 
 
	
 
 ты ошибаешься. Ты, наверное, имел в виду get_magic_quotes_gpc() и addslashes/stripslashes
 
	
 
	| 
		
			Сообщение от dmitriymar
			
		
	 | 
 
	| 
		в этиом варианте может исказить-поскольку применяются все символы и экранирование невозможно будет отличить от реально введённых пользователем данных
	 | 
 
	
 
 и тем не менее ему как-то удается
 
<?
mysql_connect('localhost', <login>, <passwd>) or die(mysql_error());
mysql_query('SET NAMES cp1251') or die(mysql_error());
mysql_select_db(<db>) or die(mysql_error());
mysql_query('DROP TABLE IF EXISTS t1') or die(mysql_error());
mysql_query('CREATE TABLE t1 (f1 TEXT CHARACTER SET cp1251)') or die(mysql_error());
$s = '';
for( $i=0; $i<256; $i++ )
    $s .= chr($i);
$_s = mysql_real_escape_string($s);
mysql_query("INSERT INTO t1 VALUES ('$_s')") or die(mysql_error());
$r = mysql_query('SELECT * FROM t1') or die(mysql_error());
$r = mysql_result($r, 0, 0);
if( $s != $r )
    die('mysql_real_escape_string sucks!!!');
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось x-yuri, 14.02.2011 в 22:04.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.02.2011, 22:38
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 
 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.12.2008 
					
					
					
						Сообщений: 4,201
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		и по поводу этого: 
	
 
	| 
		
			Сообщение от dmitriymar
			
		
	 | 
 
	| 
		ну вот пришли к тому что экранирование одно может не помочь ограничить инъекции. а ограничить тип данных я не могу- в силу специфики данных
	 | 
 
	
 
 я не умею решать несуществующие проблемы. Если у них что-то не получилось, надо разобраться, что именно и почему. А не сразу делать вывод, что экранирование не работает  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.02.2011, 23:05
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 х.з 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 21.11.2010 
					
					
					
						Сообщений: 4,588
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 приведённый пример-это общий случай. в частном не пройдёт-вероятность возникновения частного минимальна конечно но всёже. 
и всё равно эта полемика интересна-но меня интересует всего один вопрос(точнее группа вопросов)-заданный в начале этого топика 
1 возможно ли слепить строку из строк с разными кодировками?-на клиенте 
2 возможно ли сменить тип кодировки во время прередачи данных,или всёт аки передастся в той кодировке что указанна в странице?(одно упоминание я нашел что при гет и посте данные передаются в юникоде)-на клиенте 
3. если всётаки можно изменить кодировку-можно ли скрипту рнр дать инструкции в этой строке указывающие на тип кодировки? 
P.S никто не говорил что оно не работает-было сказано что оно не помагает в некоторых случаях инъекций.и то что в некоторых ситуациях оно может изменить исходную строку-что не желательно 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось dmitriymar, 14.02.2011 в 23:22.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.02.2011, 23:35
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 
 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.12.2008 
					
					
					
						Сообщений: 4,201
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от dmitriymar
			
		
	 | 
 
	| 
		было сказано что оно не помагает в некоторых случаях инъекций
	 | 
 
	
 
 в каких?
 
	
 
	| 
		
			Сообщение от dmitriymar
			
		
	 | 
 
	| 
		и то что в некоторых ситуациях оно может изменить исходную строку
	 | 
 
	
 
 в каких?
 
	
 
	| 
		
			Сообщение от dmitriymar
			
		
	 | 
 
	| 
		но меня интересует всего один вопрос(точнее группа вопросов)
	 | 
 
	
 
 повторюсь, я не умею решать проблему, не видя в чем она состоит. Но ты можешь подождать, пока кто-то другой ответит на твои вопросы  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.02.2011, 23:39
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 х.з 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 21.11.2010 
					
					
					
						Сообщений: 4,588
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 x-yuri, 
 дак я проблему не создавал и обход этой проблемы я знаю, но-меня интересовали ответы на эти вопросы и всё.-чтобы определиться по какому варианту реализовывать -по классическому с экранированием,проверкой на некоторые символы,вылавливанием "частного случая",приведением типа- либо с этим-где мне нужно только сделать замену. 
а тему развили участники этой темы) 
но насколько я понимаю -эти вопросы настолько специфические ,что навряд ли гдето массово обсуждались или поднимались. 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось dmitriymar, 14.02.2011 в 23:53.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.02.2011, 13:58
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.04.2009 
					
					
					
						Сообщений: 1,263
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от x-yuri
			 
		
	 | 
 
	| 
		ты ошибаешься. Ты, наверное, имел в виду get_magic_quotes_gpc() и addslashes/stripslashes
	 | 
 
	
 
 Да, это и имел в виду. Просто мне метод prepare-bind-execute кажется более правильным, нежели do.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				15.02.2011, 21:31
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 
 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.12.2008 
					
					
					
						Сообщений: 4,201
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от e1f
			
		
	 | 
 
	| 
		Да, это и имел в виду. Просто мне метод prepare-bind-execute кажется более правильным, нежели do.
	 | 
 
	
 
 правильность - это не аргумент  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |