|
| |
|
|
| |
для: Trianon
(16.12.2006 в 19:45)
| | | :))))))))))))))))))))))))))))))))))))))))))))))))))))))
admin' or 1 or 1 <> ' - это работает!
скажите а как видоизменить запрос в БД? | |
| |
|
|
| |
|
|
| |
для: mindless
(16.12.2006 в 19:29)
| | | тогда (при выключенных magic quotes) в поле логина можно набрать например
или даже
Городить два запроса для проверки - излишне.
Вполне можно обойтись одним SELECT COUNT(*)
Нужно лишь корректно (mysql_escape_string) включить в него литеральные параметры. | |
| |
|
|
| |
|
|
| |
для: Trianon
(16.12.2006 в 19:22)
| | | это же форма:))
$u = $_POST['user'];
$p= $_POST['pass'];
при отправке символа ' - выдает мсою строку - что не может сверить
вот весть код
<? session_start();
$u=$HTTP_POST_VARS["log_in"];
$p=$HTTP_POST_VARS["pass"];
if(!$u && !$p){$otvet= "<strong>ERROR: Fill in all fields!</strong>"; include 'clear.htm'; exit;}
include 'conf.php';
//$connection = mysql_connect("localhost", "", "") or die("cant connect...");
@mysql_select_db($db_name) or die("cant select data base...");
$quary="select count(*) from members where user_login ='$u' and user_pass='$p'";
$result=mysql_query($quary) or die ("cant compare login and password...");
$count=mysql_result($result, 0, 0);
if($count>0)
{
$quary="select user_name, user_famila,id from members where user_login='$u'";
$res=mysql_query($quary) or die("cant select data...");
//$num=mysql_num_rows($res);
$row=mysql_fetch_array($res);
$_SESSION["valid_user"]=$row["id"];
$ima=htmlspecialchars(stripslashes($row["user_name"]));
$ima2=htmlspecialchars(stripslashes($row["user_famila"]));
}
else {$otvet= "<strong>ERROR: Wrong login or password!</strong>"; include 'clear.htm'; exit; }
if($_SESSION["valid_user"])
{
$otvet="<b>Welcome $ima $ima2! You have entered sucesseful!<b>"; include 'clear.htm';
}
?>
|
| |
| |
|
|
| |
|
|
| |
для: mindless
(16.12.2006 в 19:10)
| | | >как насчет моего примера?
В Вашем примере не видно, откуда взялись $u и $p, поэтому сказать о нем ничего нельзя. | |
| |
|
|
| |
|
|
| |
для: Trianon
(16.12.2006 в 15:25)
| | | так мне никто и не ответил- почему первый пример с авторизацией работает?
и почему не рекомендовано использовать mysql_num_rows- как насчет моего примера? | |
| |
|
|
| |
|
|
| |
для: cheops
(16.12.2006 в 13:28)
| | | Всё бы ничего, но цитируемый фрагмент был под заголовком:
Теперь несколько рекомендаций по защите сайта.
1. Не используйте проверку на возращение строки (mysql_num_rows()), а применяйте следующий подход
|
Это уже не учебные рекомендации, а практические, не так ли?
Кстати, я попытался найти раскрытие природы инъекции и методов борьбы с ней в этой статье. Не преуспел. | |
| |
|
|
| |
|
|
| |
для: Trianon
(16.12.2006 в 09:10)
| | | Конечно, по такой классической схеме строятся большинство методических текстов, если инъекцию предотвратить сразу, читатель может в конце концов не понять против чего идёт борьба. | |
| |
|
|
| |
|
|
| |
для: mindless
(16.12.2006 в 04:14)
| | | > if ( $pass != $m_pass or // даст TRUE, если пароли не равны
> $user != $m_user // данная проверка даст TRUE, если была sql инъекция
Отсюда видно, что автор статьи допускает SQL-инъекцию, и лишь потом начинает бороться с её последствиями. | |
| |
|
|
| |
|
|
| | http://www.softtime.ru/info/articlephp.php?id_article=35
самый первый где проверка из базы логин/пароль
admin'/* - все нормально не происходит свободного доступа
<?php
include "config.php";
$query = "SELECT * FROM users
WHERE name = '$_POST[name]' AND
pass = '$_POST[pass]'";
$usr = mysql_query($query);
if(!$usr) exit("ошибка в SQL-запросе");
if(mysql_num_rows($usr)>0)
{
echo "fefe";
}
else {echo "fu";}
?>
// магические кавыки отключил в php/ini
|
и еще
сказано Не используйте проверку на возращение строки (mysql_num_rows()), а применяйте следующий подход:
<?php
$user = $_POST['user'];
$pass = $_POST['pass'];
$sql = "SELECT user, pass FROM users WHERE user = '$user'";
list($m_user, $m_pass) = mysql_fetch_row( mysql_query($sql) );
if ( $pass != $m_pass or // даст TRUE, если пароли не равны
$user != $m_user // данная проверка даст TRUE, если была sql инъекция
)
{
die("die");
}
?>
|
е асли так:
<?
$quary="select count(*) from members where user_login ='$u' and user_pass='$p'";
$result=mysql_query($quary) or die ("cant compare login and password...");
$count=mysql_result($result, 0, 0);
if($count>0)
{...........................
?>
|
| |
| |
|
|
|