|
|
|
|
|
для: GeorgeIV
(21.08.2008 в 16:38)
| | Почувствовал, спасибо.
А главного я так и не понял. Мне в PHP еще пахать и пахать, куда уж хакерские методы изучить... Только видел я примеры иньекций, где нет ни одной кавычки. От них это тоже спасает? И с сессией не понятно. Как то раз выключил интернет не закрыв страницу, а на следующий день включил - сессия живая. Это как так? | |
|
|
|
|
|
|
|
для: Николай2357
(21.08.2008 в 15:48)
| | $a=false;
$b=0;
$a==$b будет истина
$a===$b будет ложь
почувствуй разницу | |
|
|
|
|
|
|
|
для: Trianon
(21.08.2008 в 15:27)
| | Спасибо. Подскажите еще, пожалуйста,
1)Когда использовать === (строго равно)?
2)Нужно ли в конце подобных скриптов session_destroy ?
3) И самый главный вопрос, из за которого я старался: теперь можно спать спокойно на счет иньекций?
Спасибо. | |
|
|
|
|
|
|
|
для: Николай2357
(21.08.2008 в 13:36)
| | по-моему, во всех сравнениях, подобных этому Вы имели в виду на самом деле
В остальном таки да. Прогресс имеет место быть. | |
|
|
|
|
|
|
|
для: Николай2357
(20.08.2008 в 03:10)
| | Ну вот, так вроде бы работает. Правда через сессию, но мне это тоже нужно знать. Посмотрите пожалуйста.
<?
include "dbconnect.php";
session_start();
function rec_stripslashes($mixed)
{
if( is_array($mixed) )
{
return array_map('rec_stripslashes', $mixed);
}
else
{
return stripslashes($mixed);
}
}
if( get_magic_quotes_gpc() )
{
$_GET = rec_stripslashes( $_GET );
$_POST = rec_stripslashes( $_POST );
}
$post_name = @$_POST['name'];
$in = @$_POST['in'];
$go = @$_GET['go'];
$new = @$_GET['new'];
$sel = @$_GET['sel'];
$hello = @$_GET['hello'];
$get_name_sel = @$_GET['getname'];
$tabsel = @$_GET['tabsel'];
$del = @$_GET['delete'];
$id = intval(@$_GET['id']);
$get_name = 0;
$get_val = @$_GET['name'];
if( $get_val != null )
{
$get_name = @$_GET['name'];
}
else
{
$get_name = null;
}
$host = $_SERVER['HTTP_HOST'];
$self = $_SERVER['PHP_SELF'];
if( $go != null && $post_name != null )
{
$_SESSION['name'] = $post_name;
header("Location: http://".$host.$self."?go=1&new=1");
exit;
}
elseif( $go != null && $get_name != null)
{
$_SESSION['name'] = $get_name;
header("Location: http://".$host.$self."?go=1&tabsel=".$tabsel);
exit;
}
elseif( $get_name_sel != null )
{
$_SESSION['name'] = $get_name_sel;
header("Location: http://".$host.$self."?go=1&sel=".$sel);
exit;
}
if( $go != null || $sel != null )
{
$name = @$_SESSION['name'];
if( $tabsel != null || $hello != null )
{
$name = html_entity_decode($name);
}
$count_name=strlen($name);
$count=strlen($count_name)-1;
$count_var=substr($count_name, $count);
if($count_var==1)
{
$varsh="символ";
}
if($count_var==2 || $count_var==3||$count_var==4)
{
$varsh="символа";
}
if($count_var==0 || preg_match("/[5-9]/",$count_name) || preg_match("/[1][\d]/",$count_name))
{
$varsh="символов";
}
$name_db = mysql_real_escape_string($name);
$name = htmlspecialchars($name);
$query = mysql_query("SELECT visits FROM guests WHERE guestname='".$name_db."'")
or die ('Error: 1' . mysql_error());
$userdata = mysql_fetch_assoc($query);
$visits = $userdata['visits'];
if( $visits != null )
{
$count=strlen($visits)-1;
$count_var=substr($visits, $count);
if($count_var==2||$count_var==3||$count_var==4){
$varsh_c="раза";
}
else
{
$varsh_c="раз";
}
if(preg_match("/[1][\d]/",$visits))
{
$varsh_c="раз";
}
}
if( $new != null )
{
if( $visits == null )
{
$visits=1;
mysql_query("INSERT INTO guests SET guestname='".$name_db."', visits='".$visits."'")
or die ('Error: 2' . mysql_error());
}
else
{
$visits++;
mysql_query("UPDATE guests SET visits ='".$visits."' WHERE guestname='".$name_db."'")
or die ('Error: 3' . mysql_error());
}
header("Location: http://".$host.$self."?go=1&hello=1");
exit;
}
if( $hello != null )
{
$mess=$mess_d."Таки здрасти <b>".$name."</b>!<br>
Мы знаем, что в Вашем имени ".$count_name." ".$varsh.", и Вы у нас ".$visits."-й раз";
}
if( $visits == null )
{
$mess="Не, <b>".$name."</b> пока не числится, зайдите позже!
Хотя мы знаем, что в его имени ".$count_name." ".$varsh ;
}
elseif( $hello == null )
{
$mess="Гражданин <b>".$name."</b><br> побывал у нас ".$visits." ".$varsh_c.".
Поэтому мы знаем, что в его имени ".$count_name." ".$varsh;
$mysql=" WHERE guestname='".$name_db."'";
$all="<a href='".$self."'>Показать всех</a>";
}
}
elseif( $del != null )
{
mysql_query("DELETE FROM guests WHERE id = '".$id."'")
or die ('Error: 4' . mysql_error());
header("Location: http://".$host.$self);
exit;
}
$query = mysql_query("SELECT guestname, visits, id FROM guests $mysql ORDER BY id DESC ")
or die ('Error: 5' . mysql_error());
$count=mysql_num_rows($query);
if($count==0)
{
$mess="Пусто.";
}
for($i=0;$i<$count; $i++)
{
$link = mysql_result($query, $i, "guestname");
$link = htmlspecialchars($link);
$link_name = preg_replace("#[\s]{1}#"," ",$link);
$link_del = addslashes($link);
$href_name = rawurlencode($link);
$id = mysql_result($query, $i, "id");
$tr.="<tr><td style='width:20px'>".($i+1)."</td>
<td><a href='".$self."?name=".$href_name."&go=1&tabsel=1'>".$link_name."</a></td>
<td>".mysql_result($query, $i, "visits")."</td>
<td><a href='#' onclick=\"javascript:Delete('".$id."','".$link_del."')\">
dell</a></td></tr>";
}
$table="<table>
<tr>
<td style='width:20px'><b>№</b>
</td>
<td style='width:400px'><b>Имя</b>
</td>
<td><b>Визиты</b></td>
<td><b>Удалить</b></td>
</tr>".$tr."</table>";
$form="<form action=".$self."?go=1 method=post ><input type=text size=80 name=name >
<input type=submit name=in value=Войти ></form>
<form action=".$self." method=get ><input size=80 type=text name=getname >
<input name=sel type=submit value=Найти ></form>";
?>
<html>
<head>
<style>
body{
background-color:#FFFFCC;
}
table {
border-collapse: collapse;
}
td{
border: 1px solid;
width:100px;
text-align:center;
color:#666699;
background-color:#e6e6e6;
}
</style>
<script type="text/javascript">
function Delete(id, name){
confirm("Вы действительно хотите навсегда удалить "+name+"?")?
location.href="<? echo $PHP_SELF ?>?delete=1&id="+id : alert("А зря.");
}
</script>
<meta http-equiv="Выберите расширение для паковки" content="text/html; charset=windows-1251"></head>
<body>
<?
echo "<span style='color:red'>".$mess."</span>";
?>
<hr>
<?
echo $all.$form.$table;
echo get_magic_quotes_gpc() ? "MQ Включено" : "MQ Отключено<br>";
?>
I 100% know why O"Relly & partners doesn''t eat Mc''donalds Gamburgers\\Cheeseburgers<br />
Mc''robbins'<br />
O"Relly <br />
Jensen & partners<br />
total %25 of sales <br />
&amp; <br />
&<br />
characterictics of volt&amp; any other graphs <br />
Guest004
</body>
</html>
|
PS Комментировать не стал, и так бумаги попортил.
Спасибо. | |
|
|
|
|
|
|
|
для: Николай2357
(21.08.2008 в 01:07)
| | А это все едино: есть текст и мы должны его обработать так, чтобы с ним ничего не произошло в результате: не добавилось лишнего и наоборот - ничего не потерялось. Ведь htmlspecialchars() и mysql_escape_string() по сути делают одно и то же: экранируют спец. символы для правильной вставки текста на страницу/в запрос Все "гениально и просто": и не требует иных подходов, которые могут допустить взлом | |
|
|
|
|
|
|
|
для: BinLaden
(21.08.2008 в 00:24)
| | >Про пробелы спросили Вы - я Вам ответил, но Вы почему-то этим раздражены.
Да нет, что Вы, я злюсь на себя, что объяснить не могу.
>От них надо избавляться.
Вот опять к примеру. Я про подход к постановке вопроса, а не к решению задачи. Вообще то, если вспомните, вся эта эпопея началась из-за MySQL иньекций. Мне нужно эту проблему решить раз и навсегда. А не то, как амперсанд лучше вытащить, GET запросом или из базы. Это не принципиально. Задачу эту можно решить, только зачем? Ведь важен не результат, он практического применения вряд ли найдет. А вот передача данных - это важно.
За ноль спасибо, гениальное - как просто! И еще про кавычки функция мне очень понравилась. А скрипт я заставлю работать, дело принципа. Не сегодня, конечно, и так второй день на смарку. | |
|
|
|
|
|
|
|
для: Николай2357
(20.08.2008 в 23:59)
| | Давайте постараемся убрать лишнии эмоции.
Про пробелы спросили Вы - я Вам ответил, но Вы почему-то этим раздражены.
> Сделал это не для решения задачи, а просто показать, что подходы бывают разными
Спасибо, но, мягко говоря, это не говорит о том, что раз такие подходы существуют, то их надо показывать :) От них надо избавляться.
> Я хочу выяснить то, чего до сих пор не знал.
Как это не покажется странным, но для того, чтобы что-то новое выяснить придётся решить задачу. Правильно решить. А не пытаться обмануть себя.
> Лучше расскажите, как из GET прочитать 0. Спать не буду, пока не придумаю.
<?php
$val = 0;
if( $val != '' )
{
# ....
}
?>
|
| |
|
|
|
|
|
|
|
для: BinLaden
(20.08.2008 в 23:10)
| | Ну вот, и Вы туда же. Не умею я наверное грамотно изъясняться.
>На деле покажите? Имею ввиду запихните это в скрипт, который по
Да пожалуйста, смотрите. Там далеко не все работает, но это работает точно. Кроме того, если уж пошла такая пьянка, в условиях четко сказано, использовать абсолютно любые символы. То есть и пробел. Как я понимаю, юзер по имени "два пробела амперсанд", это не юзер "один пробел амперсанд". У меня это тоже работает. Сделал это не для решения задачи, а просто показать, что подходы бывают разными.
>Но сам факт того, что Вы предлагаете такое решение только говорит о том, что Вы еще ничего не поняли...:(
Я не пытаюсь решить эту задачу на 100%!!!!! Я хочу выяснить то, чего до сих пор не знал.
Не знал и не знаю очень многого, и это проблема. А не то, что у меня подход другой. Лучше расскажите, как из GET прочитать 0. Спать не буду, пока не придумаю.
Спасибо. | |
|
|
|
|
|
|
|
для: Николай2357
(20.08.2008 в 22:44)
| | > Да это то просто:
На деле покажите? Имею ввиду запихните это в скрипт, который по ссылке http://test.inkz.ru/, чтобы все убедились, что это "просто".
Но сам факт того, что Вы предлагаете такое решение только говорит о том, что Вы еще ничего не поняли...:(
> Попробуйте набрать тот же пресловутый амперсанд с пробелом впереди. И где же тот пробел?
Он никуда не девался. Разве MySQL в конце строки при поиске пробелы подчищает и если в базе данных строка
, то её можно будет найти хоть по запросу , хоть по
Хотя тип поля и TINYTEXT, а не (VAR)CHAR какой-нибудь. | |
|
|
| |
|