Раньше я использовал,что-то похожее, но это абсолютно бесполезно, потому что злоумышленник может получить доступ к коду и тогда, никаких проблем с подбором паролей у него не будет, хотя в определенной ситуации это может быть полезно
спасибо за статью,
Немного не в тему вопрос, а почему от перебора нужна капча, можно ведь просто ограничить количество попыток (например, 10 достаточно в любом нормальном случае), а потом 5 минут не принимать, пароль с этого IP?
А как этот string сделать secret, я уже где-то на хабре предлагал генерировать нестандартный хеш или стандартный хеш от измененного пароля и меня просветили, что все, что лежит на сервере может в любой момент стать несекретным.
Я, конечно, не спец, но пароли пользователей оригинальность обычно не отличаются и можно по хорошему словарю нагенерировать хешей (хоть sha1, хоть md5) заранее, а когда в руки попадет база, только проверить, нет ли в ней известных хешей, а для md5(md5(pass)) генерить придется слишком дофига, это немного компенсирует невозможность заставить пользователя выбирать пароль по всем правилам.
Прижали к стенке :) нельзя не согласиться, что когда все библиотеки идут в комплекте, это удобно.
кстати, using namespace System::Net::Sockets;
конструкция присущая оригинальному C++
нововведения .NET можно рассмотреть в такой строчке: TcpListener^ server = gcnew TcpListener( localAddr,port );
здесь используется мусоросборщик, упрощающий работу с памятью.
Приведен пример на C++ и .NET Framework, на C# он выглядел бы аккуратнее, я его привел, чтобы показать, что программы не C++ никогда не выглядят так, как описал автор статьи. Выше я написал о кроссплатформенной библиотеке для C++, просто не стал искать пример с ее использованием.
Если в Ruby можно будет использовать Win API, значит можно работать с сетью и без socket, да и сам socket в виндовс версии реализован именно через Win API (другой возможности нет), то есть сравнение выглядит так:
С++ -> Win API
Java -> Socket -> Win API (в яве я не силен и модуль для работы с сокетами назову Socket)
Ruby -> socket -> Win API
Именно библиотека делает код в последних двух случаях кроссплатформенным, и простым, почему не используется никакая библиотека для C++ ???, ведь найти ее не сложно, набрал в Google "c++ socket library" первый результат http://www.alhem.net/Sockets/, пожалуйста Windows, Linux, Mac OS, Solaris. C++ это абсолютно кроссплатформенный язык, и он есть даже на тех платформах где руби никогда не появится.
Единственное преимущество Ruby в том, что библиотеки включены в основной пакет, и я его, конечно, признаю, с другой стороны практически каждая среда разработки для C++ предоставляет обертку для socket, в win такая обертка включена в .NET Framework (да и у Borland С++ Builder такая обертка есть, правда он вроде загнулся).
Так что то, что C++ в этом сравнении представлен не верно, для меня не вызывает сомнений. К тому же на хабре уже не раз говорилось о некорректности сравнения языка без фреймворков/библиотек и с ними. Вроде PHP vs Ruby on Rails
>> задача была сравнить подходы в программировании сокетов.
в c++ нет стандартной библиотеки сокетов, что не есть гуд, но в каждой среде есть своя библиотека, можно было использовать .NET Framework
А сравнение языков Java и Ruby с библиотками и голого C++ это не сравнение, а издевательство. Попробуйте написать в Ruby или Java c помощью win api, выйдет не меньше кода.
Вот кстати серверная часть из примеров .NET Framework:
#using <System.dll>
using namespace System;
using namespace System::IO;
using namespace System::Net;
using namespace System::Net::Sockets;
using namespace System::Text;
using namespace System::Threading;
Разница между кодом на С++ и Ruby - заметна не вооруженным глазом :)
Не в укор руби который я все собираюсь выучить, но ради восстановления справедливости нужно заметить, что в данном случае автор в руби использовал надстройку socket, а в C++ работал с win api напрямую, поэтому получился такой код, я на C++ писал кое какие сетевые приложеия и могу точно сказать, если бы использовались классы обертки для сокетов то код различался бы только синтаксисом, а не размером.
но как защищать систему с открытым кодом
неужели вся надежда, на то, что удасться недопустить злоумышленника к базе
а 10 вполне достаточно, чтобы вспомнить
Немного не в тему вопрос, а почему от перебора нужна капча, можно ведь просто ограничить количество попыток (например, 10 достаточно в любом нормальном случае), а потом 5 минут не принимать, пароль с этого IP?
Я, конечно, не спец, но пароли пользователей оригинальность обычно не отличаются и можно по хорошему словарю нагенерировать хешей (хоть sha1, хоть md5) заранее, а когда в руки попадет база, только проверить, нет ли в ней известных хешей, а для md5(md5(pass)) генерить придется слишком дофига, это немного компенсирует невозможность заставить пользователя выбирать пароль по всем правилам.
>Пока есть .gif, прозрачность .png не сильно требуется.
>>Такая прозрачность как в gif отлично работает в png в любом експлорере, проблемы только с альфа-каналом.
>>>А какое отношение прозрачность имеет к полупрозрачности, которую собственно и фиксит альфалоадер?
:)
Представил ситуацию:
сидишь ночью, за компом, соседи празнуют что-то, музыка на весь дом, а уже за полночь и тут менты подъезжают, прямо на Хабр :)
А если напишешь на Ньюс2, что у нас проблемы с демократией, то они сразу прибывают к подъезду :)
Сообщил разработчикам, пусть поправят.
alert($.browser.version);
в IE6 показывает: 4.6
хотя
alert(navigator.userAgent.toLowerCase());
показывает: mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; mra 4.6 (build 01425); .net clr 2.0.50727)
кстати,
using namespace System::Net::Sockets;
конструкция присущая оригинальному C++
нововведения .NET можно рассмотреть в такой строчке:
TcpListener^ server = gcnew TcpListener( localAddr,port );
здесь используется мусоросборщик, упрощающий работу с памятью.
С++ -> Win API
Java -> Socket -> Win API (в яве я не силен и модуль для работы с сокетами назову Socket)
Ruby -> socket -> Win API
Именно библиотека делает код в последних двух случаях кроссплатформенным, и простым, почему не используется никакая библиотека для C++ ???, ведь найти ее не сложно, набрал в Google "c++ socket library" первый результат http://www.alhem.net/Sockets/, пожалуйста Windows, Linux, Mac OS, Solaris. C++ это абсолютно кроссплатформенный язык, и он есть даже на тех платформах где руби никогда не появится.
Единственное преимущество Ruby в том, что библиотеки включены в основной пакет, и я его, конечно, признаю, с другой стороны практически каждая среда разработки для C++ предоставляет обертку для socket, в win такая обертка включена в .NET Framework (да и у Borland С++ Builder такая обертка есть, правда он вроде загнулся).
Так что то, что C++ в этом сравнении представлен не верно, для меня не вызывает сомнений. К тому же на хабре уже не раз говорилось о некорректности сравнения языка без фреймворков/библиотек и с ними. Вроде PHP vs Ruby on Rails
в c++ нет стандартной библиотеки сокетов, что не есть гуд, но в каждой среде есть своя библиотека, можно было использовать .NET Framework
А сравнение языков Java и Ruby с библиотками и голого C++ это не сравнение, а издевательство. Попробуйте написать в Ruby или Java c помощью win api, выйдет не меньше кода.
Вот кстати серверная часть из примеров .NET Framework:
#using <System.dll>
using namespace System;
using namespace System::IO;
using namespace System::Net;
using namespace System::Net::Sockets;
using namespace System::Text;
using namespace System::Threading;
void main()
{
try
{
Int32 port = 13000;
IPAddress^ localAddr = IPAddress::Parse( "127.0.0.1" );
TcpListener^ server = gcnew TcpListener( localAddr,port );
server->Start();
array^bytes = gcnew array(256);
String^ data = nullptr;
while ( true )
{
TcpClient^ client = server->AcceptTcpClient();
data = nullptr;
NetworkStream^ stream = client->GetStream();
Int32 i;
while ( i = stream->Read( bytes, 0, bytes->Length ) )
{
data = Text::Encoding::ASCII->GetString( bytes, 0, i );
data = data->ToUpper();
array^msg = Text::Encoding::ASCII->GetBytes( data );
stream->Write( msg, 0, msg->Length );
}
client->Close();
}
}
catch ( SocketException^ e )
{
}
}
хотел поставить тег pre, но что-то совсем плохо с ним, выручил
Не в укор руби который я все собираюсь выучить, но ради восстановления справедливости нужно заметить, что в данном случае автор в руби использовал надстройку socket, а в C++ работал с win api напрямую, поэтому получился такой код, я на C++ писал кое какие сетевые приложеия и могу точно сказать, если бы использовались классы обертки для сокетов то код различался бы только синтаксисом, а не размером.
AddType application/x-httpd-php5 .css
а в самом файле примерно так:
<?php
ob_start ("ob_gzhandler");
header("Content-type: text/css; charset: UTF-8");
header('Pragma: no-cache'); //при разработке
$link_color = '#1a51ab';
$hovered_link_color = 'red';
$page_bg = '#f0f6ff';
?>
a { color:<?=$link_color?>; }
не очень красиво получается, но можно написать простенький парсер для таких css:
$link_color = #1a51ab;
$hovered_link_color = red;
$page_bg = #f0f6ff;
a { color: $link_color; }
и перенаправить обработку css на него с помощью mod_rewrite