Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / вопрос по CAPTCHA / 25 сообщений из 25, страница 1 из 1
02.10.2009, 08:32:08
    #36228723
killmeplease
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
привет!
делаю капчу. суть такова: пользователю показывается некая картинка и у него просят написать что на ней. при этом по имени картинки должно быть нельзя догадаться о ее содержании. и оно должно генерироваться таким образом чтобы изображение и имя не были связаны.

сейчас решение созрело такое: завести таблицу, где хранилась бы информация об идентификаторе сессии, картинке капчи и расшифровке (текст который должен ввести пользователь). при попадании пользователя на страницу регистрации, генерируется соответствующая запись в бд. при успешном прохождении регистрации или при завершении сессии запись удаляется.

пойдет ли такое решение?
или можно придумать что-то попроще?
спасибо.
...
Рейтинг: 0 / 0
02.10.2009, 09:38:34
    #36228808
WYPMAH
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
killmeplease
куки, сессия.. зачем база?

_______________
AnimeBay - аниме магазин, который Вас не разочарует.
...
Рейтинг: 0 / 0
02.10.2009, 09:46:06
    #36228828
Khusainov_Heckfy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
на кодпроджекте посмотрите, там реализована капча во всяком разном виде, но без БД
...
Рейтинг: 0 / 0
02.10.2009, 10:48:47
    #36228983
killmeplease
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
база нужна чтобы картинку хранить... из сессии ее с клиентского браузера не достанешь ведь?
...
Рейтинг: 0 / 0
02.10.2009, 11:12:49
    #36229064
Khusainov_Heckfy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
А как вы собираетесь кончину сессии ловить?
Браузер закрыл на крестик если юзер, как узнать что сессия закрылась?
...
Рейтинг: 0 / 0
02.10.2009, 11:13:18
    #36229066
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
killmepleaseбаза нужна чтобы картинку хранить...
Картинку каптчи? :) У Вас будет одна и та же картинка всегда? )
...
Рейтинг: 0 / 0
02.10.2009, 11:37:59
    #36229137
WYPMAH
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
killmepleaseбаза нужна чтобы картинку хранить... из сессии ее с клиентского браузера не достанешь ведь?
рисуйте в реал-тайме, зачем хранить картинки с парой букв или цифр?

_______________
AnimeBay - аниме магазин, который Вас не разочарует.
...
Рейтинг: 0 / 0
02.10.2009, 11:42:23
    #36229156
itsandy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
с сессией тоже вариант нормальный. проверка на начало новой сессии может быть типа такой
if(Session["capthcaText"]==null)
{
// сгенерить новую капчу и записать в сессию
}
else if(Session["capthcaText"].ToString()==CapthcaTextBox.Text)
{
// введено правильно
}

и т.д.
...
Рейтинг: 0 / 0
02.10.2009, 11:43:48
    #36229161
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
WYPMAHрисуйте в реал-тайме, зачем хранить картинки с парой букв или цифр?
...
Рейтинг: 0 / 0
02.10.2009, 11:56:13
    #36229202
Khusainov_Heckfy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
МСУWYPMAHрисуйте в реал-тайме, зачем хранить картинки с парой букв или цифр?
+1
...
Рейтинг: 0 / 0
03.10.2009, 12:51:17
    #36230687
killmeplease
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
что вы имеете ввиду под "рисуйте в реалтайме"? моя нихт ферштейн.

пока что не всё ясно. в общем то в аспнете я нуб так что не судите строго.

поясню немного мою задачу. у меня в капче не цифры а животные и предметы. они берутся с гугла:


var CText = Utils.GetCAPTCHAtxt();
var req = System.Net.WebRequest.Create("http://images.google.com/images?q=" + CText);
var sr = new StreamReader(req.GetResponse().GetResponseStream());
var responseString = sr.ReadToEnd();
sr.Close();

string imageURLSignature = @"imgurl\\x3d(?<URL>http:[^\\%]+)\\x26";
var regExpr = new Regex(imageURLSignature, RegexOptions.Compiled);
var imgURL = regExpr.Matches(responseString, 0)[new Random().Next(5)].Groups["URL"].Value;
req = System.Net.WebRequest.Create(imgURL);
var img = System.Drawing.Image.FromStream(req.GetResponse().GetResponseStream());

Session["cIMG"] = img;
Session["cTXT"] = CText;

таким образом я сохранил всю инфу в сессию.
теперь такой вопрос: как на странице всё это дело отобразить? то есть, как изображение из сессии засунуть в img на странице?

пробовал создавать httpHandler для указания его в img src, чтобы он картинку возвращал, но в нем сессию не видно. там context.Session == null. видно я чегото не вкуриваю.

