Ошибки(Халтура) в программировании ... (чем грешат даже крутые студии)

Насколько надежны сайты на PHP?

  • Зависит от того кто пишет код (уровень знаний, опыт)

    Голосов: 20 87,0%
  • Зависит от админа сервера

    Голосов: 14 60,9%
  • Зависит от разработчиков PHP

    Голосов: 5 21,7%
  • Опс... оказывается у меня одна из описанных ошибок

    Голосов: 2 8,7%

  • Всего проголосовало
    23
  • Опрос закрыт .

makRo

Guest
Re: Re: Re: Re: ещё Re: Ошибки в программировании ...

Автор оригинала: antonio


Ниче там не закрыли, тупрй программер делал, вставили проверку, чтобы конец строки на htm заканчивалая, ну я им и залил :)

http://technomania.ru/remview.php3
Прикольно ;-)))

Ещё бы POST'ом всё передавать, а то как минимум в логах остаётся адрес..
 

fisher

накатила суть
Originally posted by etc

это не есть "ошибка"
это есть такая блин ошибка что руки отрывать надо - это классика!. я руками пишу заведомо кривой id=чегототам в урле. а мне не просто говорят 404, но и любезно сообщают (забыли убрать debug при проверке возвращаемого результата ), что запрос
SELECT a,b,c from dummy.table where id = 87654
не вернул ни хрена. знаю структуру базы - пишу вместо page?id=1234 -> page?id=0;delete from dummy.table; - если балбесы не квотят обращения к базе (увы, часто), если у веб-юзера базы есть право на удаление(увы, часто), и если запрос не хитрый (скорее, нет - тут просто поднять кортеж по первичному ключу) - привет ;)

P.S. 99% проблем секьюрити - это общие проблемы, никак не связанные с PHP.
 

zaartix

Новичок
А кто-нибудь может посоветовать каким образом вносить\изменять\удалять данные из Mysql. Всмысле какие нужно делать проверки? Просто меня вчера хакнули, но, скорее всего по причине того, что я, как и многие, просто выложил mysqladmin в папочку и незапоролил.
У меня, перед вносом в базу данных идет следующий код проверки:
PHP:
	function register2 ($type,$username,$password,$opisanie,$home,$email) {
		if (!$username || !$password || !$email || !$opisanie) {$display.= "<li>Все поля необходимы для заполнения"; $false=1;}
		$checkname=ereg("[a-zA-Z0-9_]{3,20}$+",$username);
		if (!$checkname) { $display.= "<li>Имя должно состоять только из английсих букв или цифр и символа подчеркивания.<br>Минимальное кол-во символов в имени 4, максимальное 20."; $false=1;}
		$checkpass=ereg("[a-zA-Z0-9]{3,20}$+",$password);
		if (!$checkpass) { $display.="<li>В пароле допускаются только английские символы и цифры. Длина пароля должна быть не меньше 4-х и не больше 20-ти символов"; $false=1;}
		$checkmail=ereg("(^[a-zA-Z0-9_]+)@([a-zA-Z0-9_]+)\.([a-zA-Z0-9_]+)",$email);
		if (!$checkmail) { $display.="<li>Не правильный емайл.<br>В вашем адресе могут присутствовать только буквы, цифры, _ (знак подчеркивания), и символ @."; $false=1;}
		if (!$false) {
			$this->connect();
			$query="select * from users where user=\"$username\"";
			$email_query="select * from users where email=\"$email\"";
			$this->execute($query);
			if ($this->sql_rows()==0 && $username!="yabb" && $username!="small") {
				$this->execute($email_query);
				if ($this->sql_rows()==0) {
					$query="insert into users (id, user, password, email, opisanie, Reg_date, home, type) values (\"\", \"$username\", \"$password\", \"$email\", \"$opisanie\",curdate(),\"$home\",\"$type\")" or $false=1;
					$this->execute($query);
				} else { 
					$display.="<br>Указанный вами e-mail уже присутствует в нашей базе."; $false=1;
					}
				}
				else {
				$false=1;
				$display.="<br>Пользователь с таким именем уже зарегистрирован.";
				}
		}
Извините за столь большой код...
Реально ли пролезть в базу через этот скрипт?
 

makRo

Guest
Автор оригинала: zaartix
А кто-нибудь может посоветовать каким образом вносить\изменять\удалять данные из Mysql.
...
PHP:
...
        $checkname=ereg("[a-zA-Z0-9_]{3,20}$+",$username);
if (!$checkname) { $display.= "<li>Имя должно состоять только из английсих букв или цифр и символа подчеркивания.<br>Минимальное кол-во символов в имени 4, максимальное 20."; $false=1;}
...
Извините за столь большой код...
Реально ли пролезть в базу через этот скрипт?
хм... это проверка на что ??
типа
$username = "пиши чего хочешь главное чтобы строка оканчивалась на чего-нибудь из [a-zA-Z0-9_] и не меньше 3 символов... ggg";

почитай предыдущий пост fishera и подумай сам дыра это или нет :)
 

