문제

(NB : 예, 이것은 말도 안되는 질문이며,이 질문에 대한 답이 "아니오"라면 전적으로 놀랍지 않을 것입니다. :)

나는 XSLT 스타일 시트를 작성하여 XML 조각에서 의도적이고 비교할 수없는 계산을 의도적으로 수행합니다. 그것은 a의 구성 요소로 의도 된 것입니다 작업 증명 시스템 웹 브라우저에서 사용자의 입력이 필요하지 않은 일종의 보안 문자로 사용하려면 사용자가 데이터를 서버에 게시 할 때 계산 결과가 숨겨진 양식 요소로 제출됩니다. 양식 내용은 계산 된 값이 올바른 경우에만 허용됩니다. (계산은 서버가 사용자에게 기능에 입력 매개 변수를 저렴하게 제공 할 수있는 방식으로 구성되어 있으며, 서버는 많은 작업을 수행하지 않고 결과를 알고 있지만 사용자의 컴퓨터는 사이클을 결정하기 위해 사이클을 사용해야합니다. 결과.)

변환은 잘 작동하지만 불행히도 계산이 진행되는 동안 브라우저를 매달립니다. 내 목표는 사용자가 브라우저를 계속 사용하는 동안 이러한 계산을 실행하는 것이기 때문에 허용되지 않는 성가신 동작입니다. 변환을 배경으로 브라우저를 실행하는 동안 브라우저를 사용할 수있는 방법이 있습니까? 내가 생각한 한 가지 생각은 iframe에서 소스 XML 조각을로드하는 것이었지만,이 접근법을 사용하여 전혀 변환이 작동하도록 할 수 없었습니다. 나는 여기서 누군가가 이것에 대해 내 머리를 꺾기 전에 화려한 아이디어를 가지고 있는지 확인할 것이라고 생각했다. 브라우저가 작동하는 방식을 감안할 때 근본적으로 불가능한 일을하려고한다면 알아두면 좋을 것이다.

나는 이것을 JavaScript로 할 수 있다는 것을 알고 있지만,하지 않아도 좋을 것입니다. 어떤 아이디어?

편집하다: 여러분, 나는 recaptcha.net 및 기타 대안에 대해 알고 있습니다. 이것은 an입니다 실험. 저의 목표는 이론적 아이디어가 사용자에게 너무 번거롭지 않은 방식으로 연습하도록 감소 될 수 있는지 알아내는 것입니다. 대체 구현을 찾고 있지 않습니다. JavaScript가 포함되지 않는 암호화 적으로 강력한 보안 문자를 할 수있는 방법을 찾고 있습니다. (JavaScript를 사용하고 싶다면 JavaScript Hashcash 구현 중 하나를 사용하겠습니다.) 다른 브라우저 기반 Turing-Complete 언어는 XSLT입니다. 질문을받은 정신의 질문을 고려하십시오.

도움이 되었습니까?

해결책

나는 iframe에서 XSLT를 사용하고 있으며 잘 작동합니다. 아마도 당신이 실행중인 관련이없는 문제가있을 것입니다.

기계가 사용자 상호 작용없이 JavaScript없이 특정 값을 제출하려면 Meta Refresh 사용 사용을 고려하십시오.

  1. 웹 페이지에 작고 숨겨진 iframe을 XSLT 계산 엔진에 대한 스타일 프로세싱 지침을 포함하는 XML 파일을 가져 오는 URL을 가리 킵니다.
  2. 엔지니어 XSLT 파일을 엔지니어링하여 출력이 URL에 인코딩 된 계산 토큰으로 URL로 리디렉션을 생성하도록합니다. 즉 URL 계산 :

    u003Cmeta http-equiv="refresh" content="0;url=http://xyz.abc/captcha?......">

타원 섹션에 토큰이 포함되어 있습니다. 원칙적으로 일해야합니다.

반면에, 나는 XSLT가 이와 같은 것에 매우 유용하다는 것을 진지하게 의심합니다. 브라우저는 오래 걸리면 계산을 중단 할 수 있습니다. IFRAME에서도 차단 동작이 발생할 수 있습니다. 단일 코어 시스템에서는 비 블로킹 동작조차 효과적으로 차단 될 수 있습니다. XSLT 엔진의 차이는 모든 엔진이 충분히 빠르게 실행되는 변환을 찾기 위해 압박을 가하기 위해 어려움을 겪을 수 있습니다. 거의 즉시 불타고 있습니다.

나는 JavaScript가 이것에 대해 매우 좋을 것이라고 생각하지 않으며 XSLT는 아마도 적절하지 않을 것입니다. 실제로 이러한 계산을 원한다면 Silverlight는 더 나은 내기가 될 수 있습니다. 적어도 거기에서 모든 곳에서 합리적으로 빠르게 실행되는 코드를 작성할 수 있지만 미래의 엔진은 사소한 일을 할 수 없습니다 (원시 속도에 가까울 정도로 가깝습니다. CPU의 최적에 상당히 가깝습니다. 확실히 요인 10 이내에 올 수 있습니다.

다른 팁

XSLT 변환을 수행 할 수 없습니다 ~ 후에 페이지가로드되어 JavaScript가없는 동일한 페이지의 양식에 결과를 사용합니다. Iframe 솔루션이 작동하지 않는 이유는 모르겠지만, 그랬더라도 결과를 페이지의 양식으로 가져 오려면 자바 스크립트가 필요합니다.

저의 조언은 작고 빠른 JavaScript 기반 시스템을 사용하고 JavaScript가 비활성화 된 경우 Recaptcha에 폴백을 사용하는 것입니다. 작업 증명 CPU 집약적 인 것으로 만들 필요는 없으며, 모든 사용자 정의 솔루션은 스팸봇의 대다수 (전부는 아니더라도)를 버릴 것입니다.

예를 들어, 귀하의 페이지에는 같은 것이 포함될 수 있습니다

<input type="hidden" name="a" value="123" />
<input type="hidden" name="b" value="456" />
<input type="hidden" name="c" />

javaScript에서 c의 값을 (a+b)로 설정하십시오. 봇 메이커는 매우 간단한 보안 문자를 해결하기 위해 봇을 사이트에 특별히 조정해야합니다. 그리고 그들이 그렇게하지 않는다면 (그렇지 않음) 새로운 필드를 추가하여 A와 B에서 수행 할 작업을 정의하여 C를 얻습니다. 그리고 다시 적응하면 필드의 이름을 변경하십시오. 아마도 당신의 사이트가 Alexa의 Top 10에 있지 않으면 적응하지 않을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top