подсобите плиз!
...
Рейтинг: 0 / 0
03.10.2009, 17:26:00
    #36230854
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
killmepleaseпробовал создавать httpHandler для указания его в img src, чтобы он картинку возвращал, но в нем сессию не видно. там context.Session == null. видно я чегото не вкуриваю.

подсобите плиз!Копали в правильном направлении, но на одну лопату не докопались. :)

Вот иллюстрация, как должно работать:
Код: plaintext
1.
<img id="imcapcha" src="Handler1.ashx" /><input type="button" value="R" onclick="recapcha();" />

Здесь имеем картинку с капчей и кнопку "поменять капчу". Код (JavaScript) замены капчи далее.

Код: plaintext
1.
2.
3.
4.
var capchaNum =  0 ;
function recapcha(t) {
        document.getElementById('imcapcha').src = 'Handler1.ashx?v=' + (capchaNum++);
}

Код на сервере

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.SessionState;
using System.Drawing;
using System.Drawing.Imaging;

namespace WebApplication1
{
    public class Handler1 : IHttpHandler, IRequiresSessionState
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.Clear();
            context.Response.CacheControl = "no-cache";
            capcha(context);
            context.Response.End();
        }
	void capcha(HttpContext context)
	{
		/*
		создаем битмап, придумываем случайное число, сохраняем его в сессии,
		рисуем и отдаем в респонсе.

		Конечно, такая простая капча легко распознается программно, но это
		всего лишь иллюстрация механизма, а рисовать число лучше какой-нибудь
		библиотекой для капчи, чтоб получилась красивая картинка :)
		*/
		Bitmap b = new Bitmap(50, 26);
		Graphics g = Graphics.FromImage(b);
		Random r = new Random();
		string ss = (r.Next(8999) + 1000).ToString();
		context.Session["scap"] = ss;

		g.DrawString(ss, new Font("Courier New", 12), Brushes.Green, new PointF(2, 2));

		context.Response.ContentType = "image/gif"; // обязательно контент тайп
		b.Save(context.Response.OutputStream, ImageFormat.Gif);
	}
        public bool IsReusable { get { return false; } }
    }
}

Далее при отправки формы остается лишь сравнить введенныю юзером капчу с тем, что в context.Session["scap"]

Обратите внимание на код на розовом фоне. Это - то самое, без чего context.Session == null :)
...
Рейтинг: 0 / 0
05.10.2009, 10:40:09
    #36232137
killmeplease
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
спасибо! это работает

а зачем нужен capchaNum?
...
Рейтинг: 0 / 0
05.10.2009, 13:36:31
    #36232650
WYPMAH
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
killmepleaseа зачем нужен capchaNum?
чтобы отобразилось новое изображение.. в большинстве случаев пишут дату/время, но можно и как в этом случае

_______________
AnimeBay - аниме магазин, который Вас не разочарует.
...
Рейтинг: 0 / 0
05.10.2009, 17:19:32
    #36233441
killmeplease
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
ок спасибо
...
Рейтинг: 0 / 0
07.10.2009, 07:55:29
    #36236406
Max_Payne
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
Может проще использовать готовый компонет MSCaptcha?
...
Рейтинг: 0 / 0
07.10.2009, 09:40:19
    #36236543
killmeplease
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
моя гугло-капча круче
...
Рейтинг: 0 / 0
07.10.2009, 09:45:25
    #36236555
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
Капчи надо самому делать, а не использовать чьи-то... . На них на всех уже давно антикапчи имеются.
Только правильно написать капчу - не так просто.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
16.09.2011, 14:30:09
    #37443596
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
Яростный Меч, скажите, пожалуйста, почемукапча не отображается на картинке?
вместо неё виден альтернативный текст.

Это в MainPage.aspx:
Код: plaintext
1.
2.
3.
4.
5.
<img id="imcapcha" src="Handler1.ashx" alt="captcha" /><input type="button" value="R" onclick="recapcha();" />

var capchaNum =  0 ;
function recapcha(t) {
        document.getElementById('imcapcha').src = 'Handler1.ashx?v=' + (capchaNum++);
}


это в Handler1.ashx.cs:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.SessionState;
using System.Drawing;
using System.Drawing.Imaging;

