가칭) 텍스트 캡챠 ... 테스트 좀 부탁 드립니다. 정보
가칭) 텍스트 캡챠 ... 테스트 좀 부탁 드립니다.
본문
기존에 등록방지에 사용하던 이미지형 캡챠는 웹접근성에 위배(?) 된다고 하여 안되는 머리로 몇날 몇일을 고심하여 급조한 캡챠 프로그램 입니다.
음성지원이 되는 reCaptcha 등의 사용도 고려해 보았으나 다국어 지원이 되지 않는것 같습니다.
http://sir.co.kr/plugin/tcaptcha/sample.php
많은 테스트 부탁 드리며, 문제점은 댓글로 남겨주시면 바로 확인하여 가능한 부분이면 빨리(?) 반영해 놓겠습니다.
이번중 일요일까지 캡챠를 가장 먼저 뚫어 주시는 분께는 지운이 아빠가 사용하던 텀블러를 깨끗히 씻어서 착불로 보내 드리도록 하겠습니다.
감사합니다.
개발 참고사이트)
http://textcaptcha.com/demo

음성지원이 되는 reCaptcha 등의 사용도 고려해 보았으나 다국어 지원이 되지 않는것 같습니다.
http://sir.co.kr/plugin/tcaptcha/sample.php
많은 테스트 부탁 드리며, 문제점은 댓글로 남겨주시면 바로 확인하여 가능한 부분이면 빨리(?) 반영해 놓겠습니다.
이번중 일요일까지 캡챠를 가장 먼저 뚫어 주시는 분께는 지운이 아빠가 사용하던 텀블러를 깨끗히 씻어서 착불로 보내 드리도록 하겠습니다.
감사합니다.
개발 참고사이트)
http://textcaptcha.com/demo

추천
0
0
댓글 20개

산수 못하면 통과못하는 진실.

참고. 병균 옮아도 책임 못 집니다

좋습니다
더욱더 괜찮은거는
문근영 원빈 등등 인물을 마우스로 똑같이 그리는 캡챠형식이 좋을듯합니다. 정밀분석하며
사람의 두뇌 발전에 힘을 쓰게 만들고 노안걱정까지 걱정하여 나라에서 큰 수상을 내릴지도 모릅니다
섬세함과 고도에 집착력을 넣는 마우스로 안되는분들도 계시겠지만
걱정하지마십시요 놀라운 터치터치 터치펜! 지금 9302원에 구매가능합니다
[바로가기] 문의전화 [안받음]
더욱더 괜찮은거는
문근영 원빈 등등 인물을 마우스로 똑같이 그리는 캡챠형식이 좋을듯합니다. 정밀분석하며
사람의 두뇌 발전에 힘을 쓰게 만들고 노안걱정까지 걱정하여 나라에서 큰 수상을 내릴지도 모릅니다
섬세함과 고도에 집착력을 넣는 마우스로 안되는분들도 계시겠지만
걱정하지마십시요 놀라운 터치터치 터치펜! 지금 9302원에 구매가능합니다
[바로가기] 문의전화 [안받음]

zzzzzzzzzzzzzzzzzzzz

얼쿠 -_- 코멘트 수정하는데 답변 빠르시네요 더욱더 괜찮은 센스를 날리려고햇는데

작동 잘됩니다^^
학교다닐 때 산수공부 좀 더 잘 할 걸 그랬습니다.
그래도 제수준에는 딱 맞습니다.
두번씩이나 정답맞추었습니다.
그래도 제수준에는 딱 맞습니다.
두번씩이나 정답맞추었습니다.

그런데 이거 언제까지 해야하는거죠..
끝없이 계속나오는 질문..ㅠㅠ
끝없이 계속나오는 질문..ㅠㅠ

"정답"이라고 나오면 맞히신 겁니다.
이거 대체 얼마나 나오는거임...10분째 짬짬히하는데 끝이안보여요

"정답"이라고 나오면 맞히신 겁니다.
끝이안나게해논건가보군요 음 그냥닫기를 허허

이게 바로 지운아빠님이 이야기 하셨던 그 문제구나!

문제가 어렵네요 2개 풀고 포기 ㅡ.ㅡㅋ

매크로...만들면 근데 금방 뚫립니다. .한5번 시도하면 다시 갱신되는걸로 하셔야될듯요...
매크로로 1부터 숫자올라가서 대입하게만들었더니 몇초안에 뚫리는 문제점이..
매크로로 1부터 숫자올라가서 대입하게만들었더니 몇초안에 뚫리는 문제점이..