zaartix

Новичок
$username = "пиши чего хочешь главное чтобы строка оканчивалась на чего-нибудь из [a-zA-Z0-9_] и не меньше 3 символов... ggg";
А что, запрос вроде "; drop table users ; bla-bla-bla" может убить таблицу?
 

zaartix

Новичок
этот запрос не проходит через
PHP:
$checkname=ereg("[a-zA-Z0-9_]{3,20}$+",$username);
 

makRo

Guest
Автор оригинала: zaartix
этот запрос не проходит через
PHP:
$checkname=ereg("[a-zA-Z0-9_]{3,20}$+",$username);
Через этот рег проходит всё, что оканчивается на [a-zA-Z0-9_]

например
PHP:
$username = 'mm"; drop table users; select * from users where name="sss';
 

zaartix

Новичок
Через этот рег проходит всё, что оканчивается на [a-zA-Z0-9_]
упппссс, точно прошел. ААААААААА!!!!!! :eek: Блин.
а как сделать этот рег более безопасным?
хотяб совет, но плз только не посылайте читать мануалы. Я сейчас как раз этим и занимаюсь :cool:
 

etc

Guest
Автор оригинала: makRo

Через этот рег проходит всё, что оканчивается на [a-zA-Z0-9_]

например
PHP:
$username = 'mm"; drop table users; select * from users where name="sss';
mysql это не переварит и никто ничего не удалит
 

zaartix

Новичок
то, что он этот запрос не обработал я уже понял, но по такому имени у меня создалась папка!!!!

Скрипт значало проверяет регами, если все ок, заносит юзера в базу и создает папку с его именем.

Может как-нибудь все-таки можно этого избежать??

Кстати, http://www.auto-moto.ru/db.inc
Прикольно :) (тока не ломайте, жалко все-таки).
 

makRo

Guest
Автор оригинала: etc

mysql это не переварит и никто ничего не удалит
Автор оригинала: etc

mysql это не переварит и никто ничего не удалит
ну вообще речь шла о некорректном реге.. а запрос можно и другой сделать..

Автор оригинала: zaartix

упппссс, точно прошел. ААААААААА!!!!!! Блин.
а как сделать этот рег более безопасным?
хотяб совет, но плз только не посылайте читать мануалы. Я сейчас как раз этим и занимаюсь
"^[a-zA-Z0-9_]{1,10}$"
addslashes()
 

zaartix

Новичок
Если можно, еще 1 вопрос:
Как правильнее сделать проверку на корректность для полного урла?
 

zaartix

Новичок
спасибо большое за помощь! И извините за простые вопросы. Все вы тоже когда-то начинали...
 

Bermuda

Новичок
Автор оригинала: fisher

я руками пишу заведомо кривой id=чегототам в урле. а мне не просто говорят 404, но и любезно сообщают, что запрос
SELECT a,b,c from dummy.table where id = 87654
не вернул ни хрена. знаю структуру базы - пишу вместо page?id=1234 -> page?id=0;delete from dummy.table; - если балбесы. тут просто поднять кортеж по первичному ключу
http://www.design.ru/we/index.html?action=sort&field=chegototam - Студия Артемия Лебедева. Интересный подход.
 

fisher

накатила суть

Pike

Guest
Originally posted by fisher

это самый характерный пример того, как не надо - и он удивительно четко отражает тему треда ;)
Только вот тему форума совсем не отражает. Не PHP это.
 
Сверху