"PHP" / Говнокод #2607 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
$s_name=$_POST['s_name'];
$f_name=$_POST['f_name'];
$m_name=$_POST['m_name'];
$login=$_POST['login'];
$password1=$_POST['password1'];
$password2=$_POST['password2'];
$post_id=$_POST['post'];
$query="SELECT  person.login as login	FROM	person	ORDER BY ID";
$res=Select($query);
$flag=false;
		  While(OCIFetch($res))
		        {
			        $login_base=text($res,'LOGIN');
				if ($login==$login_base)
				{
				$flag=true;
				break;
				}
			}
		If($flag)
			{
			echo "</br><center><h3>Такой логин уже существует...придумайте еще что-нибудь!</center></h3></br>";
			?>
			<center><h4><a href="index.php?menu=reg">Назад</a></h4><center>
			<?
			}
               if (!$flag)
		   {
		     if ($password1==$password2)
		           {
		             If (($login!='') and ($password1!='') and ($s_name!='') and ($f_name!='') and ($m_name!=''))
			   {
                                 .... Ну и дальше  добавение и все такое))

ммм.. альтернативные способы защиты от инъекций в запросах???)))

Запостил: 1_and_0 1_and_0, (Updated )

Комментарии (9) RSS

  • Что-то я тут защиты не нашел.
    И зачем делать всю выборку, а после шерстить массив?
    Нечем процессор занять?
    Достаточно сделать SELECT COUNT(*)
    Это намного быстрее будет.
    Ответить
    • В этом то и прикол, про что я и написал "защита от инъекций".
      В сам запрос в базу не поступает никакой информации из вне, а после просматривается массив средствами пхп, но зато 100% гарантия от sql-инъекции)))
      Ну, понятно что говнокод в чистом виде, и все должно организовываться по другому, с этим никто и не спорит)
      Это код не мой,а у автора спрашивать бессмысленно, так автор плохо знаком и с PHP и с SQL..., и делалось это ради того что бы "курсовик хоть как либо работал", и курсовая работа была зачтена, код при проверки не смотрелся, в базе было не более 10 записей на каждую таблицу, сервер в универе мощный, итог: "нам похрен какие ресурсы мы тратим, это не наши проблемы!", вот как то так все печально...
      Ответить
  • Идея хороша. Впрочем, наверное, если логинов будет в базе тысяч пятдесят, вот тогда начнутся трудности.
    Ответить
    • Вылетело из головы совсем. Если алгоритм бы работал чисто для защиты вида:
      1) выбираем безопасно все логины из базы
      2) проверяем, нет ли среди выбранного желаемого
      3) если есть, запрещаем
      4) ???
      5) ПРОФИТ
      то его бы было критически важно правильно дополнить в месте создания логина. На кой такие титанические старания насмарку, если будет неэкранированный инсерт?
      Итак, доработка.
      $allowed_logins = array ('Vasya', 'Petya', 'Misha', .../* сколько надо логинов */ );
      $id_login = 0;
      for( $i = 0; $i < count($allowed_logins); $i++)
      if ($login == $allowed_logins[$i])
      {
      $id_login = $i;
      break;
      }
      if(! $id_login)
      {
      die "Такой логин использовать нельзя!";
      exit;
      }
      if ($id_login)
      {
      $query = "insert into users(login) values(" + $allowed_logins[$id_login] + ")";
      /* ... */
      }

      И никакой злобный хакер не зарегистрируется под ником с иньекцией!
      Ответить
      • Ну вообще-то хакеры не регистрируются, а заходят под зарегенными аккаунтами. Т.е. регулярку на $_POST все равно придется повесить.

        И еще: цикл лучше оформить так
        for($i = 0, $c = count($allowed_logins); $i < $c; $i++)

        Иначе count будет пересчитываться каждую итерацию и в конце концов начнутся проблемы с быcтродействием.

        Кроме того, есть еще функция in_array().
        Ответить
        • Вот все руки не доходят изучить такую конструкцию цикла, все забываю, да по старинке пишу:
          $c = count($allowed_logins);
          for($i = 0, $i < $c; $i++)
          {
          ...
          }
          Ответить
        • Спасибо, кэп!

          Вы бы ещё сказали, что ветвь if ($id_login) не нужна, агрегируется else, или вообще безо всего, потому что в предыдущей строке уже exit;
          И что die; exit в данном случае излишне.

          Это таки была шутка юмора, тэйк ит изи.
          Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8