코드에 버그가 있었습니다. 다시 한번 테스트 부탁 드립니다.

분석기 만들수 있을거 같은데요
텍스트를 숫자로 기호로 치환하고 순서별 연산이 들어가면
간단한 봇을 만드는 형태로도 뚫릴거라 예상합니다.
경우의 수가 너무 적은게 문제 인거 같아요
텍스트를 숫자로 기호로 치환하고 순서별 연산이 들어가면
간단한 봇을 만드는 형태로도 뚫릴거라 예상합니다.
경우의 수가 너무 적은게 문제 인거 같아요

텀블러 준다는글에 후다닥 짰더니..
다시보니 "사용하던" 텀블러;;
제길;;
http://sir.co.kr/bbs/board.php?bo_table=cm_free&wr_id=841197
다시보니 "사용하던" 텀블러;;
제길;;
http://sir.co.kr/bbs/board.php?bo_table=cm_free&wr_id=841197
어제 밤에 잠깐보고 소스 만들다, 테스트 페이지가 폼을 전송하는 것이 아니라, 말았는데, 실제로는 폼을 전송하는 구조일테고 이건 그냥 뚤리는 구조입니다. 캡차는 이미지가 아니라 텍스트이면 분석이 가능합니다. 만들다만 소스를 올립니다:
<!-- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -->
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>sir.co.kr - tcaptcha뚫기</title>
</head>
<body topmargin="0" leftmargin="0" >
tcaptcha 를 뚫어볼까요...?
<button id="post_btn" onclick="get_textCaptcha();">켑찹뿌리기</button> <br/>
<input type="text" value="" size="50" id="display_text" /><br />
<input type="text" value="" size="5" id="display_number" /><br />
<script type="text/javascript">
var test_url = 'http://sir.co.kr/plugin/tcaptcha/sample.php';
var tcaptcha_run_url = 'http://sir.co.kr/plugin/tcaptcha/run.php';
var transport = 'http://localhost/test/sir.tcaptcha/transport.php';
var phpsessid = '';
var req = getHttpRequest();
function getHttpRequest()
{
var req = null;
if (window.ActiveXObject) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP"); // 5.0 이후 버전
}
catch(e) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP"); // 5.0 이전 버전
}
catch(e1) {
req = null;
}
}
}
else if (window.XMLHttpRequest) {
try {
req = new XMLHttpRequest();
}
catch (e) {
req = null;
}
}
return req;
}
function get_textCaptcha()
{
var param = 'transport_url='+encodeURI(tcaptcha_run_url)+'&transport_method=get';
param += '&t='+(new Date).getTime();
req.open('POST', transport, true);
req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
req.setRequestHeader('content-length', param.length);
req.setRequestHeader('Connection', 'close');
req.onreadystatechange = function() {
if (req.readyState == 4) {
if (req.status == 200) {
// do nothing;
if (req.responseText.length) {
//alert(req.responseText);
display_it(req.responseText, translate(req.responseText));
}
}
}
};
req.send(param);
}
function display_it(text, number)
{
document.getElementById('display_text').value = text;
document.getElementById('display_number').value = number;
}
function trim(str)
{
return str.replace(/^\s+/, '').replace(/\s+$/, '');
}
<!-- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -->
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>sir.co.kr - tcaptcha뚫기</title>
</head>
<body topmargin="0" leftmargin="0" >
tcaptcha 를 뚫어볼까요...?
<button id="post_btn" onclick="get_textCaptcha();">켑찹뿌리기</button> <br/>
<input type="text" value="" size="50" id="display_text" /><br />
<input type="text" value="" size="5" id="display_number" /><br />
<script type="text/javascript">
var test_url = 'http://sir.co.kr/plugin/tcaptcha/sample.php';
var tcaptcha_run_url = 'http://sir.co.kr/plugin/tcaptcha/run.php';
var transport = 'http://localhost/test/sir.tcaptcha/transport.php';
var phpsessid = '';
var req = getHttpRequest();
function getHttpRequest()
{
var req = null;
if (window.ActiveXObject) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP"); // 5.0 이후 버전
}
catch(e) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP"); // 5.0 이전 버전
}
catch(e1) {
req = null;
}
}
}
else if (window.XMLHttpRequest) {
try {
req = new XMLHttpRequest();
}
catch (e) {
req = null;
}
}
return req;
}
function get_textCaptcha()
{
var param = 'transport_url='+encodeURI(tcaptcha_run_url)+'&transport_method=get';
param += '&t='+(new Date).getTime();
req.open('POST', transport, true);
req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
req.setRequestHeader('content-length', param.length);
req.setRequestHeader('Connection', 'close');
req.onreadystatechange = function() {
if (req.readyState == 4) {
if (req.status == 200) {
// do nothing;
if (req.responseText.length) {
//alert(req.responseText);
display_it(req.responseText, translate(req.responseText));
}
}
}
};
req.send(param);
}
function display_it(text, number)
{
document.getElementById('display_text').value = text;
document.getElementById('display_number').value = number;
}
function trim(str)
{
return str.replace(/^\s+/, '').replace(/\s+$/, '');
}
function translate(text)
{
//<strong>5</strong>, <strong>이십</strong> 그리고 <strong>25</strong> ~ 중에서 가장 큰 수는?
//~ 중에서 가장 작은 수는?
//여섯 더하기 9 ?
//10 더하기 열셋 ?
//열하나 + 15 = ?
var matches = text.match(/^(.*) 중에서 가장 (큰|작은) 수는 ?$/);
if (matches) {
var num = matches[1];
var min_max = matches[2];
num = num.replace('그리고', ',').replace('<strong>', '').replace('</strong>', '');
var num_arr = num.split(',');
var ret = 0;
for (var i = 0; i < num_arr.length; i++) {
if (i == 0) ret = intify(trim(num_arr[i]));
else {
var tmp = intify(trim(num_arr[i]));
if (min_max == '큰' && (ret < tmp)) ret = tmp;
else if (min_max == '작은' && (ret > tmp)) ret = tmp;
}
}
return ret;
}
var num_arr = text.split(' ');
if (num_arr) {
var n1 = intify(num_arr[0]);
var op = num_arr[1];
var n2 = intify(num_arr[2]);
switch(op) {
case '+':
case '더하기':
return n1 + n2;
case '-':
case '빼기':
return n1 - n2;
case '*':
case '곱하기':
return n1 * n2;
case '/':
case '나누기':
return n1 / n2;
default: return null;
}
}
return null;
}
function intify(input)
{
if (input.test(/^([0-9]+)$/)) return parseInt(input);
// 여기는 아직 완성이 안됐음...
}
// 그냥 n millis 동안 멈추기
function pause(milis)
{
var now = new Date();
var exitTime = now.getTime()+milis;
while (true) {
now = new Date();
if (now.getTime() > exitTime) return;
}
}
</script>
</body>
</html>
trnasport.php는 예전에 잠깐 사용한 jacobswell 아이디로 쓴 글에 있으니까 찾아보면 나옵니다.
{
//<strong>5</strong>, <strong>이십</strong> 그리고 <strong>25</strong> ~ 중에서 가장 큰 수는?
//~ 중에서 가장 작은 수는?
//여섯 더하기 9 ?
//10 더하기 열셋 ?
//열하나 + 15 = ?
var matches = text.match(/^(.*) 중에서 가장 (큰|작은) 수는 ?$/);
if (matches) {
var num = matches[1];
var min_max = matches[2];
num = num.replace('그리고', ',').replace('<strong>', '').replace('</strong>', '');
var num_arr = num.split(',');
var ret = 0;
for (var i = 0; i < num_arr.length; i++) {
if (i == 0) ret = intify(trim(num_arr[i]));
else {
var tmp = intify(trim(num_arr[i]));
if (min_max == '큰' && (ret < tmp)) ret = tmp;
else if (min_max == '작은' && (ret > tmp)) ret = tmp;
}
}
return ret;
}
var num_arr = text.split(' ');
if (num_arr) {
var n1 = intify(num_arr[0]);
var op = num_arr[1];
var n2 = intify(num_arr[2]);
switch(op) {
case '+':
case '더하기':
return n1 + n2;
case '-':
case '빼기':
return n1 - n2;
case '*':
case '곱하기':
return n1 * n2;
case '/':
case '나누기':
return n1 / n2;
default: return null;
}
}
return null;
}
function intify(input)
{
if (input.test(/^([0-9]+)$/)) return parseInt(input);
// 여기는 아직 완성이 안됐음...
}
// 그냥 n millis 동안 멈추기
function pause(milis)
{
var now = new Date();
var exitTime = now.getTime()+milis;
while (true) {
now = new Date();
if (now.getTime() > exitTime) return;
}
}
</script>
</body>
</html>
trnasport.php는 예전에 잠깐 사용한 jacobswell 아이디로 쓴 글에 있으니까 찾아보면 나옵니다.