namespace WebApplication1
{
    public class Handler1 : IHttpHandler, IRequiresSessionState
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.Clear();
            context.Response.CacheControl = "no-cache";
            capcha(context);
            context.Response.End();
        }
	void capcha(HttpContext context)
	{	
		Bitmap b = new Bitmap(50, 26);
		Graphics g = Graphics.FromImage(b);
		Random r = new Random();
		string ss = (r.Next(8999) + 1000).ToString();
		context.Session["scap"] = ss;

		g.DrawString(ss, new Font("Courier New", 12), Brushes.Green, new PointF(2, 2));

		context.Response.ContentType = "image/gif";
		b.Save(context.Response.OutputStream, ImageFormat.Gif);
	}
        public bool IsReusable { get { return false; } }
    }
}
...
Рейтинг: 0 / 0
16.09.2011, 14:49:35
    #37443648
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
Когда только учился писать на аспнет, написал такую капчу:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
<%@ Page Language="C#" %>
<%@ import Namespace="System.Drawing" %>
<%@ import Namespace="System.Drawing.Imaging" %>
<%@ import Namespace="System.Drawing.Drawing2D" %>
<script runat="server">

private void Page_Load(object sender, EventArgs e)
{
Response.ContentType = "image/jpeg";
Response.Clear();
Response.BufferOutput = true;
Font[] f = new Font[7];
f[0] = new Font(
"Arial", 18, FontStyle.Italic);
f[1] = new Font(
"Arial", 18, FontStyle.Bold);
f[2] = new Font(
"Arial", 16, FontStyle.Regular);
f[3] = new Font(
"Arial", 20, FontStyle.Strikeout);
f[4] = new Font(
"Verdana", 20, FontStyle.Italic);
f[5] = new Font(
"Verdana", 18, FontStyle.Strikeout);
f[6] = new Font(
"Verdana", 20, FontStyle.Strikeout);    

int height = 90;
int width = 180;
int hh = 50;
int ww = 40;
int inc = 20;
int r1;
int txt1;
int f1;
string letters="";
Random r = new Random();
Color c = Color.FromArgb(0xc8, 0xe0, 0xd8);
Bitmap bmp = new Bitmap(
width, height, PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(bmp);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.Clear(c);
for (int i = 0; i < 7; i++)
{
    r1 = r.Next(-10, 10);
    txt1 = r.Next(0, 10);
    f1 = r.Next(0, 7);
    Bitmap bmp1 = new Bitmap(
    ww, hh, PixelFormat.Format32bppArgb);
    Graphics g1 = Graphics.FromImage(bmp1);
    g1.SmoothingMode = SmoothingMode.AntiAlias;
    g1.Clear(Color.Transparent);
    g1.RotateTransform(r1);
    g1.DrawString("  "+txt1.ToString()+"  ", f[f1],
    SystemBrushes.WindowText, new PointF(0, 7));
    letters = letters + txt1.ToString();
    g.DrawImage(bmp1, 20 * i, 15);
    bmp1.Dispose();
    g1.Dispose();
}
Session.Add("letters", letters);
bmp.Save(Response.OutputStream, ImageFormat.Jpeg);
g.Dispose();
bmp.Dispose();
Response.Flush();
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title></title>
</head>
<body>
    <form id="Form1" runat="server">
    </form>
</body>
</html>

Понятное дело, что надо было хендлером воспользоваться. Но, ребята, которые у меня в конторе раскритиковали сам алгоритм, короче, написали антикапчу.
...
Рейтинг: 0 / 0
16.09.2011, 15:00:54
    #37443666
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
ShSerge, спасибо за код.
Как я понял вы всё делали внутри скрипта, т.е. на клиенте (в браузере).
Но ведь тогда можно будет поймать этот код каптчи.
...
Рейтинг: 0 / 0
16.09.2011, 15:07:24
    #37443682
няка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
StudentsShSerge, спасибо за код.
Как я понял вы всё делали внутри скрипта, т.е. на клиенте (в браузере).
Но ведь тогда можно будет поймать этот код каптчи.

мдя, хочешь плач, а хочешь смейся
...
Рейтинг: 0 / 0
16.09.2011, 15:09:22
    #37443687
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
Students,

Это не на клиенте и не в браузере. Так иногда можно писать. Вообще-то, всё, что там написано на сишарпе, можно перенести в код. Это так написано, чтобы лишних файлов не делать.
...
Рейтинг: 0 / 0
16.09.2011, 15:16:15
    #37443699
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
StudentsКак я понял вы всё делали внутри скрипта, т.е. на клиенте (в браузере)
ShSerge
Код: plaintext
<script runat=">>>server<<<">
...
Рейтинг: 0 / 0
16.09.2011, 15:17:23
    #37443701
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по CAPTCHA
Блин, этот предпросмотр когда-нибудь починят?
Пошел жаловаться...
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / вопрос по CAPTCHA / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]