안녕하십니까? 사용자 에이전트를 확인하지 않고 javascript/php로 브라우저를 검색하는 방법이 있습니까? 나는 사용자 에이전트를 가짜로 만든 사람이 아닌 방문자 (소켓 & CURL 시도)를 탐지하려고합니다.사용자 에이전트를 확인하지 않고 브라우저를 검색합니다.
답변
신뢰할 수 없으면 아니오. 누구든지 실제 클라이언트를 위장 할 수 있습니다.
잘 작동하는 봇은 자체 사용자 에이전트를 사용합니다. 당신은 어쨌든 비 잘 행동 한 봇을 생각하면 안됩니다.
사용자 에이전트가 신뢰할 수없고 쉽게 스푸핑되었다고 동의합니다. 그러나 스푸핑을 좀 더 세게 만들기 위해 일부 JavaScript를 빌드 할 수 있습니다. 자바 스크립트 엔진이없는 것을 차별화 할 수 있습니다. 내 대답보기 : https://stackoverflow.com/a/12571513/399704
자바 스크립트 또는 사용자 에이전트 문자열을 통해 검색하는 것 이상의 것이 있습니다.
사용자 에이전트 문자열을 위장 할 때 브라우저를 식별하는 방법에 대해 조사했습니다. 많은 브라우저 (때로는 버전 차이가 거의없고 때로는 큰 버전)가 다른 순서로 다른 헤더 정보를 전송한다는 사실을 알게되었습니다. 일반적으로 헤더 정보가 서버로 전송 된 순서를 감지하여 모든 대형 브라우저 (Firefox, IE, Chrome 등)를 구분할 수 있습니다. 모든 것들에도 불구하고 이것은 또한 스푸핑 될 수 있습니다. 자세한 내용은
는 여기에 읽기 : http://hide.network/why-does-changing-your-user-agent-almost-come-to-nothing/
그것은 조금 감지하기 어려운,하지만 가능합니다. PHP에서는 단순히 함수 getallheaders()을 사용하여이 작업을 수행 할 수 있습니다. 테스트 할 때 브라우저에서 보내는 것과 동일한 헤더 정보 순서를 제공합니다. 모든 키의 실제 색인 만 검색하면됩니다.
<?php
foreach (getallheaders() as $name => $value)
{
echo "$name: $value<br />\n";
}
?>
편집 :
나는 PHP의 일부 주요 브라우저를 감지하는 스크립트를 썼다. 처음에는 페이지 링크를 클릭하여 보낼 리퍼러를 잊어 버렸습니다. 나는 IE와 FF의 referer가있는 목록에 헤더를 추가했는데 아마도 도움이 될 것입니다. hide.network/header.php에 스크립트를 업로드했지만 두 개 이상의 링크를 게시 할 수 없습니다.
<?php
$headerInformation = array();
// declaring and filling pre-defined header orders of browsers
$browserInformation = array
(
"browserNames" => array
(
"Mozilla Firefox 37.0",
"Mozilla Firefox 37.0 with referer",
"Internet Explorer 11",
"Internet Explorer 11 with referer",
"Internet Explorer 8",
"Google Chrome 42",
"SRWare Iron 37"
),
"headerInformation" => array
(
array("host", "user-agent", "accept", "accept-language", "accept-encoding", "connection", "cache-control"),
array("host", "user-agent", "accept", "accept-language", "accept-encoding", "referer", "connection", "cache-control"),
array("accept", "accept-language", "user-agent", "accept-encoding", "host", "dnt", "connection"),
array("accept", "referer", "accept-language", "user-agent", "accept-encoding", "host", "dnt", "connection"),
array("accept", "accept-language", "user-agent", "accept-encoding", "host", "connection"),
array("host", "connection", "cache-control", "accept", "user-agent", "accept-encoding", "accept-language"),
array("host", "connection", "accept", "user-agent", "accept-encoding", "accept-language")
),
"identScore" => array(0, 0, 0, 0, 0)
);
// parsing all header values
foreach (getallheaders() as $name => $value)
{
array_push($headerInformation, strtolower($name));
}
// calculating possibility for each browser
for($i = 0; $i < count(10); $i++)
{
for($j = 0; $j < count($browserInformation["browserNames"]); $j++)
{
$currentPossibility = count(array_intersect_assoc($browserInformation["headerInformation"][$j], $headerInformation))/count($headerInformation) * 100;
$currentPossibility = round($currentPossibility, 2);
$browserInformation["identScore"][$j] = $currentPossibility;
}
}
// sort array
array_multisort($browserInformation["identScore"], SORT_DESC, SORT_NUMERIC,
$browserInformation["browserNames"], $browserInformation["headerInformation"]);
// output
for($i = 0; $i < count(10); $i++)
{
for($j = 0; $j < count($browserInformation["browserNames"]); $j++)
{
echo "possibility " . $browserInformation["browserNames"][$j] . ": " . $browserInformation["identScore"][$j] . " %<br />";
}
}
// output original sent header
echo "<pre>";
var_dump($headerInformation);
echo "</pre>";
?>
- 1. GWT에서 사용자 에이전트를 찾는 방법
- 2. Django ModelForm의 유효성을 확인하지 않고
- 3. IE9는 IE7 사용자 에이전트를 보여줍니다.
- 4. 사용자 에이전트를 기반으로하는 WP 플러그인
- 5. 기존 데이터를 확인하지 않고 외래 키 만들기
- 6. Silverlight 브라우저를 열지 않고 테스트하십시오.
- 7. iPhone 웹 브라우저와 iPhone 앱 사용자 에이전트를 구분하십시오
- 8. 안드로이드의 mediaplayer에서 기본 사용자 에이전트를 변경하는 방법
- 9. Opera 브라우저에서 수동으로 사용자 에이전트를 입력하려면 어떻게해야합니까?
- 10. 레일에서 사용자 에이전트를 자동 검색하는 방법
- 11. 루비에서 맞춤 사용자 에이전트를 설정하는 방법
- 12. 컨트롤러 마젠타에서 사용자 에이전트를 얻는 방법은 무엇입니까?
- 13. Android에서 브라우저의 사용자 에이전트를 찾는 방법
- 14. 보고 고객에게 표시되는 제품이 사용자 에이전트를 따르도록하십시오.
- 15. 현재 사용자 에이전트를 얻는 방법은 무엇입니까?
- 16. Visual Basic에서 ReadXml로 사용자 에이전트를 설정하십시오.
- 17. iOS의 어떤 애플리케이션이 이러한 사용자 에이전트를 생성합니까?
- 18. wurfl 파일에 비표준 사용자 에이전트를 추가하려면 어떻게해야합니까?
- 19. 브라우저를 잠그지 않고 JavaScript 실행을 중지하십시오.
- 20. SQL 주입을 피하기 위해 사용자 에이전트를 데이터베이스에 저장 하시겠습니까?
- 21. Mechanize in Rails에 사용자 정의 사용자 에이전트를 설정하는 방법
- 22. 브라우저를 종료하지 않고 무한 루프를 이스케이프 처리합니다.
- 23. 오이에서 브라우저를 열지 않고 셀렌을 실행하십시오.
- 24. 브라우저를 사용하지 않고 Flash를 사용하지 않고 글꼴을 포함시키는 방법은 무엇입니까?
- 25. 은 페이스 북에서 사용자 정보를 검색합니다.
- 26. MIB를 지원하지 않고 SNMP 에이전트를 사용할 수 있습니까?
- 27. 그리드에 레코드가 없으면 database.how를 확인하지 않고 "레코드가 없습니다"라고 말해야합니다.
- 28. Python을 사용하여 확인하지 않고 피어에서 SSL 인증서 받기
- 29. 1,000 개의 주소를 만들고 확인하지 않고 이메일 생성을 테스트하려면 어떻게해야합니까?
- 30. 가변 길이 인수를 길이를 확인하지 않고 함수에 전달합니까?