From a078db3ce50553b9c36b7448477215edef114b7a Mon Sep 17 00:00:00 2001 From: Aravinth Manivannan Date: Mon, 30 Oct 2023 18:08:03 +0530 Subject: [PATCH] 5eeaf559c7841686ef54a799db712a51c14bfa28 --- .hugo_build.lock | 0 404.html | 150 +---- about/index.html | 191 +----- blog/december-2021-monthly-report/index.html | 252 +------ blog/february-2023-monthly-report/index.html | 222 +------ blog/index.html | 228 +------ blog/index.xml | 108 +-- blog/introducing-mcaptcha-net/index.html | 244 +------ ...fffad281cd7ba_53366_20x0_resize_box_2.png} | Bin ...ffad281cd7ba_53366_500x0_resize_box_2.png} | Bin ...ffad281cd7ba_53366_600x0_resize_box_2.png} | Bin ...ffad281cd7ba_53366_700x0_resize_box_2.png} | Bin ...fffad281cd7ba_53366_800x0_resize_box_2.png | Bin 0 -> 43683 bytes ...fffad281cd7ba_53366_800x0_resize_box_3.png | Bin 33 -> 0 bytes ...ffad281cd7ba_53366_900x0_resize_box_2.png} | Bin ...5b6b3f0d9a9a_322974_20x0_resize_box_2.png} | Bin ...b6b3f0d9a9a_322974_500x0_resize_box_2.png} | Bin ...b6b3f0d9a9a_322974_600x0_resize_box_2.png} | Bin ...b6b3f0d9a9a_322974_700x0_resize_box_2.png} | Bin ...b6b3f0d9a9a_322974_800x0_resize_box_2.png} | Bin ...b6b3f0d9a9a_322974_900x0_resize_box_2.png} | Bin blog/july-2022-monthly-report/index.html | 266 +------- blog/june-2022-monthly-report/index.html | 219 +------ blog/may-2022-monthly-report/index.html | 380 +++-------- blog/pow-performance/index.html | 414 +----------- blog/say-hello-to-mcaptcha/index.html | 255 +------- blog/sitemap.xml | 67 +- blog/survey/index.html | 215 +----- community/index.html | 187 +----- contact/index.html | 180 +---- contributors/aravinth-manivannan/index.html | 230 +------ contributors/aravinth-manivannan/index.xml | 109 +--- contributors/index.html | 162 +---- contributors/index.xml | 23 +- docs/api/browser/index.html | 257 +------- docs/api/index.html | 207 +----- docs/api/index.xml | 45 +- docs/api/mcaptcha-system/index.html | 229 +------ docs/api/pow-sha256/index.html | 247 +------ docs/api/sitemap.xml | 25 +- docs/help/faq/index.html | 216 +----- docs/help/index.html | 201 +----- docs/help/index.xml | 32 +- docs/help/sitemap.xml | 18 +- docs/help/troubleshooting/index.html | 227 +------ docs/index.html | 278 +------- docs/index.xml | 11 +- docs/self-hosting/bare-metal/index.html | 364 ++--------- docs/self-hosting/dependencies/index.html | 313 +-------- docs/self-hosting/docker/index.html | 269 +------- docs/self-hosting/getting-started/index.html | 225 +------ docs/self-hosting/index.html | 212 +----- docs/self-hosting/index.xml | 55 +- docs/self-hosting/sitemap.xml | 32 +- docs/sitemap.xml | 129 +--- docs/user-manual/cli/index.html | 368 ++--------- .../how-to-mcaptcha-without-js/index.html | 227 +------ docs/user-manual/index.html | 201 +----- docs/user-manual/index.xml | 34 +- docs/user-manual/sitemap.xml | 18 +- .../configuring-difficulty-factor/index.html | 263 +------- ...832a52b37239b_23312_20x0_resize_box_2.png} | Bin ...32a52b37239b_23312_500x0_resize_box_2.png} | Bin ...32a52b37239b_23312_600x0_resize_box_2.png} | Bin ...32a52b37239b_23312_700x0_resize_box_2.png} | Bin ...32a52b37239b_23312_800x0_resize_box_2.png} | Bin ...32a52b37239b_23312_900x0_resize_box_2.png} | Bin ...3a2d78fa015c8_26636_20x0_resize_box_2.png} | Bin ...a2d78fa015c8_26636_500x0_resize_box_2.png} | Bin ...a2d78fa015c8_26636_600x0_resize_box_2.png} | Bin ...a2d78fa015c8_26636_700x0_resize_box_2.png} | Bin ...a2d78fa015c8_26636_800x0_resize_box_2.png} | Bin ...a2d78fa015c8_26636_900x0_resize_box_2.png} | Bin ...83a1abb694c9a_63890_20x0_resize_box_2.png} | Bin ...3a1abb694c9a_63890_500x0_resize_box_2.png} | Bin ...3a1abb694c9a_63890_600x0_resize_box_2.png} | Bin ...3a1abb694c9a_63890_700x0_resize_box_2.png} | Bin ...3a1abb694c9a_63890_800x0_resize_box_2.png} | Bin ...3a1abb694c9a_63890_900x0_resize_box_2.png} | Bin docs/webmasters/faq/index.html | 239 +------ ...97af482e11285_26958_20x0_resize_box_2.png} | Bin ...7af482e11285_26958_500x0_resize_box_2.png} | Bin ...7af482e11285_26958_600x0_resize_box_2.png} | Bin ...7af482e11285_26958_700x0_resize_box_2.png} | Bin ...7af482e11285_26958_800x0_resize_box_2.png} | Bin docs/webmasters/index.html | 213 +----- docs/webmasters/index.xml | 56 +- docs/webmasters/installing-captcha/index.html | 362 ++--------- ...00c2c83dd77fb_28299_20x0_resize_box_2.png} | Bin ...0c2c83dd77fb_28299_500x0_resize_box_2.png} | Bin ...0c2c83dd77fb_28299_600x0_resize_box_2.png} | Bin ...0c2c83dd77fb_28299_700x0_resize_box_2.png} | Bin ...00c2c83dd77fb_28299_800x0_resize_box_2.png | Bin 0 -> 30236 bytes ...00c2c83dd77fb_28299_800x0_resize_box_3.png | Bin 33 -> 0 bytes ...e26fb8eb1b427_65746_20x0_resize_box_2.png} | Bin ...26fb8eb1b427_65746_500x0_resize_box_2.png} | Bin ...26fb8eb1b427_65746_600x0_resize_box_2.png} | Bin ...26fb8eb1b427_65746_700x0_resize_box_2.png} | Bin ...26fb8eb1b427_65746_800x0_resize_box_2.png} | Bin ...26fb8eb1b427_65746_900x0_resize_box_2.png} | Bin ...31adaa9c5a5e6_30108_20x0_resize_box_2.png} | Bin ...1adaa9c5a5e6_30108_500x0_resize_box_2.png} | Bin ...1adaa9c5a5e6_30108_600x0_resize_box_2.png} | Bin ...1adaa9c5a5e6_30108_700x0_resize_box_2.png} | Bin ...1adaa9c5a5e6_30108_800x0_resize_box_2.png} | Bin ...1adaa9c5a5e6_30108_900x0_resize_box_2.png} | Bin docs/webmasters/sitemap.xml | 32 +- docs/webmasters/terminology/index.html | 297 +-------- donate/index.html | 188 +----- ...b2d59d7a34dd33_7547_20x0_resize_box_2.png} | Bin ...2d59d7a34dd33_7547_500x0_resize_box_2.png} | Bin ...2d59d7a34dd33_7547_600x0_resize_box_2.png} | Bin ...2d59d7a34dd33_7547_700x0_resize_box_2.png} | Bin ...2d59d7a34dd33_7547_800x0_resize_box_2.png} | Bin ...2d59d7a34dd33_7547_900x0_resize_box_2.png} | Bin index.html | 195 +----- ...a412051d7fd12a5b0a675c6053b7d9dc9c2cc98.js | 614 ------------------ ...d1e2d2bd650220c94c2ef3aeffb4dc2ef6551f5.js | 1 + ...ceafc036a93bff8f9423911024d524d5e8174c1.js | 610 ----------------- index.xml | 113 +--- ...5d49b0692a89702d12c76f9b8d315ea33c0b87.css | 2 +- ...3186cc8bc280b1077b7e37c2d64f36f118099bb.js | 1 + ...39da8aef9d6d5e62b76711fa93d9663860b1926.js | 1 - privacy-policy/index.html | 201 +----- security/index.html | 362 +---------- sitemap.xml | 293 +-------- thanks/index.html | 202 +----- 127 files changed, 655 insertions(+), 12132 deletions(-) create mode 100644 .hugo_build.lock rename blog/introducing-mcaptcha-net/{installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_20x0_resize_box_3.png => installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_20x0_resize_box_2.png} (100%) rename blog/introducing-mcaptcha-net/{installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_500x0_resize_box_3.png => installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_500x0_resize_box_2.png} (100%) rename blog/introducing-mcaptcha-net/{installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_600x0_resize_box_3.png => installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_600x0_resize_box_2.png} (100%) rename blog/introducing-mcaptcha-net/{installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_700x0_resize_box_3.png => installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_700x0_resize_box_2.png} (100%) create mode 100644 blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_800x0_resize_box_2.png delete mode 100644 blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_800x0_resize_box_3.png rename blog/introducing-mcaptcha-net/{installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_900x0_resize_box_3.png => installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_900x0_resize_box_2.png} (100%) rename blog/introducing-mcaptcha-net/{working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_20x0_resize_box_3.png => working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_20x0_resize_box_2.png} (100%) rename blog/introducing-mcaptcha-net/{working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_500x0_resize_box_3.png => working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_500x0_resize_box_2.png} (100%) rename blog/introducing-mcaptcha-net/{working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_600x0_resize_box_3.png => working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_600x0_resize_box_2.png} (100%) rename blog/introducing-mcaptcha-net/{working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_700x0_resize_box_3.png => working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_700x0_resize_box_2.png} (100%) rename blog/introducing-mcaptcha-net/{working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_800x0_resize_box_3.png => working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_800x0_resize_box_2.png} (100%) rename blog/introducing-mcaptcha-net/{working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_900x0_resize_box_3.png => working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_900x0_resize_box_2.png} (100%) rename docs/webmasters/configuring-difficulty-factor/{new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_20x0_resize_box_3.png => new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_20x0_resize_box_2.png} (100%) rename docs/webmasters/configuring-difficulty-factor/{new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_500x0_resize_box_3.png => new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_500x0_resize_box_2.png} (100%) rename docs/webmasters/configuring-difficulty-factor/{new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_600x0_resize_box_3.png => new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_600x0_resize_box_2.png} (100%) rename docs/webmasters/configuring-difficulty-factor/{new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_700x0_resize_box_3.png => new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_700x0_resize_box_2.png} (100%) rename docs/webmasters/configuring-difficulty-factor/{new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_800x0_resize_box_3.png => new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_800x0_resize_box_2.png} (100%) rename docs/webmasters/configuring-difficulty-factor/{new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_900x0_resize_box_3.png => new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_900x0_resize_box_2.png} (100%) rename docs/webmasters/configuring-difficulty-factor/{new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_20x0_resize_box_3.png => new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_20x0_resize_box_2.png} (100%) rename docs/webmasters/configuring-difficulty-factor/{new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_500x0_resize_box_3.png => new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_500x0_resize_box_2.png} (100%) rename docs/webmasters/configuring-difficulty-factor/{new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_600x0_resize_box_3.png => new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_600x0_resize_box_2.png} (100%) rename docs/webmasters/configuring-difficulty-factor/{new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_700x0_resize_box_3.png => new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_700x0_resize_box_2.png} (100%) rename docs/webmasters/configuring-difficulty-factor/{new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_800x0_resize_box_3.png => new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_800x0_resize_box_2.png} (100%) rename docs/webmasters/configuring-difficulty-factor/{new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_900x0_resize_box_3.png => new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_900x0_resize_box_2.png} (100%) rename docs/webmasters/faq/{copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_20x0_resize_box_3.png => copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_20x0_resize_box_2.png} (100%) rename docs/webmasters/faq/{copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_500x0_resize_box_3.png => copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_500x0_resize_box_2.png} (100%) rename docs/webmasters/faq/{copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_600x0_resize_box_3.png => copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_600x0_resize_box_2.png} (100%) rename docs/webmasters/faq/{copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_700x0_resize_box_3.png => copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_700x0_resize_box_2.png} (100%) rename docs/webmasters/faq/{copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_800x0_resize_box_3.png => copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_800x0_resize_box_2.png} (100%) rename docs/webmasters/faq/{copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_900x0_resize_box_3.png => copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_900x0_resize_box_2.png} (100%) rename docs/webmasters/faq/{sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_20x0_resize_box_3.png => sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_20x0_resize_box_2.png} (100%) rename docs/webmasters/faq/{sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_500x0_resize_box_3.png => sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_500x0_resize_box_2.png} (100%) rename docs/webmasters/faq/{sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_600x0_resize_box_3.png => sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_600x0_resize_box_2.png} (100%) rename docs/webmasters/faq/{sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_700x0_resize_box_3.png => sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_700x0_resize_box_2.png} (100%) rename docs/webmasters/faq/{sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_800x0_resize_box_3.png => sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_800x0_resize_box_2.png} (100%) rename docs/webmasters/installing-captcha/{mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_20x0_resize_box_3.png => mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_20x0_resize_box_2.png} (100%) rename docs/webmasters/installing-captcha/{mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_500x0_resize_box_3.png => mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_500x0_resize_box_2.png} (100%) rename docs/webmasters/installing-captcha/{mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_600x0_resize_box_3.png => mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_600x0_resize_box_2.png} (100%) rename docs/webmasters/installing-captcha/{mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_700x0_resize_box_3.png => mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_700x0_resize_box_2.png} (100%) create mode 100644 docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_800x0_resize_box_2.png delete mode 100644 docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_800x0_resize_box_3.png rename docs/webmasters/installing-captcha/{new-sitekey-btn_hu4dc550a2e568d01f004e26fb8eb1b427_65746_20x0_resize_box_3.png => new-sitekey-btn_hu4dc550a2e568d01f004e26fb8eb1b427_65746_20x0_resize_box_2.png} (100%) rename docs/webmasters/installing-captcha/{new-sitekey-btn_hu4dc550a2e568d01f004e26fb8eb1b427_65746_500x0_resize_box_3.png => new-sitekey-btn_hu4dc550a2e568d01f004e26fb8eb1b427_65746_500x0_resize_box_2.png} (100%) rename docs/webmasters/installing-captcha/{new-sitekey-btn_hu4dc550a2e568d01f004e26fb8eb1b427_65746_600x0_resize_box_3.png => new-sitekey-btn_hu4dc550a2e568d01f004e26fb8eb1b427_65746_600x0_resize_box_2.png} (100%) rename docs/webmasters/installing-captcha/{new-sitekey-btn_hu4dc550a2e568d01f004e26fb8eb1b427_65746_700x0_resize_box_3.png => new-sitekey-btn_hu4dc550a2e568d01f004e26fb8eb1b427_65746_700x0_resize_box_2.png} (100%) rename docs/webmasters/installing-captcha/{new-sitekey-btn_hu4dc550a2e568d01f004e26fb8eb1b427_65746_800x0_resize_box_3.png => new-sitekey-btn_hu4dc550a2e568d01f004e26fb8eb1b427_65746_800x0_resize_box_2.png} (100%) rename docs/webmasters/installing-captcha/{new-sitekey-btn_hu4dc550a2e568d01f004e26fb8eb1b427_65746_900x0_resize_box_3.png => new-sitekey-btn_hu4dc550a2e568d01f004e26fb8eb1b427_65746_900x0_resize_box_2.png} (100%) rename docs/webmasters/installing-captcha/{new-sitekey-easy-mode-filled_hu0c237370199481610ab31adaa9c5a5e6_30108_20x0_resize_box_3.png => new-sitekey-easy-mode-filled_hu0c237370199481610ab31adaa9c5a5e6_30108_20x0_resize_box_2.png} (100%) rename docs/webmasters/installing-captcha/{new-sitekey-easy-mode-filled_hu0c237370199481610ab31adaa9c5a5e6_30108_500x0_resize_box_3.png => new-sitekey-easy-mode-filled_hu0c237370199481610ab31adaa9c5a5e6_30108_500x0_resize_box_2.png} (100%) rename docs/webmasters/installing-captcha/{new-sitekey-easy-mode-filled_hu0c237370199481610ab31adaa9c5a5e6_30108_600x0_resize_box_3.png => new-sitekey-easy-mode-filled_hu0c237370199481610ab31adaa9c5a5e6_30108_600x0_resize_box_2.png} (100%) rename docs/webmasters/installing-captcha/{new-sitekey-easy-mode-filled_hu0c237370199481610ab31adaa9c5a5e6_30108_700x0_resize_box_3.png => new-sitekey-easy-mode-filled_hu0c237370199481610ab31adaa9c5a5e6_30108_700x0_resize_box_2.png} (100%) rename docs/webmasters/installing-captcha/{new-sitekey-easy-mode-filled_hu0c237370199481610ab31adaa9c5a5e6_30108_800x0_resize_box_3.png => new-sitekey-easy-mode-filled_hu0c237370199481610ab31adaa9c5a5e6_30108_800x0_resize_box_2.png} (100%) rename docs/webmasters/installing-captcha/{new-sitekey-easy-mode-filled_hu0c237370199481610ab31adaa9c5a5e6_30108_900x0_resize_box_3.png => new-sitekey-easy-mode-filled_hu0c237370199481610ab31adaa9c5a5e6_30108_900x0_resize_box_2.png} (100%) rename donate/{mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_20x0_resize_box_3.png => mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_20x0_resize_box_2.png} (100%) rename donate/{mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_500x0_resize_box_3.png => mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_500x0_resize_box_2.png} (100%) rename donate/{mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_600x0_resize_box_3.png => mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_600x0_resize_box_2.png} (100%) rename donate/{mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_700x0_resize_box_3.png => mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_700x0_resize_box_2.png} (100%) rename donate/{mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_800x0_resize_box_3.png => mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_800x0_resize_box_2.png} (100%) rename donate/{mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_900x0_resize_box_3.png => mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_900x0_resize_box_2.png} (100%) delete mode 100644 index.min.39f65050268d816f7a57ee89577dd6b7c861ed858fdbfd100931444f0bb1609ea23d7d4ddc1997c8401f4553ca412051d7fd12a5b0a675c6053b7d9dc9c2cc98.js create mode 100644 index.min.80cc62918990f0b9afd15b81ea43df0bc0090a2419660eb4a32b4d122db3bdd007faabd824064bd5d275cbeb3d1e2d2bd650220c94c2ef3aeffb4dc2ef6551f5.js delete mode 100644 index.min.b59e9d73d7e970542c9660dbd7dbb266a7f7d320c46b1383623b1d9c0cf9cab69f0068a6c0f09951328ea22eeceafc036a93bff8f9423911024d524d5e8174c1.js rename main.b63ce50dfa61fad6110b3083ff8c73329c5faa56efa9fce74542ba32665b6f205859f41203427020164409ce1a5ad12d0114f490f7a4b511dc1f99b633255661.css => main.c5ebec6f69f6fedddbd813e6fbeec336e7050cd17bb6fef39275d0956f6115409a7083647b41bca8cc86d5c0a35d49b0692a89702d12c76f9b8d315ea33c0b87.css (99%) create mode 100644 main.min.993b2b4c58b07e7a4bb3423cf18ccd78a85d0063680c0fc9bf6d9cc02be98e08793034d984dd8f7c60ad5b70f3186cc8bc280b1077b7e37c2d64f36f118099bb.js delete mode 100644 main.min.bc2465e4e1abda257c622bf89b85235da437778b3e3f80e01762312382cc27d4e50a8a4de22e464dc82e3a61039da8aef9d6d5e62b76711fa93d9663860b1926.js diff --git a/.hugo_build.lock b/.hugo_build.lock new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html index b20e0c6..5250309 100644 --- a/404.html +++ b/404.html @@ -1,146 +1,4 @@ - - - - - - - - - - - -404 Page not found - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
-
-
-

Page not found :(

-

The page you are looking for doesn't exist or has been moved.

-
-
-
- -
-
- - - - - - - - - +404 Page not found - mCaptcha

Page not found :(

The page you are looking for doesn't exist or has been moved.

\ No newline at end of file diff --git a/about/index.html b/about/index.html index ff807d3..ab25834 100644 --- a/about/index.html +++ b/about/index.html @@ -1,190 +1,17 @@ - - - - - - - - - - - - - - About - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- -
- -

About

-

-

mCaptcha is a kickass CAPTCHA systems that gives (DDoS) +About - mCaptcha

About

mCaptcha is a kickass CAPTCHA systems that gives (DDoS) attackers a run for their money. And we do all of this without tracking -your users. Oh and did I mention our UX is great?

-

At mCaptcha, we believe in digital freedom and privacy and so we built +your users. Oh and did I mention our UX is great?

At mCaptcha, we believe in digital freedom and privacy and so we built a proof-of-work based CAPTCHA system that doesn’t track. Seriously, no tracking. But that isn’t the killer feature, our system doesn’t require the user to pick cars or ID sidewalks — our system does it’s -thing(usually at the click of a button) and gets out of the way.

-

Philosophy

-

Man has has come so far only because our ancestors chose to share their +thing(usually at the click of a button) and gets out of the way.

Philosophy

Man has has come so far only because our ancestors chose to share their knowledge with others. If everything was labeled intellectual property, we might still be stuck in Stone Age. The idea of intellectual property is alien to us. For this reason, all of our source code is freely -available(both as in freedom and beers) at our GitHub.

-

People

-
-
- -
-
- - - - - - - - - +Security Advisor

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/blog/december-2021-monthly-report/index.html b/blog/december-2021-monthly-report/index.html index dfdcc54..69f7ee9 100644 --- a/blog/december-2021-monthly-report/index.html +++ b/blog/december-2021-monthly-report/index.html @@ -1,244 +1,22 @@ - - - - - - - - - - - - - - December, 2021: Monthly Report - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- -
- -
-
-

December, 2021: Monthly Report

-

Posted December 23, 2021 by Aravinth Manivannan ‐ 2 min read

-

Last Edited June 14, 2022

- -

-

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

-

Hello and welcome to the first edition of the monthly report!

-

I believe free software like mCaptcha is critical to a healthy internet +December, 2021: Monthly Report - mCaptcha

December, 2021: Monthly Report

Posted December 23, 2021 by Aravinth Manivannan ‐ 2 min read

Last Edited June 14, 2022

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

Hello and welcome to the first edition of the monthly report!

I believe free software like mCaptcha is critical to a healthy internet but being a one-person show, there’s hardly any accountability in the way software is built. I hope, through monthly reports, I can explain the logic and intentions behind decisions taken in the development -process.

-

This month, the following things were accomplished:

-

1. Full LibreJS Compliance

-

The CAPTCHA widget and the admin dashboard are 100% LibreJS compliant!

-
- Screenshot of mCaptcha admin dashboard with GNU LibreJS extension's report in frame.LibreJS reports that all scripts in this webpage are accepted(and hence free software) and are licensed under the AGPL license. - -
LibreJS report of the dashboard webpage
-
-
- Screenshot of mCaptcha client-side widget(I'm-not-a-robot widget) with GNU LibreJS extension's report in frame. LibreJS reports that all scripts in this webpage are accepted(and hence free software) and are licensed under the X11(aka MIT license). It should also detect the Apache licensing but I probably botched it up. - -
LibreJS report of the CAPTCHA widget webpage
-
-

2. JavaScript PolyFill

-

mCaptcha relied on a WebAssembly(WASM) port of the proof-of-work +process.

This month, the following things were accomplished:

1. Full LibreJS Compliance

The CAPTCHA widget and the admin dashboard are 100% LibreJS compliant!

Screenshot of mCaptcha admin dashboard with GNU LibreJS extension's report in frame.LibreJS reports that all scripts in this webpage are accepted(and hence free software) and are licensed under the AGPL license.
LibreJS report of the dashboard webpage
Screenshot of mCaptcha client-side widget(I'm-not-a-robot widget) with GNU LibreJS extension's report in frame. LibreJS reports that all scripts in this webpage are accepted(and hence free software) and are licensed under the X11(aka MIT license). It should also detect the Apache licensing but I probably botched it up.
LibreJS report of the CAPTCHA widget webpage

2. JavaScript PolyFill

mCaptcha relied on a WebAssembly(WASM) port of the proof-of-work algorithm used in mCaptcha. This meanth browsers without WASM support -couldn’t process CAPTCHAs. This month, a pure JavaScript(TypeScript, -technically) implementation - was released to -overcome this limitation.

-

3. Integration libraries for Vanilla JS, React and Svelte:

-

To make migration from existing CAPTCHA deployments to mCaptha, -integration libraries for Vanilla -JS, React +couldn’t process CAPTCHAs. This month, a pure JavaScript(TypeScript, +technically) implementation was released to +overcome this limitation.

3. Integration libraries for Vanilla JS, React and Svelte:

To make migration from existing CAPTCHA deployments to mCaptha, +integration libraries for Vanilla +JS, React Js and -Svelte with +Svelte with similar APIs very similar to that of Google’s reCAPTCHA and Cloudflare’s -hCaptcha.

- -

4. Beginner friendly CAPTCHA configuration options.

-

The original configuration panel offers a comprehensive but daunting -task for folks that are justgetting started with mCaptcha.

-
- Screenshot of mCaptcha admin dashboard CAPTCHA creation form with advance configuration options - -
CAPTCHA creation with advance configuration options
-
-

A new CAPTCHA creation format is rolled out which generates a +hCaptcha.

4. Beginner friendly CAPTCHA configuration options.

The original configuration panel offers a comprehensive but daunting +task for folks that are justgetting started with mCaptcha.

Screenshot of mCaptcha admin dashboard CAPTCHA creation form with advance configuration options
CAPTCHA creation with advance configuration options

A new CAPTCHA creation format is rolled out which generates a configuration from familiar metrics like average, peak and traffic that -took the user’s website down.

-
- Screenshot of mCaptcha admin dashboard CAPTCHA creation form with easy configuration options - -
CAPTCHA creation with easy configuration options
-
-

Of course, the advance option is available and can always be swished to -at any moment!

- -
- - -

Edit this page on git.batsense.net

- -
-
- -
-
- - - - - - - - - +took the user’s website down.

Screenshot of mCaptcha admin dashboard CAPTCHA creation form with easy configuration options
CAPTCHA creation with easy configuration options

Of course, the advance option is available and can always be swished to +at any moment!

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/blog/february-2023-monthly-report/index.html b/blog/february-2023-monthly-report/index.html index 7388604..b31752c 100644 --- a/blog/february-2023-monthly-report/index.html +++ b/blog/february-2023-monthly-report/index.html @@ -1,218 +1,20 @@ - - - - - - - - - - - - - - February, 2023: Monthly Report - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- -
- -
-
-

February, 2023: Monthly Report

-

Posted March 8, 2023 by Aravinth Manivannan ‐ 2 min read

-

Last Edited March 9, 2023

- -

-

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

-

Hello and welcome to the (August 2022 to) February, 2023 monthly report!

-

TL;DR

-

Gusted and I secured funding from NLnet to work +February, 2023: Monthly Report - mCaptcha

February, 2023: Monthly Report

Posted March 8, 2023 by Aravinth Manivannan ‐ 2 min read

Last Edited March 9, 2023

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

Hello and welcome to the (August 2022 to) February, 2023 monthly report!

TL;DR

Gusted and I secured funding from NLnet to work on mCaptcha in 2023, we suffered an outage from 15 January to February -6, polyfill benchmarking support in mCaptcha

-

We have funding!

-

Gusted and I applied and secured funding through -2023 development is funded through the NGI0 -Entrust Fund, via NLnet.

-

The full list of tasks that we’ll be working on in the period is is +6, polyfill benchmarking support in mCaptcha

We have funding!

Gusted and I applied and secured funding through +2023 development is funded through the NGI0 +Entrust Fund, via NLnet.

The full list of tasks that we’ll be working on in the period is is available -here.

-

Infrastructure outage: 15 January, 2023 to February 6, 2023

-

A hard disk on of the servers hosting mCaptcha infrastructure failed, +here.

Infrastructure outage: 15 January, 2023 to February 6, 2023

A hard disk on of the servers hosting mCaptcha infrastructure failed, which caused the outage. Fixing the hard disk lead to additional problems, the fan on that server was failing and we couldn’t get spares -sooner.

-

We had current backups, so there was no data loss.

-

Going forward, we are planning to create Infrastructure-as-Code to fully +sooner.

We had current backups, so there was no data loss.

Going forward, we are planning to create Infrastructure-as-Code to fully restore all mCaptcha infrastructure, so that in the even of an outage, -we could restore our infrastructure in much shorter duration.

-

mCaptcha/survey now includes polyfill benchmarking

-

mCaptcha/survey runs benchmarks with mCaptcha’s PoW algorithm to collect +we could restore our infrastructure in much shorter duration.

mCaptcha/survey now includes polyfill benchmarking

mCaptcha/survey runs benchmarks with mCaptcha’s PoW algorithm to collect statistics on how mCaptcha performs on various browsers and devices. So far, we’ve only been running benchmarks with the WebAssembly -implementation. This pull request added support for running benchmarks +implementation. This pull request added support for running benchmarks with the JavaScript polyfill implementation on browsers without -WebAssembly support.

- -
- - -

Edit this page on git.batsense.net

- -
-
- -
-
- - - - - - - - - +WebAssembly support.

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/blog/index.html b/blog/index.html index f4ac1b9..59efc7e 100644 --- a/blog/index.html +++ b/blog/index.html @@ -1,224 +1,4 @@ - - - - - - - - - - - - - - Blog - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
-
-
-

Blog

-
-
-
-
-

Introducing mCaptcha net

-

A network of mCaptcha instances sharing PoW stats to make mCaptcha more efficient and accessible

-

Posted October 19, 2023 by Aravinth Manivannan ‐ 2 min read

-

Last Edited October 21, 2023

-

-
-
-
-

February, 2023: Monthly Report

-

Gusted and I secured funding from NLnet to work on mCaptcha in 2023, we suffered an outage from 15 January to February 6, polyfill benchmarking support in mCaptcha

-

Posted March 8, 2023 by Aravinth Manivannan ‐ 2 min read

-

Last Edited March 9, 2023

-

-
-
-
-

July, 2022: Monthly Report

-

Codeberg is trying out mCaptcha, Gitea is getting mCaptcha support, mCaptcha supports MariaDB, I've applied for NLnet and Open Tech Fund, documentation is updated: tutorials and glossary is added and glue libraries have new releases.

-

Posted August 4, 2022 by Aravinth Manivannan ‐ 2 min read

-

Last Edited February 13, 2023

-

-
-
-
-

June, 2022: Monthly Report

-

mCaptcha is successfully incorporated in India and ideas for mCaptcha commercial operations

-

Posted July 7, 2022 by Aravinth Manivannan ‐ 2 min read

-

Last Edited July 7, 2022

-

-
-
-
-

May, 2022: Monthly Report

-

Python bindings to mCaptcha PoW, DDoS effectiveness measurement, major refactoring to prepare for support for other databases, We also tried to test its DoS defence effectiveness, and some exciting news regarding managed hosting!

-

Posted June 10, 2022 by Aravinth Manivannan ‐ 4 min read

-

Last Edited June 14, 2022

-

-
-
-
-

December, 2021: Monthly Report

-

New features, improved accessibility and software integrations

-

Posted December 23, 2021 by Aravinth Manivannan ‐ 2 min read

-

Last Edited June 14, 2022

-

-
-
-
-

Survey

-

We are conducting a survey to benchmark and gather performance metrics of our system on various devices

-

Posted October 28, 2021 by Aravinth Manivannan ‐ 1 min read

-

Last Edited December 23, 2021

-

-
-
-
-

PoW performance

-

PoW performance of native and WASM implementations. Does the native implementation have and edge over the WASM library?

-

Posted September 1, 2021 by Aravinth Manivannan ‐ 2 min read

-

Last Edited September 1, 2021

-

-
-
-
-

Say hello to mCaptcha

-

Introducing mCaptcha, a kickass CAPTCHA systems that gives (DDoS) attackers a run for their money. Oh and UX is great too!

-

Posted May 26, 2021 by Aravinth Manivannan ‐ 2 min read

-

Last Edited December 2, 2021

-

-
-
-
-
-
- -
-
- - - - - - - - - +Blog - mCaptcha

Blog

Introducing mCaptcha net

A network of mCaptcha instances sharing PoW stats to make mCaptcha more efficient and accessible

Posted October 19, 2023 by Aravinth Manivannan ‐ 2 min read

Last Edited October 21, 2023

February, 2023: Monthly Report

Gusted and I secured funding from NLnet to work on mCaptcha in 2023, we suffered an outage from 15 January to February 6, polyfill benchmarking support in mCaptcha

Posted March 8, 2023 by Aravinth Manivannan ‐ 2 min read

Last Edited March 9, 2023

July, 2022: Monthly Report

Codeberg is trying out mCaptcha, Gitea is getting mCaptcha support, mCaptcha supports MariaDB, I've applied for NLnet and Open Tech Fund, documentation is updated: tutorials and glossary is added and glue libraries have new releases.

Posted August 4, 2022 by Aravinth Manivannan ‐ 2 min read

Last Edited February 13, 2023

June, 2022: Monthly Report

mCaptcha is successfully incorporated in India and ideas for mCaptcha commercial operations

Posted July 7, 2022 by Aravinth Manivannan ‐ 2 min read

Last Edited July 7, 2022

May, 2022: Monthly Report

Python bindings to mCaptcha PoW, DDoS effectiveness measurement, major refactoring to prepare for support for other databases, We also tried to test its DoS defence effectiveness, and some exciting news regarding managed hosting!

Posted June 10, 2022 by Aravinth Manivannan ‐ 4 min read

Last Edited June 14, 2022

December, 2021: Monthly Report

New features, improved accessibility and software integrations

Posted December 23, 2021 by Aravinth Manivannan ‐ 2 min read

Last Edited June 14, 2022

Survey

We are conducting a survey to benchmark and gather performance metrics of our system on various devices

Posted October 28, 2021 by Aravinth Manivannan ‐ 1 min read

Last Edited December 23, 2021

PoW performance

PoW performance of native and WASM implementations. Does the native implementation have and edge over the WASM library?

Posted September 1, 2021 by Aravinth Manivannan ‐ 2 min read

Last Edited September 1, 2021

Say hello to mCaptcha

Introducing mCaptcha, a kickass CAPTCHA systems that gives (DDoS) attackers a run for their money. Oh and UX is great too!

Posted May 26, 2021 by Aravinth Manivannan ‐ 2 min read

Last Edited December 2, 2021

\ No newline at end of file diff --git a/blog/index.xml b/blog/index.xml index 77b871d..57d0ab1 100644 --- a/blog/index.xml +++ b/blog/index.xml @@ -1,108 +1,18 @@ - - - - Blog on - /blog/ - Recent content in Blog on - Hugo -- gohugo.io - en-US - - Introducing mCaptcha net - /blog/introducing-mcaptcha-net/ - Thu, 19 Oct 2023 00:00:00 +0000 - - /blog/introducing-mcaptcha-net/ - mCaptcha uses a Proof-of-Work (PoW) based algorithm to offer Denial-of-Service protection, because of its excellent accessibility characteristics. PoW within mCaptcha is configuration — webmasters can configure difficulty factors for their installations, which determines waiting time for visitors. But PoW can become inaccessible if webmasters choose a very high difficulty factor. So they have to maintain a balance which imposes sufficient load on DDoS attackers while also being accessible to common folk. - - - - February, 2023: Monthly Report - /blog/february-2023-monthly-report/ - Wed, 08 Mar 2023 00:00:00 +0000 - - /blog/february-2023-monthly-report/ - Hello and welcome to the (August 2022 to) February, 2023 monthly report! +Blog on/blog/Recent content in Blog onHugo -- gohugo.ioen-USIntroducing mCaptcha net/blog/introducing-mcaptcha-net/Thu, 19 Oct 2023 00:00:00 +0000/blog/introducing-mcaptcha-net/mCaptcha uses a Proof-of-Work (PoW) based algorithm to offer Denial-of-Service protection, because of its excellent accessibility characteristics. PoW within mCaptcha is configuration — webmasters can configure difficulty factors for their installations, which determines waiting time for visitors. But PoW can become inaccessible if webmasters choose a very high difficulty factor. So they have to maintain a balance which imposes sufficient load on DDoS attackers while also being accessible to common folk.February, 2023: Monthly Report/blog/february-2023-monthly-report/Wed, 08 Mar 2023 00:00:00 +0000/blog/february-2023-monthly-report/Hello and welcome to the (August 2022 to) February, 2023 monthly report! TL;DR Gusted and I secured funding from NLnet to work on mCaptcha in 2023, we suffered an outage from 15 January to February 6, polyfill benchmarking support in mCaptcha We have funding! Gusted and I applied and secured funding through 2023 development is funded through the NGI0 Entrust Fund, via NLnet. -The full list of tasks that we’ll be working on in the period is is available here. - - - - July, 2022: Monthly Report - /blog/july-2022-monthly-report/ - Thu, 04 Aug 2022 00:00:00 +0000 - - /blog/july-2022-monthly-report/ - Hello and welcome to the July, 2022 monthly report! +The full list of tasks that we’ll be working on in the period is is available here.July, 2022: Monthly Report/blog/july-2022-monthly-report/Thu, 04 Aug 2022 00:00:00 +0000/blog/july-2022-monthly-report/Hello and welcome to the July, 2022 monthly report! TL;DR Codeberg is trying out mCaptcha, Gitea is getting mCaptcha support, mCaptcha supports MariaDB, I’ve applied for NLnet and Open Tech Fund, documentation is updated: tutorials and glossary is added and glue libraries have new releases. -Codeberg is deploying mCaptcha Codeberg is committed to trying out mCaptcha to make their platform more accessible: they currently use a text-based CAPTCHA, which will be replaced by mCaptcha. - - - - June, 2022: Monthly Report - /blog/june-2022-monthly-report/ - Thu, 07 Jul 2022 00:00:00 +0000 - - /blog/june-2022-monthly-report/ - Hello and welcome to the June 2022 edition of the monthly report! +Codeberg is deploying mCaptcha Codeberg is committed to trying out mCaptcha to make their platform more accessible: they currently use a text-based CAPTCHA, which will be replaced by mCaptcha.June, 2022: Monthly Report/blog/june-2022-monthly-report/Thu, 07 Jul 2022 00:00:00 +0000/blog/june-2022-monthly-report/Hello and welcome to the June 2022 edition of the monthly report! mCaptcha is incorporated! I spent June doing non-technical tasks but I made significant progress: I had been trying to do it since summer 2021, but I faced various setbacks along the way. A family friend, who is also an auditor helped me finally get mCaptcha incorporated! And we’ve already filed successfully filed the first tax return too! -GSTIN 33DGKPA2253J1ZN Ideas for Commercial Operations Commercial operations will take a while longer(end of 2022, most probably). - - - - May, 2022: Monthly Report - /blog/may-2022-monthly-report/ - Fri, 10 Jun 2022 00:00:00 +0000 - - /blog/may-2022-monthly-report/ - Hello and welcome to the May 2022 edition of the monthly report! +GSTIN 33DGKPA2253J1ZN Ideas for Commercial Operations Commercial operations will take a while longer(end of 2022, most probably).May, 2022: Monthly Report/blog/may-2022-monthly-report/Fri, 10 Jun 2022 00:00:00 +0000/blog/may-2022-monthly-report/Hello and welcome to the May 2022 edition of the monthly report! mCaptcha, for a while was showing all the signs of a dead project: no commits on the repositories and no monthly updates. But the project is far from dead! -Python bindings to mCaptcha PoW pow_py contains bindings to pow_sha256, the proof-of-work library that mCaptcha uses. For the uninitiated, the bindings allow for python programs to automatically solve mCaptcha. - - - - December, 2021: Monthly Report - /blog/december-2021-monthly-report/ - Thu, 23 Dec 2021 00:00:00 +0000 - - /blog/december-2021-monthly-report/ - Hello and welcome to the first edition of the monthly report! +Python bindings to mCaptcha PoW pow_py contains bindings to pow_sha256, the proof-of-work library that mCaptcha uses. For the uninitiated, the bindings allow for python programs to automatically solve mCaptcha.December, 2021: Monthly Report/blog/december-2021-monthly-report/Thu, 23 Dec 2021 00:00:00 +0000/blog/december-2021-monthly-report/Hello and welcome to the first edition of the monthly report! I believe free software like mCaptcha is critical to a healthy internet but being a one-person show, there’s hardly any accountability in the way software is built. I hope, through monthly reports, I can explain the logic and intentions behind decisions taken in the development process. This month, the following things were accomplished: -1. Full LibreJS Compliance The CAPTCHA widget and the admin dashboard are 100% LibreJS compliant! - - - - Survey - /blog/survey/ - Thu, 28 Oct 2021 00:00:00 +0000 - - /blog/survey/ - Survey link: https://survey.mcaptcha.org/survey/campaigns/b717e51e-24d4-4ab6-912f-de2dfe3ce1fe/about +1. Full LibreJS Compliance The CAPTCHA widget and the admin dashboard are 100% LibreJS compliant!Survey/blog/survey/Thu, 28 Oct 2021 00:00:00 +0000/blog/survey/Survey link: https://survey.mcaptcha.org/survey/campaigns/b717e51e-24d4-4ab6-912f-de2dfe3ce1fe/about NOTE: The survey(at least, the lucky draw is temporarily suspended due to some logistical reasons. Apologies for any inconvenience caused. -mCaptcha relies on a proof-of-work(PoW) mechanism to guard against bots. In order for this to be effective, the difficulty factor should be configured properly. If the difficulty factor is too high all the time, it will inconvenience the users and if it’s too low during attack, the defence will be weak. - - - - PoW performance - /blog/pow-performance/ - Wed, 01 Sep 2021 00:00:00 +0000 - - /blog/pow-performance/ - mCaptcha uses a proof-of-work(PoW) mechanism to rate limit users or potential bots. In order for this to be effective, the PoW should be configured properly. The difficulty requirement can’t be too high, as it could cause accessibility issues on the client-side while at the same time, it shouldn’t be too low, as it wouldn’t offer proper protection against bots. -Malicious bots(the ones that wreak havoc), run native code which is capable of running in a multi-threaded context. - - - - Say hello to mCaptcha - /blog/say-hello-to-mcaptcha/ - Wed, 26 May 2021 00:00:00 +0000 - - /blog/say-hello-to-mcaptcha/ - At mCaptcha, we believe in digital freedom and privacy and so we built a proof-of-work based CAPTCHA system that doesn’t track. Seriously, no tracking. But that isn’t the killer feature, our system doesn’t require the user to pick cars or ID sidewalks — our system does it’s thing(usually at the click of a button) and gets out of the way. -How does it work? mCaptcha uses SHA256 based proof-of-work(PoW) to rate limit users. - - - - +mCaptcha relies on a proof-of-work(PoW) mechanism to guard against bots. In order for this to be effective, the difficulty factor should be configured properly. If the difficulty factor is too high all the time, it will inconvenience the users and if it’s too low during attack, the defence will be weak.PoW performance/blog/pow-performance/Wed, 01 Sep 2021 00:00:00 +0000/blog/pow-performance/mCaptcha uses a proof-of-work(PoW) mechanism to rate limit users or potential bots. In order for this to be effective, the PoW should be configured properly. The difficulty requirement can’t be too high, as it could cause accessibility issues on the client-side while at the same time, it shouldn’t be too low, as it wouldn’t offer proper protection against bots. +Malicious bots(the ones that wreak havoc), run native code which is capable of running in a multi-threaded context.Say hello to mCaptcha/blog/say-hello-to-mcaptcha/Wed, 26 May 2021 00:00:00 +0000/blog/say-hello-to-mcaptcha/At mCaptcha, we believe in digital freedom and privacy and so we built a proof-of-work based CAPTCHA system that doesn’t track. Seriously, no tracking. But that isn’t the killer feature, our system doesn’t require the user to pick cars or ID sidewalks — our system does it’s thing(usually at the click of a button) and gets out of the way. +How does it work? mCaptcha uses SHA256 based proof-of-work(PoW) to rate limit users. \ No newline at end of file diff --git a/blog/introducing-mcaptcha-net/index.html b/blog/introducing-mcaptcha-net/index.html index 895a9f5..b4bd173 100644 --- a/blog/introducing-mcaptcha-net/index.html +++ b/blog/introducing-mcaptcha-net/index.html @@ -1,240 +1,32 @@ - - - - - - - - - - - - - - Introducing mCaptcha net - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- -
- -
-
-

Introducing mCaptcha net

-

Posted October 19, 2023 by Aravinth Manivannan ‐ 2 min read

-

Last Edited October 21, 2023

- -

-

-

mCaptcha uses a Proof-of-Work (PoW) based algorithm to offer -Denial-of-Service protection, because of its excellent accessibility +Introducing mCaptcha net - mCaptcha

Introducing mCaptcha net

Posted October 19, 2023 by Aravinth Manivannan ‐ 2 min read

Last Edited October 21, 2023

mCaptcha uses a Proof-of-Work (PoW) based algorithm to offer +Denial-of-Service protection, because of its excellent accessibility characteristics. PoW within mCaptcha is configuration — webmasters can configure -difficulty factors for their +difficulty factors for their installations, which determines waiting time for visitors. But PoW can become inaccessible if webmasters choose a very high difficulty factor. So they have to maintain a balance which imposes sufficient load on DDoS -attackers while also being accessible to common folk.

- -

To help webmasters correctly configure difficult factors, we are +attackers while also being accessible to common folk.

To help webmasters correctly configure difficult factors, we are building a feedback loop which would gather performance statistics from voluntary mCaptcha installations and make them available to other mCaptcha installations. The performance statistics can be used by all mCaptcha instances to automatically optimize an installation. We are -calling this the mCaptcha net.

-

Participation is optional

-

Participation in the mCaptcha net is disabled by default and is +calling this the mCaptcha net.

Participation is optional

Participation in the mCaptcha net is disabled by default and is optional as it has privacy implications: it will reveal the -existence of an mCaptcha instance.

-

The admins of mCaptcha instances can choose to upload truly anonymous -PoW performance statistics to a number of mCaptcha/survey instances. +existence of an mCaptcha instance.

The admins of mCaptcha instances can choose to upload truly anonymous +PoW performance statistics to a number of mCaptcha/survey instances. The data uploaded is public and so is accessible to all mCaptcha -instances.

-

We also offer opt-in controls at installation level:

-
- A screenshot of the 'add sitekey' form on the mCaptcha dashboard with a checkbox for anonymously publishing performance statistics. It is not checked by default. - -
Add sitekey form on the mCaptcha dashboard with a checkbox for anonymously publishing performance statistics. It is not checked by default.
-
-

Ensuring anonymity

-

mCaptcha doesn’t fingerprint its users. Performance parameters include:

-
    -
  1. Time taken to generate PoW
  2. -
  3. The difficulty factor for which the PoW was computed
  4. -
  5. Type of client library used.
  6. -
-
1"time":14,
-2"difficulty_factor":50000,
-3"worker_type":"wasm"
-

This doesn’t include the usual fingerprinting parameters like +instances.

We also offer opt-in controls at installation level:

A screenshot of the 'add sitekey' form on the mCaptcha dashboard with a checkbox for anonymously publishing performance statistics. It is not checked by default.
Add sitekey form on the mCaptcha dashboard with a checkbox for anonymously publishing performance statistics. It is not checked by default.

Ensuring anonymity

mCaptcha doesn’t fingerprint its users. Performance parameters include:

  1. Time taken to generate PoW
  2. The difficulty factor for which the PoW was computed
  3. Type of client library used.
1"time":14,
+2"difficulty_factor":50000,
+3"worker_type":"wasm"
+

This doesn’t include the usual fingerprinting parameters like User-Agent, cookies, and IP address. Additionally, we use pseudo IDs -at both mCaptcha/mCaptcha and mCaptcha/survey to avoid exposing installations.

-
- A screenshot of a tmux window with logs of mCaptcha/mCaptcha and mCapctha/survey showing both of them talking to eachother - -
mCaptcha/mCaptcha uploading performance statistics to a mCaptcha/survey instance
-
-

Status

-

We now have performance statistics uploads to mCaptcha/survey instances -working. Pull request mCaptcha/mCaptcha#92 +at both mCaptcha/mCaptcha and mCaptcha/survey to avoid exposing installations.

A screenshot of a tmux window with logs of mCaptcha/mCaptcha and mCapctha/survey showing both of them talking to eachother
mCaptcha/mCaptcha uploading performance statistics to a mCaptcha/survey instance

Status

We now have performance statistics uploads to mCaptcha/survey instances +working. Pull request mCaptcha/mCaptcha#92 added abilities to mCaptcha to upload statistics to mCaptcha/survey instances and -mCaptcha/survey#40 enable survey to process the uploaded data. We will soon build a +mCaptcha/survey#40 enable survey to process the uploaded data. We will soon build a self-tuning algorithm within mCaptcha to use this data and optimize -installations automatically.

- -
- - -

Edit this page on git.batsense.net

- -
-
- -
-
- - - - - - - - - +installations automatically.

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_20x0_resize_box_3.png b/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_20x0_resize_box_2.png similarity index 100% rename from blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_20x0_resize_box_3.png rename to blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_20x0_resize_box_2.png diff --git a/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_500x0_resize_box_3.png b/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_500x0_resize_box_2.png similarity index 100% rename from blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_500x0_resize_box_3.png rename to blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_500x0_resize_box_2.png diff --git a/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_600x0_resize_box_3.png b/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_600x0_resize_box_2.png similarity index 100% rename from blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_600x0_resize_box_3.png rename to blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_600x0_resize_box_2.png diff --git a/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_700x0_resize_box_3.png b/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_700x0_resize_box_2.png similarity index 100% rename from blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_700x0_resize_box_3.png rename to blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_700x0_resize_box_2.png diff --git a/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_800x0_resize_box_2.png b/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_800x0_resize_box_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0d18928eabcf92815e4e1bedf330de6a78d98aea GIT binary patch literal 43683 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 bF^S~K!Zv!AN@)WBK_+oU`f}=}TMzyR2V^5| literal 0 HcmV?d00001 diff --git a/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_800x0_resize_box_3.png b/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_800x0_resize_box_3.png deleted file mode 100644 index 93ac07fe5bb2df34f4d04e50cb3458701a3ede14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33 lcmeAS@N?(olHy`uVBq!ia0y~yU{(NPK@KLM$ZQi=a{y9B1Zn^P diff --git a/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_900x0_resize_box_3.png b/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_900x0_resize_box_2.png similarity index 100% rename from blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_900x0_resize_box_3.png rename to blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_900x0_resize_box_2.png diff --git a/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_20x0_resize_box_3.png b/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_20x0_resize_box_2.png similarity index 100% rename from blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_20x0_resize_box_3.png rename to blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_20x0_resize_box_2.png diff --git a/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_500x0_resize_box_3.png b/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_500x0_resize_box_2.png similarity index 100% rename from blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_500x0_resize_box_3.png rename to blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_500x0_resize_box_2.png diff --git a/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_600x0_resize_box_3.png b/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_600x0_resize_box_2.png similarity index 100% rename from blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_600x0_resize_box_3.png rename to blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_600x0_resize_box_2.png diff --git a/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_700x0_resize_box_3.png b/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_700x0_resize_box_2.png similarity index 100% rename from blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_700x0_resize_box_3.png rename to blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_700x0_resize_box_2.png diff --git a/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_800x0_resize_box_3.png b/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_800x0_resize_box_2.png similarity index 100% rename from blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_800x0_resize_box_3.png rename to blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_800x0_resize_box_2.png diff --git a/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_900x0_resize_box_3.png b/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_900x0_resize_box_2.png similarity index 100% rename from blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_900x0_resize_box_3.png rename to blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_900x0_resize_box_2.png diff --git a/blog/july-2022-monthly-report/index.html b/blog/july-2022-monthly-report/index.html index 458aa2b..280b5e7 100644 --- a/blog/july-2022-monthly-report/index.html +++ b/blog/july-2022-monthly-report/index.html @@ -1,256 +1,40 @@ - - - - - - - - - - - - - - July, 2022: Monthly Report - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- -
- -
-
-

July, 2022: Monthly Report

-

Posted August 4, 2022 by Aravinth Manivannan ‐ 2 min read

-

Last Edited February 13, 2023

- -

-

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

-

Hello and welcome to the July, 2022 monthly report!

-

TL;DR

-

Codeberg is trying out mCaptcha, Gitea is getting mCaptcha support, +July, 2022: Monthly Report - mCaptcha

July, 2022: Monthly Report

Posted August 4, 2022 by Aravinth Manivannan ‐ 2 min read

Last Edited February 13, 2023

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

Hello and welcome to the July, 2022 monthly report!

TL;DR

Codeberg is trying out mCaptcha, Gitea is getting mCaptcha support, mCaptcha supports MariaDB, I’ve applied for NLnet and Open Tech Fund, documentation is updated: tutorials and glossary is added and glue libraries -have new releases.

-

Codeberg is deploying mCaptcha

-

Codeberg is committed to trying out mCaptcha to make their platform more +have new releases.

Codeberg is deploying mCaptcha

Codeberg is committed to trying out mCaptcha to make their platform more accessible: they currently use a text-based CAPTCHA, which will be replaced by mCaptcha. The decision was finalized after I presented mCaptcha to them at a meeting their organized. Please see -here for -slides.

-

Gitea gets mCaptcha support

-

@Gusted from Codeberg is working on integrating +here for +slides.

Gitea gets mCaptcha support

@Gusted from Codeberg is working on integrating mCaptcha in Gitea so that Codeberg can deploy it. Please see -here for related the -pull request.

-

This project is yet to see usage, so we are venturing into uncharted +here for related the +pull request.

This project is yet to see usage, so we are venturing into uncharted territory: should you face issues with either deploying or -integrating mCaptcha, please feel free to reach out.

-

mCaptcha supports MariaDB:

-

Codeberg uses MariaDB. To facilitate Codeberg deployment, I implemented -support for MariaDB. The work done in +integrating mCaptcha, please feel free to reach out.

mCaptcha supports MariaDB:

Codeberg uses MariaDB. To facilitate Codeberg deployment, I implemented +support for MariaDB. The work done in May, 2022 made implementing support easy. Support for MariaDB is first class in mCaptcha: automatic testing exist to run tests with both Postgres and -MariaDB, so I expect things to be stable.

-

Applied for Funding: NLnet and Open Tech Fund

-

I’ve applied for NLnet and Open Tech Fund[0], Please find the +MariaDB, so I expect things to be stable.

Applied for Funding: NLnet and Open Tech Fund

I’ve applied for NLnet and Open Tech Fund[0], Please find the applications -here +here and -here -respectively.

-

If funding is granted:

-
    -
  1. I’ll be able to work full-time for a year at the rate of 2,000 EUR/month
  2. -
  3. We’ll have a dedicated build server
  4. -
  5. We’ll have funds to run a DDoS test to gauge mCaptcha’s effectiveness
  6. -
-

Documentation updates

-

mCaptcha docs over the months have become inconsistent and incorrect. I -cleaned up some of the mess and added a +here +respectively.

If funding is granted:

  1. I’ll be able to work full-time for a year at the rate of 2,000 EUR/month
  2. We’ll have a dedicated build server
  3. We’ll have funds to run a DDoS test to gauge mCaptcha’s effectiveness

Documentation updates

mCaptcha docs over the months have become inconsistent and incorrect. I +cleaned up some of the mess and added a tutorial to help folks install -mCaptcha on their website. The docs also gets a +mCaptcha on their website. The docs also gets a glossary, which contain explanations -to mCaptcha jargon.

-

New releases: glue libraries

-

0.1.0-alpha-2 for -vanilla, -react and -svelte glue +to mCaptcha jargon.

New releases: glue libraries

0.1.0-alpha-2 for +vanilla, +react and +svelte glue libraries were released. They now hand over widget sizing to the client -code(associated PR).

-

Footnotes

-
    -
  • [0]: Special thanks to -@humantech for his thoughtful -reviews and to @dachary for pointing me towards -OTF.
  • -
- -
- - -

Edit this page on git.batsense.net

- -
-
- -
-
- - - - - - - - - +code(associated PR).

Footnotes

  • [0]: Special thanks to +@humantech for his thoughtful +reviews and to @dachary for pointing me towards +OTF.

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/blog/june-2022-monthly-report/index.html b/blog/june-2022-monthly-report/index.html index 1edb8d8..5e90fd0 100644 --- a/blog/june-2022-monthly-report/index.html +++ b/blog/june-2022-monthly-report/index.html @@ -1,222 +1,25 @@ - - - - - - - - - - - - - - June, 2022: Monthly Report - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- -
- -
-
-

June, 2022: Monthly Report

-

Posted July 7, 2022 by Aravinth Manivannan ‐ 2 min read

-

Last Edited July 7, 2022

- -

-

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

-

Hello and welcome to the June 2022 edition of the monthly report!

-

mCaptcha is incorporated!

-

I spent June doing non-technical tasks but I made significant +June, 2022: Monthly Report - mCaptcha

June, 2022: Monthly Report

Posted July 7, 2022 by Aravinth Manivannan ‐ 2 min read

Last Edited July 7, 2022

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

Hello and welcome to the June 2022 edition of the monthly report!

mCaptcha is incorporated!

I spent June doing non-technical tasks but I made significant progress: I had been trying to do it since summer 2021, but I faced various setbacks along the way. A family friend, who is also an auditor -helped me finally get mCaptcha incorporated!

-

And we’ve already filed successfully filed the first tax return too!

-

GSTIN

-
33DGKPA2253J1ZN
-

Ideas for Commercial Operations

-

Commercial operations will take a while longer(end of 2022, most -probably). For Hostea, I wrote a dashboard with +helped me finally get mCaptcha incorporated!

And we’ve already filed successfully filed the first tax return too!

GSTIN

33DGKPA2253J1ZN
+

Ideas for Commercial Operations

Commercial operations will take a while longer(end of 2022, most +probably). For Hostea, I wrote a dashboard with payments capabilities(via Stripe) so that experience will help me do the same for mCaptcha. Working on Hostea has been truly enlightening: it’s probably the first effort to offer a fully libre, infrastructure-as-code and payments software included, hosting service. I would like to do the same for mCaptcha so that service that I setup goes rogue or if someone wants to offer mCaptcha hosted services, they can replicate my set up -with ease.

-

But the commercial offering will at no point force me or future +with ease.

But the commercial offering will at no point force me or future maintainers turn mCaptcha into adopting a non-free license like the -Server Side Public +Server Side Public License. So the following months will see administrative changes within mCaptcha to device mechanisms to prevent me or any future party with influence in -mCaptcha development from hurting the project by it non-free.

-

Hostea is also an experiment in Free Software commercial operations, so +mCaptcha development from hurting the project by it non-free.

Hostea is also an experiment in Free Software commercial operations, so naturally I’m highly impressed by the ideas that are being discussed there. mCaptcha, too, will borrow ideas from that project to make its -development economically sustainable.

- -
- - -

Edit this page on git.batsense.net

- -
-
- -
-
- - - - - - - - - +development economically sustainable.

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/blog/may-2022-monthly-report/index.html b/blog/may-2022-monthly-report/index.html index 15b1233..efc3e85 100644 --- a/blog/may-2022-monthly-report/index.html +++ b/blog/may-2022-monthly-report/index.html @@ -1,328 +1,116 @@ - - - - - - - - - - - - - - May, 2022: Monthly Report - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- -
- -
-
-

May, 2022: Monthly Report

-

Posted June 10, 2022 by Aravinth Manivannan ‐ 4 min read

-

Last Edited June 14, 2022

- -

-

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

-

Hello and welcome to the May 2022 edition of the monthly report!

-

mCaptcha, for a while was showing all the signs of a dead project: +May, 2022: Monthly Report - mCaptcha

May, 2022: Monthly Report

Posted June 10, 2022 by Aravinth Manivannan ‐ 4 min read

Last Edited June 14, 2022

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

Hello and welcome to the May 2022 edition of the monthly report!

mCaptcha, for a while was showing all the signs of a dead project: no commits on the repositories and no monthly updates. But the project -is far from dead!

-

Python bindings to mCaptcha PoW

-

pow_py contains bindings to -pow_sha256, the -proof-of-work library +is far from dead!

Python bindings to mCaptcha PoW

pow_py contains bindings to +pow_sha256, the +proof-of-work library that mCaptcha uses. For the uninitiated, the bindings allow for python -programs to automatically solve mCaptcha.

-

So if you are writing a script to do some chore on your favourite +programs to automatically solve mCaptcha.

So if you are writing a script to do some chore on your favourite website that is protected by mCaptcha, you can now solve the mCaptcha -automatically from within the program.

-

Here’s an example:

-
 1import os
- 2
- 3import mcaptcha_pow_py
- 4import requests
- 5
- 6# get the sitekey that is used in the mCaptcha protected form
- 7SITEKEY = os.getenv("MCAPTCHA_CAPTCHA_SITEKEY")
- 8# the hostname of the mCaptcha instance that the form is using
- 9MCAPTCHA_HOST = os.getenv("MCAPTCHA_CAPTCHA_HOST")
-10
-11
-12GET_CONFIG_ROUTE = f"{MCAPTCHA_HOST}/api/v1/pow/config"
-13VERIFY_POW_ROUTE = f"{MCAPTCHA_HOST}/api/v1/pow/verify"
-14
-15def solve_captcha():
-16
-17    # get challenge configuration
-18    key = {"key": sitekey}
-19    challenge_config = requests.post(GET_CONFIG_ROUTE, json=key)
-20    challenge_config = challenge_config.json()
-21
-22    # extract configuration data
-23    config = mcaptcha_pow_py.PoWConfig(challenge_config["salt"])
-24    pow_string = challenge_config["string"]
-25    pow_difficulty_factor = challenge_config["difficulty_factor"]
-26
-27    # generate work
-28    work = config.work(pow_string, pow_difficulty_factor)
-29
-30    # verify PoW
-31    proof = {
-32        "key": SITEKEY,
-33        "nonce": work.nonce,
-34        "result": work.result,
-35        "string": challenge_config["string"],
-36    }
-37    resp = requests.post(VERIFY_POW_ROUTE, json=proof)
-38    resp = resp.json()
-39
-40    # extract verification token
-41    token = resp["token"]
-42
-43    return token
-44
-45
-46token = solve_captcha()
-47data = {
-48    "username": "me",
-49    "password": "superlongpassword",
-50    "confirm_password": "superlongpassword",
-51    "mcaptcha__token": token,
-52}
-53response = requests.post("/mCaptcha-protected-form", data=data)
-

This could be missed for building DDoS bots(more on that -here) but this could also be +automatically from within the program.

Here’s an example:

 1import os
+ 2
+ 3import mcaptcha_pow_py
+ 4import requests
+ 5
+ 6# get the sitekey that is used in the mCaptcha protected form
+ 7SITEKEY = os.getenv("MCAPTCHA_CAPTCHA_SITEKEY")
+ 8# the hostname of the mCaptcha instance that the form is using
+ 9MCAPTCHA_HOST = os.getenv("MCAPTCHA_CAPTCHA_HOST")
+10
+11
+12GET_CONFIG_ROUTE = f"{MCAPTCHA_HOST}/api/v1/pow/config"
+13VERIFY_POW_ROUTE = f"{MCAPTCHA_HOST}/api/v1/pow/verify"
+14
+15def solve_captcha():
+16
+17    # get challenge configuration
+18    key = {"key": sitekey}
+19    challenge_config = requests.post(GET_CONFIG_ROUTE, json=key)
+20    challenge_config = challenge_config.json()
+21
+22    # extract configuration data
+23    config = mcaptcha_pow_py.PoWConfig(challenge_config["salt"])
+24    pow_string = challenge_config["string"]
+25    pow_difficulty_factor = challenge_config["difficulty_factor"]
+26
+27    # generate work
+28    work = config.work(pow_string, pow_difficulty_factor)
+29
+30    # verify PoW
+31    proof = {
+32        "key": SITEKEY,
+33        "nonce": work.nonce,
+34        "result": work.result,
+35        "string": challenge_config["string"],
+36    }
+37    resp = requests.post(VERIFY_POW_ROUTE, json=proof)
+38    resp = resp.json()
+39
+40    # extract verification token
+41    token = resp["token"]
+42
+43    return token
+44
+45
+46token = solve_captcha()
+47data = {
+48    "username": "me",
+49    "password": "superlongpassword",
+50    "confirm_password": "superlongpassword",
+51    "mcaptcha__token": token,
+52}
+53response = requests.post("/mCaptcha-protected-form", data=data)
+

This could be missed for building DDoS bots(more on that +here) but this could also be used to make CAPTCHA solving automated within screen readers and other -accessibility devices!

-

Measuring DDoS protection effectiveness

-

Proof-of-work has historically been a good method to achieve rate +accessibility devices!

Measuring DDoS protection effectiveness

Proof-of-work has historically been a good method to achieve rate limiting but how much attack can it, specifically mCaptcha’s implementation, withstand when compared to an unprotected endpoint? To find out, we used the recently created Python bindings to the mCaptcha PoW library, the excellent load testing tool, -locust and wrote -mCaptcha/dos!

-

VIT AP kindly permitted me, @realaravinth, to use their network +locust and wrote +mCaptcha/dos!

VIT AP kindly permitted me, @realaravinth, to use their network security lab for setting up a isolated, contained testing environment to -mount a DDoS attack on a test +mount a DDoS attack on a test server -instance.

-

The initial topology consisted of one mCaptcha instance, one DDoS demo +instance.

The initial topology consisted of one mCaptcha instance, one DDoS demo server, one locust node running in leader configuration and six locust nodes running in follower configuration. I was authorised to use the netsec lab for three days, which unfortunately wasn’t enough to go -finish running the experiment. Dr. Sibi Chakkaravarthy +finish running the experiment. Dr. Sibi Chakkaravarthy Sethuraman has kindly offered to arrange authorisation to use the netsec lab once again in July 2022, -during which I hope to finish running the experiment

-

Special thanks to ackr-8 and -alan2000alex for help with setting up -infrastructure of the experiment.

-

Refactor

-

mCaptcha underwent a major refactor during the month of May: We re-wrote +during which I hope to finish running the experiment

Special thanks to ackr-8 and +alan2000alex for help with setting up +infrastructure of the experiment.

Refactor

mCaptcha underwent a major refactor during the month of May: We re-wrote and cleaned up all database-related stuff for higher flexibility and generally good architecture. This refactor lays the foundation for implementing support for alternate database software -programs(we currently support PostgreSQL only).

-

mCaptcha is now on the Fediverse

-

We recently joined the Fediverse on a -GoToSocial instance run by +programs(we currently support PostgreSQL only).

mCaptcha is now on the Fediverse

We recently joined the Fediverse on a +GoToSocial instance run by @realaravinth. We’ll soon be deleting our Twitter account in favour of -the Fediverse account.

-

Fediverse account: -@mCaptcha@batsense.net

-

Generic hosting

-

I, @realaravinth, have been busy with ForgeFlux -and Hostea — both of which are software +the Fediverse account.

Fediverse account: +@mCaptcha@batsense.net

Generic hosting

I, @realaravinth, have been busy with ForgeFlux +and Hostea — both of which are software forge related and so when usable, will mostly improve the Free Software ecosystem. Hostea is a project that aims to create a libre software development ecosystem and -provide managed hosting for the same. The project is built by a +provide managed hosting for the same. The project is built by a horizontal community, which allows for multiple service providers who adhere to the Hostea policies to operate under the Hostea umbrella — essentially allowing for the creation of -smaller, highly localised cooperatives.

-

Cooperatives are interesting, and we believe that mCaptcha, too, can +smaller, highly localised cooperatives.

Cooperatives are interesting, and we believe that mCaptcha, too, can benefit from such an architecture as it will prevent any one party from single-handedly sabotaging the project. The experience gained from -Hostea will be reused in providing managed hosting for mCaptcha.

-

By the end of this year, mCaptcha will reorganise into a horizontal -community and adopt radical transparency to improve trust and -reliability of the project

-
-

P.S: I, realaravinth, would do it sooner but I’m a little busy right +Hostea will be reused in providing managed hosting for mCaptcha.

By the end of this year, mCaptcha will reorganise into a horizontal +community and adopt radical transparency to improve trust and +reliability of the project

P.S: I, realaravinth, would do it sooner but I’m a little busy right now, so if someone is interested to help out do reach out and so that -we could do it sooner!

-
-

In context of mCaptcha, radical transparency will include all decisions +we could do it sooner!

In context of mCaptcha, radical transparency will include all decisions publicly made, funding and expenses publicly documented, and all collaborations, too, publicly documented. This of course doesn’t imply that private, personally identifiable information(addresses and phone numbers, for instance) will be publicly disclosed. Such information will -be redacted and published.

- -
- - -

Edit this page on git.batsense.net

- -
-
- -
-
- - - - - - - - - +be redacted and published.

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/blog/pow-performance/index.html b/blog/pow-performance/index.html index cb7c11f..32ef419 100644 --- a/blog/pow-performance/index.html +++ b/blog/pow-performance/index.html @@ -1,411 +1,25 @@ - - - - - - - - - - - - - - PoW performance - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- -
- -
-
-

PoW performance

-

Posted September 1, 2021 by Aravinth Manivannan ‐ 2 min read

-

Last Edited September 1, 2021

- -

-

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

-

mCaptcha uses a -proof-of-work(PoW) mechanism +PoW performance - mCaptcha

PoW performance

Posted September 1, 2021 by Aravinth Manivannan ‐ 2 min read

Last Edited September 1, 2021

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

mCaptcha uses a +proof-of-work(PoW) mechanism to rate limit users or potential bots. In order for this to be effective, the PoW should be configured properly. The difficulty requirement can’t be too high, as it could cause accessibility issues on the client-side while at the same time, it shouldn’t be too low, as it -wouldn’t offer proper protection against bots.

-

Malicious bots(the ones that wreak havoc), run native code which is +wouldn’t offer proper protection against bots.

Malicious bots(the ones that wreak havoc), run native code which is capable of running in a multi-threaded context. This creates an unfair advantage for crackers using these bots over legitimate users, who -usually use browsers to access a website.

-

I wanted to see how much of an advantage a native program would have -over our WASM library.

-

Benchmark tools

-

So I wrote these to compare native and WASM performances:

- - -

Results

-

The tests were run on my development machine featuring an Intel Core -i7-9750h.

-

Native

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DifficultyRealUserSys
5000000m0.220s0m0.197s0m0.006s
10000000m0.203s0m0.203s0m0.000s
15000000m0.198s0m0.198s0m0.000s
20000000m0.203s0m0.203s0m0.000s
25000000m0.758s0m0.752s0m0.003s
30000000m0.776s0m0.769s0m0.003s
35000000m2.010s0m1.998s0m0.000s
40000000m2.038s0m2.033s0m0.003s
45000000m2.014s0m2.013s0m0.000s
-

Browser

-

I ran the tests on both Firefox and Chromium to compare results

-

Firefox

-
    -
  • User Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
  • -
  • Hardware concurrency: 12
  • -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DifficultyDuration(in ms)
500000401
1000000413
1500000398
2000000394
25000001495
30000001556
35000003971
40000004235
45000004116
-
-

To be fair, my Firefox installation is loaded with a gazillion +usually use browsers to access a website.

I wanted to see how much of an advantage a native program would have +over our WASM library.

Benchmark tools

So I wrote these to compare native and WASM performances:

Results

The tests were run on my development machine featuring an Intel Core +i7-9750h.

Native

DifficultyRealUserSys
5000000m0.220s0m0.197s0m0.006s
10000000m0.203s0m0.203s0m0.000s
15000000m0.198s0m0.198s0m0.000s
20000000m0.203s0m0.203s0m0.000s
25000000m0.758s0m0.752s0m0.003s
30000000m0.776s0m0.769s0m0.003s
35000000m2.010s0m1.998s0m0.000s
40000000m2.038s0m2.033s0m0.003s
45000000m2.014s0m2.013s0m0.000s

Browser

I ran the tests on both Firefox and Chromium to compare results

Firefox

  • User Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
  • Hardware concurrency: 12
DifficultyDuration(in ms)
500000401
1000000413
1500000398
2000000394
25000001495
30000001556
35000003971
40000004235
45000004116

To be fair, my Firefox installation is loaded with a gazillion extensions while the Chromium instance is clean, as I don’t use it -much

-
-

Chromium

-
    -
  • User Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36
  • -
  • Hardware concurrency: 12
  • -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DifficultyDuration(in ms)
500000399.40000000037253
1000000354.6000000014901
1500000351.19999999925494
2000000353.80000000074506
25000001337.800000000745
30000001311.199999999255
35000003417.5999999996275
40000003488.800000000745
45000003458.2999999988824
-

Conclusion

-

At the highest difficulty factor, the native implementation was a almost second +much

Chromium

  • User Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36
  • Hardware concurrency: 12
DifficultyDuration(in ms)
500000399.40000000037253
1000000354.6000000014901
1500000351.19999999925494
2000000353.80000000074506
25000001337.800000000745
30000001311.199999999255
35000003417.5999999996275
40000003488.800000000745
45000003458.2999999988824

Conclusion

At the highest difficulty factor, the native implementation was a almost second faster than the WASM library. But the fact that both of them were able -to run to completion in under 5 seconds is impressive!

-

So, in my opinion, native implementation is only slightly faster than +to run to completion in under 5 seconds is impressive!

So, in my opinion, native implementation is only slightly faster than the WASM library and for all intents and purposes, this shouldn’t matter -much.

-
-

P.S Work is underway to benchmark multiple platforms. A detailed report -will be published when that data is available.

-

For this post, I asked some of my friends to run the tests on their +much.


P.S Work is underway to benchmark multiple platforms. A detailed report +will be published when that data is available.

For this post, I asked some of my friends to run the tests on their computers. The results slightly varied but even the slowest case generated proof for 4500000 difficulty(the highest in this test), in under -15 seconds!

- -
- - -

Edit this page on git.batsense.net

- -
-
- -
-
- - - - - - - - - +15 seconds!

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/blog/say-hello-to-mcaptcha/index.html b/blog/say-hello-to-mcaptcha/index.html index 7a7cbd8..db7507d 100644 --- a/blog/say-hello-to-mcaptcha/index.html +++ b/blog/say-hello-to-mcaptcha/index.html @@ -1,250 +1,25 @@ - - - - - - - - - - - - - - Say hello to mCaptcha - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- -
- -
-
-

Say hello to mCaptcha

-

Posted May 26, 2021 by Aravinth Manivannan ‐ 2 min read

-

Last Edited December 2, 2021

- -

-

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

-

At mCaptcha, we believe in digital freedom and privacy and so we built a -proof-of-work based +Say hello to mCaptcha - mCaptcha

Say hello to mCaptcha

Posted May 26, 2021 by Aravinth Manivannan ‐ 2 min read

Last Edited December 2, 2021

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

At mCaptcha, we believe in digital freedom and privacy and so we built a +proof-of-work based CAPTCHA system that doesn’t track. Seriously, no tracking. But that isn’t the killer feature, our system doesn’t require the user to pick cars or ID sidewalks — our system does it’s thing(usually -at the click of a button) and gets out of the way.

-

How does it work?

-

mCaptcha uses SHA256 based proof-of-work(PoW) to rate limit users.

-

When a user wants to do something on an mCaptcha-protected website,

-
    -
  1. -

    they will have to generate proof-of-work(a bunch of math that will -takes time to compute) and submit it to mCaptcha.

    -
  2. -
  3. -

    We’ll validate the proof:

    -
  4. -
-
    -
  • if validation is unsuccessful, they will be prevented from accessing -the destination website
  • -
  • if validation is successful, read on,
  • -
-
    -
  1. -

    They will be issued a token that should be submit along with the -request/form to the destination website.

    -
  2. -
  3. -

    The destination website validates the submitted token with -mCaptcha before processing the request.

    -
  4. -
-

The whole process is automated from the user’s point of view. All they -have to do is click on a button to initiate the process.

-

Okay, but what about bad actors?

-

mCaptcha makes interacting with websites (computationally)expensive for +at the click of a button) and gets out of the way.

How does it work?

mCaptcha uses SHA256 based proof-of-work(PoW) to rate limit users.

When a user wants to do something on an mCaptcha-protected website,

  1. they will have to generate proof-of-work(a bunch of math that will +takes time to compute) and submit it to mCaptcha.

  2. We’ll validate the proof:

  • if validation is unsuccessful, they will be prevented from accessing +the destination website
  • if validation is successful, read on,
  1. They will be issued a token that should be submit along with the +request/form to the destination website.

  2. The destination website validates the submitted token with +mCaptcha before processing the request.

The whole process is automated from the user’s point of view. All they +have to do is click on a button to initiate the process.

Okay, but what about bad actors?

mCaptcha makes interacting with websites (computationally)expensive for the user. A well-behaving user will experience a slight delay(no delay when under moderate load to 2-3 seconds when under attack; PoW difficulty is variable) but if someone wants to hammer your site, they will have to do more work to send requests than your server you will have to do to respond -to their request.

-

Why use mCaptcha?

-
    -
  • Free software, privacy focused
  • -
  • Seamless UX — No more annoying CAPTCHAs!
  • -
  • IP address independent: your users are behind a NAT? We got you covered!
  • -
  • Automatic bot throttling
  • -
  • Resistant to replay attacks: proof-of-work configurations have short lifetimes(30s) and can be used only once. If a user submits a PoW to an already used configuration or an expired one, their proof will be rejected.
  • -
-

How to migrate?

-

Our client libraries are mostly compatible with reCAPTCHA and hCaptcha. -A detailed guide will be published soon.

-

Our Philosophy

-

Man has has come so far only because our ancestors chose to +to their request.

Why use mCaptcha?

  • Free software, privacy focused
  • Seamless UX — No more annoying CAPTCHAs!
  • IP address independent: your users are behind a NAT? We got you covered!
  • Automatic bot throttling
  • Resistant to replay attacks: proof-of-work configurations have short lifetimes(30s) and can be used only once. If a user submits a PoW to an already used configuration or an expired one, their proof will be rejected.

How to migrate?

Our client libraries are mostly compatible with reCAPTCHA and hCaptcha. +A detailed guide will be published soon.

Our Philosophy

Man has has come so far only because our ancestors chose to share their knowledge with others. If everything was labeled intellectual property, we might still be stuck in Stone Age. The idea of intellectual property is alien to us. For this reason, all of our source -code is freely available(both as in freedom and beers) at our -GitHub.

-

Resources

- - -
- - -

Edit this page on git.batsense.net

- -
-
- -
-
- - - - - - - - - +code is freely available(both as in freedom and beers) at our +GitHub.

Resources

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/blog/sitemap.xml b/blog/sitemap.xml index dd72c9e..c593c63 100644 --- a/blog/sitemap.xml +++ b/blog/sitemap.xml @@ -1,66 +1 @@ - - - - /blog/introducing-mcaptcha-net/ - 2023-10-21T16:48:55+05:30 - weekly - 0.5 - - - - /blog/february-2023-monthly-report/ - 2023-03-09T02:30:43+05:30 - weekly - 0.5 - - - - /blog/july-2022-monthly-report/ - 2023-02-13T14:50:39+05:30 - weekly - 0.5 - - - - /blog/june-2022-monthly-report/ - 2022-07-07T20:05:57+05:30 - weekly - 0.5 - - - - /blog/may-2022-monthly-report/ - 2022-06-14T15:39:59+05:30 - weekly - 0.5 - - - - /blog/december-2021-monthly-report/ - 2022-06-14T15:39:59+05:30 - weekly - 0.5 - - - - /blog/survey/ - 2021-12-23T23:26:38+05:30 - weekly - 0.5 - - - - /blog/pow-performance/ - 2021-09-01T15:33:12+05:30 - weekly - 0.5 - - - - /blog/say-hello-to-mcaptcha/ - 2021-12-02T10:25:42+05:30 - weekly - 0.5 - - \ No newline at end of file +/blog/introducing-mcaptcha-net/2023-10-21T16:48:55+05:30weekly0.5/blog/february-2023-monthly-report/2023-03-09T02:30:43+05:30weekly0.5/blog/july-2022-monthly-report/2023-02-13T14:50:39+05:30weekly0.5/blog/june-2022-monthly-report/2022-07-07T20:05:57+05:30weekly0.5/blog/may-2022-monthly-report/2022-06-14T15:39:59+05:30weekly0.5/blog/december-2021-monthly-report/2022-06-14T15:39:59+05:30weekly0.5/blog/survey/2021-12-23T23:26:38+05:30weekly0.5/blog/pow-performance/2021-09-01T15:33:12+05:30weekly0.5/blog/say-hello-to-mcaptcha/2021-12-02T10:25:42+05:30weekly0.5 \ No newline at end of file diff --git a/blog/survey/index.html b/blog/survey/index.html index 3d2bb79..0c4d692 100644 --- a/blog/survey/index.html +++ b/blog/survey/index.html @@ -1,210 +1,15 @@ - - - - - - - - - - - - - - Survey - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- -
- -
-
-

Survey

-

Posted October 28, 2021 by Aravinth Manivannan ‐ 1 min read

-

Last Edited December 23, 2021

- -

-

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

-

Survey link: https://survey.mcaptcha.org/survey/campaigns/b717e51e-24d4-4ab6-912f-de2dfe3ce1fe/about

-

NOTE: The survey(at least, the lucky draw is temporarily suspended -due to some logistical reasons. Apologies for any inconvenience caused.

-

mCaptcha relies on a -proof-of-work(PoW) +Survey - mCaptcha

Survey

Posted October 28, 2021 by Aravinth Manivannan ‐ 1 min read

Last Edited December 23, 2021

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

Survey link: https://survey.mcaptcha.org/survey/campaigns/b717e51e-24d4-4ab6-912f-de2dfe3ce1fe/about

NOTE: The survey(at least, the lucky draw is temporarily suspended +due to some logistical reasons. Apologies for any inconvenience caused.

mCaptcha relies on a +proof-of-work(PoW) mechanism to guard against bots. In order for this to be effective, the difficulty factor should be configured properly. If the difficulty factor is too high all the time, it will inconvenience the users and if -it’s too low during attack, the defence will be weak.

-

So we are conducting a survey to gather performance benchmarks from +it’s too low during attack, the defence will be weak.

So we are conducting a survey to gather performance benchmarks from various devices and browsers. The data collected from the survey will be made public, we believe it will guide sysadmins configure difficulty factor -properly.

-

If you are interested in the lucky draw, please save the submission ID and the proof will be presented -to you at the end of the survey.

-
- survey lucky draw identifier credentials - -
Lucky draw credentials
-
-

Winners

-

This blog post will be updated with the winning submission IDs and the -winners should provide the matching proof to claim their rewards.

- -
- - -

Edit this page on git.batsense.net

- -
-
- -
-
- - - - - - - - - +properly.

If you are interested in the lucky draw, please save the submission ID and the proof will be presented +to you at the end of the survey.

survey lucky draw identifier credentials
Lucky draw credentials

Winners

This blog post will be updated with the winning submission IDs and the +winners should provide the matching proof to claim their rewards.

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/community/index.html b/community/index.html index 5bab62d..3f0eac0 100644 --- a/community/index.html +++ b/community/index.html @@ -1,181 +1,8 @@ - - - - - - - - - - - - - - Community - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- -
- -

Community

-

-

Matrix Community

-

Come say hi at our Matrix community!

-

Fediverse handle

-

We are on the Fediverse at -@mCapthca@batsense.net, toot at -us for queries and whatnot :)

-

Official Twitter handle

-

The project also has a twitter twitter presence at @m_captcha(Nitter +Community - mCaptcha

Community

Matrix Community

Come say hi at our Matrix community!

Fediverse handle

We are on the Fediverse at +@mCapthca@batsense.net, toot at +us for queries and whatnot :)

Official Twitter handle

The project also has a twitter twitter presence at @m_captcha(Nitter hyperlink). This space is used in -addition to the blog to post short updates.

-

Lead developer email

-

Write to me at realaravinth@batsense.net!

-

Bug reports

-

We use GitHub for managing tickets

- -

Edit this page on git.batsense.net

- -
-
- -
-
- - - - - - - - - +addition to the blog to post short updates.

Lead developer email

Write to me at realaravinth@batsense.net!

Bug reports

We use GitHub for managing tickets

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/contact/index.html b/contact/index.html index d01b45b..88da562 100644 --- a/contact/index.html +++ b/contact/index.html @@ -1,173 +1,9 @@ - - - - - - - - - - - - - - Contact - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - \ No newline at end of file diff --git a/contributors/aravinth-manivannan/index.html b/contributors/aravinth-manivannan/index.html index 08d0918..b731a9f 100644 --- a/contributors/aravinth-manivannan/index.html +++ b/contributors/aravinth-manivannan/index.html @@ -1,226 +1,4 @@ - - - - - - - - - - - - - - Aravinth Manivannan - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
-
-
-

Aravinth Manivannan

-

Creator of mCaptcha.

-

@realaravinth

-
-
-
-
-

Introducing mCaptcha net

-

-

Posted October 19, 2023 by Aravinth Manivannan ‐ 2 min read

-

Last Edited October 21, 2023

-

-
-
-
-

February, 2023: Monthly Report

-

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

-

Posted March 8, 2023 by Aravinth Manivannan ‐ 2 min read

-

Last Edited March 9, 2023

-

-
-
-
-

July, 2022: Monthly Report

-

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

-

Posted August 4, 2022 by Aravinth Manivannan ‐ 2 min read

-

Last Edited February 13, 2023

-

-
-
-
-

June, 2022: Monthly Report

-

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

-

Posted July 7, 2022 by Aravinth Manivannan ‐ 2 min read

-

Last Edited July 7, 2022

-

-
-
-
-

May, 2022: Monthly Report

-

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

-

Posted June 10, 2022 by Aravinth Manivannan ‐ 4 min read

-

Last Edited June 14, 2022

-

-
-
-
-

December, 2021: Monthly Report

-

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

-

Posted December 23, 2021 by Aravinth Manivannan ‐ 2 min read

-

Last Edited June 14, 2022

-

-
-
-
-

Survey

-

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

-

Posted October 28, 2021 by Aravinth Manivannan ‐ 1 min read

-

Last Edited December 23, 2021

-

-
-
-
-

PoW performance

-

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

-

Posted September 1, 2021 by Aravinth Manivannan ‐ 2 min read

-

Last Edited September 1, 2021

-

-
-
-
-

Say hello to mCaptcha

-

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

-

Posted May 26, 2021 by Aravinth Manivannan ‐ 2 min read

-

Last Edited December 2, 2021

-

-
-
-
-
-
- -
-
- - - - - - - - - +Aravinth Manivannan - mCaptcha

Aravinth Manivannan

Creator of mCaptcha.

@realaravinth

Introducing mCaptcha net

Posted October 19, 2023 by Aravinth Manivannan ‐ 2 min read

Last Edited October 21, 2023

February, 2023: Monthly Report

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

Posted March 8, 2023 by Aravinth Manivannan ‐ 2 min read

Last Edited March 9, 2023

July, 2022: Monthly Report

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

Posted August 4, 2022 by Aravinth Manivannan ‐ 2 min read

Last Edited February 13, 2023

June, 2022: Monthly Report

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

Posted July 7, 2022 by Aravinth Manivannan ‐ 2 min read

Last Edited July 7, 2022

May, 2022: Monthly Report

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

Posted June 10, 2022 by Aravinth Manivannan ‐ 4 min read

Last Edited June 14, 2022

December, 2021: Monthly Report

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

Posted December 23, 2021 by Aravinth Manivannan ‐ 2 min read

Last Edited June 14, 2022

Survey

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

Posted October 28, 2021 by Aravinth Manivannan ‐ 1 min read

Last Edited December 23, 2021

PoW performance

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

Posted September 1, 2021 by Aravinth Manivannan ‐ 2 min read

Last Edited September 1, 2021

Say hello to mCaptcha

We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?

Posted May 26, 2021 by Aravinth Manivannan ‐ 2 min read

Last Edited December 2, 2021

\ No newline at end of file diff --git a/contributors/aravinth-manivannan/index.xml b/contributors/aravinth-manivannan/index.xml index 0bf783d..8e89d0a 100644 --- a/contributors/aravinth-manivannan/index.xml +++ b/contributors/aravinth-manivannan/index.xml @@ -1,109 +1,18 @@ - - - - Aravinth Manivannan on - /contributors/aravinth-manivannan/ - Recent content in Aravinth Manivannan on - Hugo -- gohugo.io - en-US - Wed, 26 May 2021 00:00:00 +0000 - - Introducing mCaptcha net - /blog/introducing-mcaptcha-net/ - Thu, 19 Oct 2023 00:00:00 +0000 - - /blog/introducing-mcaptcha-net/ - mCaptcha uses a Proof-of-Work (PoW) based algorithm to offer Denial-of-Service protection, because of its excellent accessibility characteristics. PoW within mCaptcha is configuration &mdash; webmasters can configure difficulty factors for their installations, which determines waiting time for visitors. But PoW can become inaccessible if webmasters choose a very high difficulty factor. So they have to maintain a balance which imposes sufficient load on DDoS attackers while also being accessible to common folk. - - - - February, 2023: Monthly Report - /blog/february-2023-monthly-report/ - Wed, 08 Mar 2023 00:00:00 +0000 - - /blog/february-2023-monthly-report/ - Hello and welcome to the (August 2022 to) February, 2023 monthly report! +Aravinth Manivannan on/contributors/aravinth-manivannan/Recent content in Aravinth Manivannan onHugo -- gohugo.ioen-USWed, 26 May 2021 00:00:00 +0000Introducing mCaptcha net/blog/introducing-mcaptcha-net/Thu, 19 Oct 2023 00:00:00 +0000/blog/introducing-mcaptcha-net/mCaptcha uses a Proof-of-Work (PoW) based algorithm to offer Denial-of-Service protection, because of its excellent accessibility characteristics. PoW within mCaptcha is configuration &mdash; webmasters can configure difficulty factors for their installations, which determines waiting time for visitors. But PoW can become inaccessible if webmasters choose a very high difficulty factor. So they have to maintain a balance which imposes sufficient load on DDoS attackers while also being accessible to common folk.February, 2023: Monthly Report/blog/february-2023-monthly-report/Wed, 08 Mar 2023 00:00:00 +0000/blog/february-2023-monthly-report/Hello and welcome to the (August 2022 to) February, 2023 monthly report! TL;DR Gusted and I secured funding from NLnet to work on mCaptcha in 2023, we suffered an outage from 15 January to February 6, polyfill benchmarking support in mCaptcha We have funding! Gusted and I applied and secured funding through 2023 development is funded through the NGI0 Entrust Fund, via NLnet. -The full list of tasks that we&rsquo;ll be working on in the period is is available here. - - - - July, 2022: Monthly Report - /blog/july-2022-monthly-report/ - Thu, 04 Aug 2022 00:00:00 +0000 - - /blog/july-2022-monthly-report/ - Hello and welcome to the July, 2022 monthly report! +The full list of tasks that we&rsquo;ll be working on in the period is is available here.July, 2022: Monthly Report/blog/july-2022-monthly-report/Thu, 04 Aug 2022 00:00:00 +0000/blog/july-2022-monthly-report/Hello and welcome to the July, 2022 monthly report! TL;DR Codeberg is trying out mCaptcha, Gitea is getting mCaptcha support, mCaptcha supports MariaDB, I&rsquo;ve applied for NLnet and Open Tech Fund, documentation is updated: tutorials and glossary is added and glue libraries have new releases. -Codeberg is deploying mCaptcha Codeberg is committed to trying out mCaptcha to make their platform more accessible: they currently use a text-based CAPTCHA, which will be replaced by mCaptcha. - - - - June, 2022: Monthly Report - /blog/june-2022-monthly-report/ - Thu, 07 Jul 2022 00:00:00 +0000 - - /blog/june-2022-monthly-report/ - Hello and welcome to the June 2022 edition of the monthly report! +Codeberg is deploying mCaptcha Codeberg is committed to trying out mCaptcha to make their platform more accessible: they currently use a text-based CAPTCHA, which will be replaced by mCaptcha.June, 2022: Monthly Report/blog/june-2022-monthly-report/Thu, 07 Jul 2022 00:00:00 +0000/blog/june-2022-monthly-report/Hello and welcome to the June 2022 edition of the monthly report! mCaptcha is incorporated! I spent June doing non-technical tasks but I made significant progress: I had been trying to do it since summer 2021, but I faced various setbacks along the way. A family friend, who is also an auditor helped me finally get mCaptcha incorporated! And we&rsquo;ve already filed successfully filed the first tax return too! -GSTIN 33DGKPA2253J1ZN Ideas for Commercial Operations Commercial operations will take a while longer(end of 2022, most probably). - - - - May, 2022: Monthly Report - /blog/may-2022-monthly-report/ - Fri, 10 Jun 2022 00:00:00 +0000 - - /blog/may-2022-monthly-report/ - Hello and welcome to the May 2022 edition of the monthly report! +GSTIN 33DGKPA2253J1ZN Ideas for Commercial Operations Commercial operations will take a while longer(end of 2022, most probably).May, 2022: Monthly Report/blog/may-2022-monthly-report/Fri, 10 Jun 2022 00:00:00 +0000/blog/may-2022-monthly-report/Hello and welcome to the May 2022 edition of the monthly report! mCaptcha, for a while was showing all the signs of a dead project: no commits on the repositories and no monthly updates. But the project is far from dead! -Python bindings to mCaptcha PoW pow_py contains bindings to pow_sha256, the proof-of-work library that mCaptcha uses. For the uninitiated, the bindings allow for python programs to automatically solve mCaptcha. - - - - December, 2021: Monthly Report - /blog/december-2021-monthly-report/ - Thu, 23 Dec 2021 00:00:00 +0000 - - /blog/december-2021-monthly-report/ - Hello and welcome to the first edition of the monthly report! +Python bindings to mCaptcha PoW pow_py contains bindings to pow_sha256, the proof-of-work library that mCaptcha uses. For the uninitiated, the bindings allow for python programs to automatically solve mCaptcha.December, 2021: Monthly Report/blog/december-2021-monthly-report/Thu, 23 Dec 2021 00:00:00 +0000/blog/december-2021-monthly-report/Hello and welcome to the first edition of the monthly report! I believe free software like mCaptcha is critical to a healthy internet but being a one-person show, there&rsquo;s hardly any accountability in the way software is built. I hope, through monthly reports, I can explain the logic and intentions behind decisions taken in the development process. This month, the following things were accomplished: -1. Full LibreJS Compliance The CAPTCHA widget and the admin dashboard are 100% LibreJS compliant! - - - - Survey - /blog/survey/ - Thu, 28 Oct 2021 00:00:00 +0000 - - /blog/survey/ - Survey link: https://survey.mcaptcha.org/survey/campaigns/b717e51e-24d4-4ab6-912f-de2dfe3ce1fe/about +1. Full LibreJS Compliance The CAPTCHA widget and the admin dashboard are 100% LibreJS compliant!Survey/blog/survey/Thu, 28 Oct 2021 00:00:00 +0000/blog/survey/Survey link: https://survey.mcaptcha.org/survey/campaigns/b717e51e-24d4-4ab6-912f-de2dfe3ce1fe/about NOTE: The survey(at least, the lucky draw is temporarily suspended due to some logistical reasons. Apologies for any inconvenience caused. -mCaptcha relies on a proof-of-work(PoW) mechanism to guard against bots. In order for this to be effective, the difficulty factor should be configured properly. If the difficulty factor is too high all the time, it will inconvenience the users and if it&rsquo;s too low during attack, the defence will be weak. - - - - PoW performance - /blog/pow-performance/ - Wed, 01 Sep 2021 00:00:00 +0000 - - /blog/pow-performance/ - mCaptcha uses a proof-of-work(PoW) mechanism to rate limit users or potential bots. In order for this to be effective, the PoW should be configured properly. The difficulty requirement can&rsquo;t be too high, as it could cause accessibility issues on the client-side while at the same time, it shouldn&rsquo;t be too low, as it wouldn&rsquo;t offer proper protection against bots. -Malicious bots(the ones that wreak havoc), run native code which is capable of running in a multi-threaded context. - - - - Say hello to mCaptcha - /blog/say-hello-to-mcaptcha/ - Wed, 26 May 2021 00:00:00 +0000 - - /blog/say-hello-to-mcaptcha/ - At mCaptcha, we believe in digital freedom and privacy and so we built a proof-of-work based CAPTCHA system that doesn&rsquo;t track. Seriously, no tracking. But that isn&rsquo;t the killer feature, our system doesn&rsquo;t require the user to pick cars or ID sidewalks &mdash; our system does it&rsquo;s thing(usually at the click of a button) and gets out of the way. -How does it work? mCaptcha uses SHA256 based proof-of-work(PoW) to rate limit users. - - - - +mCaptcha relies on a proof-of-work(PoW) mechanism to guard against bots. In order for this to be effective, the difficulty factor should be configured properly. If the difficulty factor is too high all the time, it will inconvenience the users and if it&rsquo;s too low during attack, the defence will be weak.PoW performance/blog/pow-performance/Wed, 01 Sep 2021 00:00:00 +0000/blog/pow-performance/mCaptcha uses a proof-of-work(PoW) mechanism to rate limit users or potential bots. In order for this to be effective, the PoW should be configured properly. The difficulty requirement can&rsquo;t be too high, as it could cause accessibility issues on the client-side while at the same time, it shouldn&rsquo;t be too low, as it wouldn&rsquo;t offer proper protection against bots. +Malicious bots(the ones that wreak havoc), run native code which is capable of running in a multi-threaded context.Say hello to mCaptcha/blog/say-hello-to-mcaptcha/Wed, 26 May 2021 00:00:00 +0000/blog/say-hello-to-mcaptcha/At mCaptcha, we believe in digital freedom and privacy and so we built a proof-of-work based CAPTCHA system that doesn&rsquo;t track. Seriously, no tracking. But that isn&rsquo;t the killer feature, our system doesn&rsquo;t require the user to pick cars or ID sidewalks &mdash; our system does it&rsquo;s thing(usually at the click of a button) and gets out of the way. +How does it work? mCaptcha uses SHA256 based proof-of-work(PoW) to rate limit users. \ No newline at end of file diff --git a/contributors/index.html b/contributors/index.html index 5115268..74c9a89 100644 --- a/contributors/index.html +++ b/contributors/index.html @@ -1,158 +1,4 @@ - - - - - - - - - - - - - - Contributors - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
-
- -
-
- -
-
- - - - - - - - - +Contributors - mCaptcha
\ No newline at end of file diff --git a/contributors/index.xml b/contributors/index.xml index 6725701..ba79a45 100644 --- a/contributors/index.xml +++ b/contributors/index.xml @@ -1,21 +1,2 @@ - - - - Contributors on - /contributors/ - Recent content in Contributors on - Hugo -- gohugo.io - en-US - Wed, 26 May 2021 00:00:00 +0000 - - Aravinth Manivannan - /contributors/aravinth-manivannan/ - Wed, 26 May 2021 00:00:00 +0000 - - /contributors/aravinth-manivannan/ - Creator of mCaptcha. -@realaravinth - - - - +Contributors on/contributors/Recent content in Contributors onHugo -- gohugo.ioen-USWed, 26 May 2021 00:00:00 +0000Aravinth Manivannan/contributors/aravinth-manivannan/Wed, 26 May 2021 00:00:00 +0000/contributors/aravinth-manivannan/Creator of mCaptcha. +@realaravinth \ No newline at end of file diff --git a/docs/api/browser/index.html b/docs/api/browser/index.html index 1e665af..6f48e59 100644 --- a/docs/api/browser/index.html +++ b/docs/api/browser/index.html @@ -1,249 +1,16 @@ - - - - - - - - - - - - - - Browser libraries - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- - -
- -

Browser libraries

-

-

The browser part of mCaptcha is divided into three components.

-
    -
  • Glue code
  • -
  • Widget program
  • -
  • Proof-of-Work libraries(WebAssembly and JavaScript polyfill)
  • -
-

Glue code

-

This is the code that links mCaptcha with your website’s frontend code. +Browser libraries - mCaptcha

Browser libraries

The browser part of mCaptcha is divided into three components.

  • Glue code
  • Widget program
  • Proof-of-Work libraries(WebAssembly and JavaScript polyfill)

Glue code

This is the code that links mCaptcha with your website’s frontend code. It creates an iframe containing the mCaptcha widget and injects the -received verification proof token into a hidden input field.

-

Support is available for various frameworks, see -mCaptcha/glue for the full list.

-

For frameworks without official support, a low-level library, -@mcaptcha/core-glue, -can be used to implement support.

-

Widget Program

-

This part is served by the mCaptcha backend. It fetches PoW config from +received verification proof token into a hidden input field.

Support is available for various frameworks, see +mCaptcha/glue for the full list.

For frameworks without official support, a low-level library, +@mcaptcha/core-glue, +can be used to implement support.

Widget Program

This part is served by the mCaptcha backend. It fetches PoW config from the backend, generates proof and submits it for verification. If verification is successful, it sends a message containing the verification proof token to the parent window, assuming it’s loaded as -an iframe.

- -

WebAssembly library which generates Proofs of Work for mCaptcha systems.

-

Proof-of-Work(PoW) library

-

WebAssembly bindings(mCaptcha/pow_wasm) are available for the main rust library(mCaptcha/pow_sha256).

-

For browsers without support WebAssembly, a -polyfill(pow_sha256-polyfill) -is available.

- -

Edit this page on git.batsense.net

- - - -
-
- -
-
- - - - - - - - - +an iframe.

WebAssembly library which generates Proofs of Work for mCaptcha systems.

Proof-of-Work(PoW) library

WebAssembly bindings(mCaptcha/pow_wasm) are available for the main rust library(mCaptcha/pow_sha256).

For browsers without support WebAssembly, a +polyfill(pow_sha256-polyfill) +is available.

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/docs/api/index.html b/docs/api/index.html index c5754fb..9f8becb 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -1,203 +1,4 @@ - - - - - - - - - - - - - - API - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
-
- -
-
- -
-
- - - - - - - - - +API - mCaptcha
\ No newline at end of file diff --git a/docs/api/index.xml b/docs/api/index.xml index 7423495..f4b689d 100644 --- a/docs/api/index.xml +++ b/docs/api/index.xml @@ -1,45 +1,8 @@ - - - - API on - /docs/api/ - Recent content in API on - Hugo -- gohugo.io - en-US - Tue, 06 Oct 2020 08:48:23 +0000 - - Browser libraries - /docs/api/browser/ - Thu, 11 Mar 2021 00:00:00 +0000 - - /docs/api/browser/ - The browser part of mCaptcha is divided into three components. +API on/docs/api/Recent content in API onHugo -- gohugo.ioen-USTue, 06 Oct 2020 08:48:23 +0000Browser libraries/docs/api/browser/Thu, 11 Mar 2021 00:00:00 +0000/docs/api/browser/The browser part of mCaptcha is divided into three components. Glue code Widget program Proof-of-Work libraries(WebAssembly and JavaScript polyfill) Glue code This is the code that links mCaptcha with your website&rsquo;s frontend code. It creates an iframe containing the mCaptcha widget and injects the received verification proof token into a hidden input field. Support is available for various frameworks, see mCaptcha/glue for the full list. -For frameworks without official support, a low-level library, @mcaptcha/core-glue, can be used to implement support. - - - - mCaptcha System Library - /docs/api/mcaptcha-system/ - Thu, 11 Mar 2021 00:00:00 +0000 - - /docs/api/mcaptcha-system/ - Documentation for the library used in mCaptcha core. -Versions master-branch 0.1.3 0.1.2 0.1.1 0.1.0 - - - - pow_sha256 - /docs/api/pow-sha256/ - Thu, 11 Mar 2021 00:00:00 +0000 - - /docs/api/pow-sha256/ - Rust crate which generates SHA256 Proofs of Work on serializable datatypes. +For frameworks without official support, a low-level library, @mcaptcha/core-glue, can be used to implement support.mCaptcha System Library/docs/api/mcaptcha-system/Thu, 11 Mar 2021 00:00:00 +0000/docs/api/mcaptcha-system/Documentation for the library used in mCaptcha core. +Versions master-branch 0.1.3 0.1.2 0.1.1 0.1.0pow_sha256/docs/api/pow-sha256/Thu, 11 Mar 2021 00:00:00 +0000/docs/api/pow-sha256/Rust crate which generates SHA256 Proofs of Work on serializable datatypes. This is a fork of the pow library by @robkorn) with some new additions. Primary of these being: PoW datatype now offers a constructor Salt is no longer hard coded into the library, users can provide unique salts. Other small changes have also been included of various importance but mostly just stylistic/ease of use improvements. -Versions master-branch 0.2.1 0.2.0 0. - - - - +Versions master-branch 0. \ No newline at end of file diff --git a/docs/api/mcaptcha-system/index.html b/docs/api/mcaptcha-system/index.html index 6f6ff1d..22b54cd 100644 --- a/docs/api/mcaptcha-system/index.html +++ b/docs/api/mcaptcha-system/index.html @@ -1,225 +1,4 @@ - - - - - - - - - - - - - - mCaptcha System Library - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- - -
- -

mCaptcha System Library

-

-

Documentation for the library used in mCaptcha core.

-

Versions

- - -

Edit this page on git.batsense.net

- - - -
-
- -
-
- - - - - - - - - +mCaptcha System Library - mCaptcha
\ No newline at end of file diff --git a/docs/api/pow-sha256/index.html b/docs/api/pow-sha256/index.html index 76407b0..6321a3e 100644 --- a/docs/api/pow-sha256/index.html +++ b/docs/api/pow-sha256/index.html @@ -1,238 +1,9 @@ - - - - - - - - - - - - - - pow_sha256 - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- - -
- -

pow_sha256

-

-

Rust crate which generates SHA256 Proofs of Work on serializable datatypes.

-

This is a fork of the pow library by -@robkorn) with some new -additions. Primary of these being:

-
    -
  • PoW datatype now offers a constructor
  • -
  • Salt is no longer hard coded into the library, users can provide -unique salts.
  • -
-

Other small changes have also been included of various importance but -mostly just stylistic/ease of use improvements.

-

Versions

- -

Changelog

-

Changelog is available at the project’s -repository

- -

Edit this page on git.batsense.net

- - - -
-
- -
-
- - - - - - - - - +pow_sha256 - mCaptcha

pow_sha256

Rust crate which generates SHA256 Proofs of Work on serializable datatypes.

This is a fork of the pow library by +@robkorn) with some new +additions. Primary of these being:

  • PoW datatype now offers a constructor
  • Salt is no longer hard coded into the library, users can provide +unique salts.

Other small changes have also been included of various importance but +mostly just stylistic/ease of use improvements.

Versions

Changelog

Changelog is available at the project’s +repository

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/docs/api/sitemap.xml b/docs/api/sitemap.xml index 57dcc67..09b7be2 100644 --- a/docs/api/sitemap.xml +++ b/docs/api/sitemap.xml @@ -1,24 +1 @@ - - - - /docs/api/browser/ - 2022-08-01T20:24:18+05:30 - weekly - 0.5 - - - - /docs/api/mcaptcha-system/ - 2022-08-01T20:24:18+05:30 - weekly - 0.5 - - - - /docs/api/pow-sha256/ - 2022-08-01T20:24:18+05:30 - weekly - 0.5 - - \ No newline at end of file +/docs/api/browser/2022-08-01T20:24:18+05:30weekly0.5/docs/api/mcaptcha-system/2022-08-01T20:24:18+05:30weekly0.5/docs/api/pow-sha256/2022-08-01T20:24:18+05:30weekly0.5 \ No newline at end of file diff --git a/docs/help/faq/index.html b/docs/help/faq/index.html index e5b983a..75d6b6a 100644 --- a/docs/help/faq/index.html +++ b/docs/help/faq/index.html @@ -1,212 +1,4 @@ - - - - - - - - - - - - - - FAQ - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- - -
- -

FAQ

-

Answers to frequently asked questions.

-

Coming soon

- -

Edit this page on git.batsense.net

- - - -
-
- -
-
- - - - - - - - - +FAQ - mCaptcha
\ No newline at end of file diff --git a/docs/help/index.html b/docs/help/index.html index c9a6151..3a68595 100644 --- a/docs/help/index.html +++ b/docs/help/index.html @@ -1,197 +1,4 @@ - - - - - - - - - - - - - - Help - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
-
-
-

Help

-
-
- - - - - - - - - - - - - -
-
- FAQ → -
-
- - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
-
- - - - - - - - - +Help - mCaptcha
\ No newline at end of file diff --git a/docs/help/index.xml b/docs/help/index.xml index 31b15fd..80ede88 100644 --- a/docs/help/index.xml +++ b/docs/help/index.xml @@ -1,30 +1,2 @@ - - - - Help on - /docs/help/ - Recent content in Help on - Hugo -- gohugo.io - en-US - Tue, 06 Oct 2020 08:49:15 +0000 - - Troubleshooting - /docs/help/troubleshooting/ - Mon, 01 Jan 0001 00:00:00 +0000 - - /docs/help/troubleshooting/ - Q: I just setup an instance but I am unable to login mCaptcha by default is configured to server at localhost hostname. If the instance is deployed at another hostname, please try setting MCAPTCHA_SERVER_DOMAIN environment variable to the hostname at which your instance is deployed or setting the equivalent in config.toml: -1[server] 2domain=mydomain - - - - FAQ - /docs/help/faq/ - Mon, 01 Jan 0001 00:00:00 +0000 - - /docs/help/faq/ - Coming soon - - - - +Help on/docs/help/Recent content in Help onHugo -- gohugo.ioen-USTue, 06 Oct 2020 08:49:15 +0000Troubleshooting/docs/help/troubleshooting/Mon, 01 Jan 0001 00:00:00 +0000/docs/help/troubleshooting/Q: I just setup an instance but I am unable to login mCaptcha by default is configured to server at localhost hostname. If the instance is deployed at another hostname, please try setting MCAPTCHA_SERVER_DOMAIN environment variable to the hostname at which your instance is deployed or setting the equivalent in config.toml: +1[server] 2domain=mydomainFAQ/docs/help/faq/Mon, 01 Jan 0001 00:00:00 +0000/docs/help/faq/Coming soon \ No newline at end of file diff --git a/docs/help/sitemap.xml b/docs/help/sitemap.xml index 1172705..73bf3c3 100644 --- a/docs/help/sitemap.xml +++ b/docs/help/sitemap.xml @@ -1,17 +1 @@ - - - - /docs/help/troubleshooting/ - 2022-08-01T22:24:30+05:30 - weekly - 0.5 - - - - /docs/help/faq/ - 2022-08-01T19:16:21+05:30 - weekly - 0.5 - - \ No newline at end of file +/docs/help/troubleshooting/2022-08-01T22:24:30+05:30weekly0.5/docs/help/faq/2022-08-01T19:16:21+05:30weekly0.5 \ No newline at end of file diff --git a/docs/help/troubleshooting/index.html b/docs/help/troubleshooting/index.html index ae7fa2a..7a56160 100644 --- a/docs/help/troubleshooting/index.html +++ b/docs/help/troubleshooting/index.html @@ -1,222 +1,9 @@ - - - - - - - - - - - - - - Troubleshooting - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- - -
- -

Troubleshooting

-

Solutions to common problems.

-

Q: I just setup an instance but I am unable to login

-

mCaptcha by default is configured to server at localhost hostname. If +Troubleshooting - mCaptcha

Troubleshooting

Solutions to common problems.

Q: I just setup an instance but I am unable to login

mCaptcha by default is configured to server at localhost hostname. If the instance is deployed at another hostname, please try setting MCAPTCHA_SERVER_DOMAIN environment variable to the hostname at which -your instance is deployed or setting the equivalent in config.toml:

-
1[server]
-2domain=mydomain
-
-

Edit this page on git.batsense.net

- - - -
-
- -
-
- - - - - - - - - +your instance is deployed or setting the equivalent in config.toml:

1[server]
+2domain=mydomain
+

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 92ccf68..97d7fb4 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,274 +1,4 @@ - - - - - - - - - - - - - - mCaptcha - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
-
-
-

mCaptcha

-
-
- - - - - - - -
- -
- - - - - - - - - - - - - - - -
-
- FAQ → -
-
- - - - - - - - - - - - - - - -
- -
- - - -
- -
- - - - - - - - - - - - - - - - - - -
-
-
-
- -
-
- - - - - - - - - +mCaptcha - mCaptcha
\ No newline at end of file diff --git a/docs/index.xml b/docs/index.xml index acb2017..4cf1128 100644 --- a/docs/index.xml +++ b/docs/index.xml @@ -1,10 +1 @@ - - - - mCaptcha on - /docs/ - Recent content in mCaptcha on - Hugo -- gohugo.io - en-US - - +mCaptcha on/docs/Recent content in mCaptcha onHugo -- gohugo.ioen-US \ No newline at end of file diff --git a/docs/self-hosting/bare-metal/index.html b/docs/self-hosting/bare-metal/index.html index d91e9f5..a74afd4 100644 --- a/docs/self-hosting/bare-metal/index.html +++ b/docs/self-hosting/bare-metal/index.html @@ -1,318 +1,46 @@ - - - - - - - - - - - - - - Deploy bare metal - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- - -
- -

Deploy bare metal

-

Bare metal deployment is tedious, most of this will be automated with a script in the future.

-

2. Configure

-

mcaptcha is highly configurable.

-

Configuration is applied/merged in the following order:

-
    -
  1. path to configuration file passed in via MCAPTCHA_CONFIG
  2. -
  3. ./config/default.toml
  4. -
  5. /etc/mcaptcha/config.toml
  6. -
  7. environment variables.
  8. -
-

1. Install postgres if you don’t have it already.

-

For Debian based distributions:

-
1sudo apt install postgres
-

2. Create new user for running mcaptcha

-
1$ sudo useradd -b /srv -m -s /usr/bin/zsh mcaptcha
-

3. Create new user in Postgres

-
1$ sudo -iu postgres # switch to `postgres` user
-2$ psql
-3postgres=#  CREATE USER mcaptcha WITH PASSWORD 'my super long password and yes you need single quote`;
-4$  createdb -O mcaptcha mcaptcha # create db 'mcaptcha' with 'mcaptcha' as owner
-

4. Install and load mCaptcha/cache module:

-

See mCaptcha/cache for more -details.

-

4. Build mcaptcha

-

To build mcaptcha, you need the following dependencies:

-
    -
  1. rust
  2. -
  3. node(v14.16.0)
  4. -
  5. yarn(JavaScript package manager)
  6. -
  7. make
  8. -
-

How to build

-
    -
  1. Install Cargo using rustup with:
  2. -
-
1$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-
    -
  1. -

    Install node(v14.16.0)

    -
  2. -
  3. -

    Install yarn(JavaScript package manager)

    -
  4. -
  5. -

    Build with make:

    -
  6. -
-
1$ make dev-env && \
-2	make release
-

5. Install package:

-
1$ sudo cp ./target/release/mcaptcha /usr/bin/ && \
-2	mkdir sudo /etc/mcaptcha && \
-3	sudo cp config/default.toml /etc/mcaptcha/config.toml
-

6. Systemd service configuration:

-
    -
  1. Copy the following to /etc/systemd/system/mcaptcha.service:
  2. -
-
 1[Unit]
- 2Description=mCaptcha: a CAPTCHA system that gives attackers a run for their money
- 3
- 4[Service]
- 5Type=simple
- 6User=mcaptcha
- 7ExecStart=/usr/bin/mcaptcha
- 8Restart=on-failure
- 9RestartSec=1
-10SuccessExitStatus=3 4
-11RestartForceExitStatus=3 4
-12SystemCallArchitectures=native
-13MemoryDenyWriteExecute=true
-14NoNewPrivileges=true
-15Environment="RUST_LOG=info"
-16
-17[Unit]
-18After=sound.target
-19Wants=network-online.target
-20Wants=network-online.target
-21Requires=postgresql.service
-22After=syslog.target
-23
-24[Install]
-25WantedBy=multi-user.target
-
    -
  1. Enable service:
  2. -
-
1$ sudo systemctl daemon-reload && \
-2	sudo systemctl enable mcaptcha && \ # Auto startup during boot
-3	sudo systemctl start mcaptcha
-4``
-
-

Edit this page on git.batsense.net

- - - -
-
- -
-
- - - - - - - - - +Deploy bare metal - mCaptcha

Deploy bare metal

Bare metal deployment is tedious, most of this will be automated with a script in the future.

2. Configure

mcaptcha is highly configurable.

Configuration is applied/merged in the following order:

  1. path to configuration file passed in via MCAPTCHA_CONFIG
  2. ./config/default.toml
  3. /etc/mcaptcha/config.toml
  4. environment variables.

1. Install postgres if you don’t have it already.

For Debian based distributions:

1sudo apt install postgres
+

2. Create new user for running mcaptcha

1$ sudo useradd -b /srv -m -s /usr/bin/zsh mcaptcha
+

3. Create new user in Postgres

1$ sudo -iu postgres # switch to `postgres` user
+2$ psql
+3postgres=#  CREATE USER mcaptcha WITH PASSWORD 'my super long password and yes you need single quote`;
+4$  createdb -O mcaptcha mcaptcha # create db 'mcaptcha' with 'mcaptcha' as owner
+

4. Install and load mCaptcha/cache module:

See mCaptcha/cache for more +details.

4. Build mcaptcha

To build mcaptcha, you need the following dependencies:

  1. rust
  2. node(v14.16.0)
  3. yarn(JavaScript package manager)
  4. make

How to build

  1. Install Cargo using rustup with:
1$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
+
  1. Install node(v14.16.0)

  2. Install yarn(JavaScript package manager)

  3. Build with make:

1$ make dev-env && \
+2	make release
+

5. Install package:

1$ sudo cp ./target/release/mcaptcha /usr/bin/ && \
+2	mkdir sudo /etc/mcaptcha && \
+3	sudo cp config/default.toml /etc/mcaptcha/config.toml
+

6. Systemd service configuration:

  1. Copy the following to /etc/systemd/system/mcaptcha.service:
 1[Unit]
+ 2Description=mCaptcha: a CAPTCHA system that gives attackers a run for their money
+ 3
+ 4[Service]
+ 5Type=simple
+ 6User=mcaptcha
+ 7ExecStart=/usr/bin/mcaptcha
+ 8Restart=on-failure
+ 9RestartSec=1
+10SuccessExitStatus=3 4
+11RestartForceExitStatus=3 4
+12SystemCallArchitectures=native
+13MemoryDenyWriteExecute=true
+14NoNewPrivileges=true
+15Environment="RUST_LOG=info"
+16
+17[Unit]
+18After=sound.target
+19Wants=network-online.target
+20Wants=network-online.target
+21Requires=postgresql.service
+22After=syslog.target
+23
+24[Install]
+25WantedBy=multi-user.target
+
  1. Enable service:
1$ sudo systemctl daemon-reload && \
+2	sudo systemctl enable mcaptcha && \ # Auto startup during boot
+3	sudo systemctl start mcaptcha
+4``
+

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/docs/self-hosting/dependencies/index.html b/docs/self-hosting/dependencies/index.html index 689e106..a066b2e 100644 --- a/docs/self-hosting/dependencies/index.html +++ b/docs/self-hosting/dependencies/index.html @@ -1,293 +1,30 @@ - - - - - - - - - - - - - - Database and cache - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- - -
- -

Database and cache

-

mCaptcha server requires dependencies like a Postgres database and a Redis cache

-

Notes

-

Database

-

Instructions

Once again, there are two ways to go about this:

  1. Docker
  2. Bare metal

Docker

Database

Download and run Postgres

1docker create --name mcaptcha-postgres \
+2  -e POSTGRES_PASSWORD=<database-password> \
+3  -p 5432:5432 \
+4  postgres && docker start mcaptcha-postgres
+

Redis

1docker create --name mcaptcha-cache \
+2  -p 6379:6379 \
+3  mcaptcha/cache && docker start mcaptcha-cache
+

See mCaptcha/cache for more +details.

1. Install Postgres if you don’t have it already.

For Debian based distributions:

1sudo apt install postgres
+

2. Create new user for running mCaptcha

1$ sudo useradd -b /srv -m -s /usr/bin/bash mcaptcha
+

3. Create new user in Postgres

1$ sudo -iu postgres # switch to `postgres` user
+2$ psql
+3postgres=#  CREATE USER mcaptcha WITH PASSWORD 'my super long password and yes you need single quote';
+4$  createdb -O mcaptcha mcaptcha # create db 'mcaptcha' with 'mcaptcha' as owner
+

4. Install mCaptcha/cache

See mCaptcha/cache for more +details.

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/docs/self-hosting/docker/index.html b/docs/self-hosting/docker/index.html index e7d569e..3732795 100644 --- a/docs/self-hosting/docker/index.html +++ b/docs/self-hosting/docker/index.html @@ -1,258 +1,15 @@ - - - - - - - - - - - - - - Using Docker - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- - -
- -

Using Docker

-

-

With Docker

-

1. Configure

-

mcaptcha is highly configurable.

-

Configuration is applied/merged in the following order:

-
    -
  1. path to configuration file passed in via MCAPTCHA_CONFIG
  2. -
  3. ./config/default.toml
  4. -
  5. /etc/mcaptcha/config.toml
  6. -
  7. environment variables.
  8. -
-

See -CONFIGURATION.md -for configurable options.

-

2. Run image

-

If you have already have a Postgres instance running, then:

-
1docker run -p <host-machine-port>:<port-in-configuration-file> \
-2	--add-host=database:<database-ip-addrss> \
-3	-e RUST_LOG=debug \
-4	-e DATABASE_URL="postgres://<db-user>:<db-password>@database:<db-port>/<db-name>" \
-5	mcaptcha/mcaptcha:latest
-

If you don’t have a Postgres instance running, you can either install +Using Docker - mCaptcha

Using Docker

With Docker

1. Configure

mcaptcha is highly configurable.

Configuration is applied/merged in the following order:

  1. path to configuration file passed in via MCAPTCHA_CONFIG
  2. ./config/default.toml
  3. /etc/mcaptcha/config.toml
  4. environment variables.

See +CONFIGURATION.md +for configurable options.

2. Run image

If you have already have a Postgres instance running, then:

1docker run -p <host-machine-port>:<port-in-configuration-file> \
+2	--add-host=database:<database-ip-addrss> \
+3	-e RUST_LOG=debug \
+4	-e DATABASE_URL="postgres://<db-user>:<db-password>@database:<db-port>/<db-name>" \
+5	mcaptcha/mcaptcha:latest
+

If you don’t have a Postgres instance running, you can either install one using a package manager or launch one with docker. A docker-compose configuration is available that will launch both -a database instance mcaptcha instance.

-

With docker-compose

-
    -
  1. -

    Follow steps above to build docker image.

    -
  2. -
  3. -

    Set database password docker-compose configuration.

    -
  4. -
  5. -

    Launch network

    -
  6. -
-
1docker-compose up -d
-
-

Edit this page on git.batsense.net

- - - -
-
- -
-
- - - - - - - - - +a database instance mcaptcha instance.

With docker-compose

  1. Follow steps above to build docker image.

  2. Set database password docker-compose configuration.

  3. Launch network

1docker-compose up -d
+

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/docs/self-hosting/getting-started/index.html b/docs/self-hosting/getting-started/index.html index 5a6ab90..746e485 100644 --- a/docs/self-hosting/getting-started/index.html +++ b/docs/self-hosting/getting-started/index.html @@ -1,221 +1,4 @@ - - - - - - - - - - - - - - Getting started - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- - -
- -

Getting started

-

Get started with self-hosting mCaptcha

-

Get started

-

There are two main ways to self-host mCaptcha:

-
    -
  1. Bare metal
  2. -
  3. With Docker
  4. -
- -

Edit this page on git.batsense.net

- - - -
-
- -
-
- - - - - - - - - +Getting started - mCaptcha
\ No newline at end of file diff --git a/docs/self-hosting/index.html b/docs/self-hosting/index.html index b9f9c4a..46fc200 100644 --- a/docs/self-hosting/index.html +++ b/docs/self-hosting/index.html @@ -1,208 +1,4 @@ - - - - - - - - - - - - - - Self-Hosting - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
-
- -
-
- -
-
- - - - - - - - - +Self-Hosting - mCaptcha
\ No newline at end of file diff --git a/docs/self-hosting/index.xml b/docs/self-hosting/index.xml index ab618d0..a3c2bd8 100644 --- a/docs/self-hosting/index.xml +++ b/docs/self-hosting/index.xml @@ -1,56 +1,11 @@ - - - - Self-Hosting on - /docs/self-hosting/ - Recent content in Self-Hosting on - Hugo -- gohugo.io - en-US - - Getting started - /docs/self-hosting/getting-started/ - Mon, 01 Jan 0001 00:00:00 +0000 - - /docs/self-hosting/getting-started/ - Get started There are two main ways to self-host mCaptcha: -Bare metal With Docker - - - - Deploy bare metal - /docs/self-hosting/bare-metal/ - Mon, 01 Jan 0001 00:00:00 +0000 - - /docs/self-hosting/bare-metal/ - 2. Configure mcaptcha is highly configurable. +Self-Hosting on/docs/self-hosting/Recent content in Self-Hosting onHugo -- gohugo.ioen-USGetting started/docs/self-hosting/getting-started/Mon, 01 Jan 0001 00:00:00 +0000/docs/self-hosting/getting-started/Get started There are two main ways to self-host mCaptcha: +Bare metal With DockerDeploy bare metal/docs/self-hosting/bare-metal/Mon, 01 Jan 0001 00:00:00 +0000/docs/self-hosting/bare-metal/2. Configure mcaptcha is highly configurable. Configuration is applied/merged in the following order: path to configuration file passed in via MCAPTCHA_CONFIG ./config/default.toml /etc/mcaptcha/config.toml environment variables. 1. Install postgres if you don&rsquo;t have it already. For Debian based distributions: -1sudo apt install postgres 2. Create new user for running mcaptcha 1$ sudo useradd -b /srv -m -s /usr/bin/zsh mcaptcha 3. Create new user in Postgres 1$ sudo -iu postgres # switch to `postgres` user 2$ psql 3postgres=# CREATE USER mcaptcha WITH PASSWORD &#39;my super long password and yes you need single quote`; 4$ createdb -O mcaptcha mcaptcha # create db &#39;mcaptcha&#39; with &#39;mcaptcha&#39; as owner 4. - - - - Using Docker - /docs/self-hosting/docker/ - Mon, 01 Jan 0001 00:00:00 +0000 - - /docs/self-hosting/docker/ - With Docker 1. Configure mcaptcha is highly configurable. +1sudo apt install postgres 2. Create new user for running mcaptcha 1$ sudo useradd -b /srv -m -s /usr/bin/zsh mcaptcha 3. Create new user in Postgres 1$ sudo -iu postgres # switch to `postgres` user 2$ psql 3postgres=# CREATE USER mcaptcha WITH PASSWORD &#39;my super long password and yes you need single quote`; 4$ createdb -O mcaptcha mcaptcha # create db &#39;mcaptcha&#39; with &#39;mcaptcha&#39; as owner 4.Using Docker/docs/self-hosting/docker/Mon, 01 Jan 0001 00:00:00 +0000/docs/self-hosting/docker/With Docker 1. Configure mcaptcha is highly configurable. Configuration is applied/merged in the following order: path to configuration file passed in via MCAPTCHA_CONFIG ./config/default.toml /etc/mcaptcha/config.toml environment variables. See CONFIGURATION.md for configurable options. 2. Run image If you have already have a Postgres instance running, then: -1docker run -p &lt;host-machine-port&gt;:&lt;port-in-configuration-file&gt; \ 2 --add-host=database:&lt;database-ip-addrss&gt; \ 3 -e RUST_LOG=debug \ 4 -e DATABASE_URL=&#34;postgres://&lt;db-user&gt;:&lt;db-password&gt;@database:&lt;db-port&gt;/&lt;db-name&gt;&#34; \ 5 mcaptcha/mcaptcha:latest If you don&rsquo;t have a Postgres instance running, you can either install one using a package manager or launch one with docker. - - - - Database and cache - /docs/self-hosting/dependencies/ - Mon, 01 Jan 0001 00:00:00 +0000 - - /docs/self-hosting/dependencies/ - Notes Database Database migrations are baked into the server binary so don&rsquo;t worry about them. +1docker run -p &lt;host-machine-port&gt;:&lt;port-in-configuration-file&gt; \ 2 --add-host=database:&lt;database-ip-addrss&gt; \ 3 -e RUST_LOG=debug \ 4 -e DATABASE_URL=&#34;postgres://&lt;db-user&gt;:&lt;db-password&gt;@database:&lt;db-port&gt;/&lt;db-name&gt;&#34; \ 5 mcaptcha/mcaptcha:latest If you don&rsquo;t have a Postgres instance running, you can either install one using a package manager or launch one with docker.Database and cache/docs/self-hosting/dependencies/Mon, 01 Jan 0001 00:00:00 +0000/docs/self-hosting/dependencies/Notes Database Database migrations are baked into the server binary so don&rsquo;t worry about them. When compiling from source, unset database configuration(comment out database configuration/ unset relevant environment variables). mCaptcha uses sqlx database client library which checks SQL queries at compile time. So if you are starting with a fresh database without migrations applied, compilation will fail. -Redis Redis is an optional dependency. Currently, the non-Redis configuration doesn&rsquo;t persist CAPTCHA heat. - - - - +Redis Redis is an optional dependency. \ No newline at end of file diff --git a/docs/self-hosting/sitemap.xml b/docs/self-hosting/sitemap.xml index a96ad4b..49634d7 100644 --- a/docs/self-hosting/sitemap.xml +++ b/docs/self-hosting/sitemap.xml @@ -1,31 +1 @@ - - - - /docs/self-hosting/getting-started/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - - /docs/self-hosting/bare-metal/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - - /docs/self-hosting/docker/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - - /docs/self-hosting/dependencies/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - \ No newline at end of file +/docs/self-hosting/getting-started/2023-10-27T21:39:40+05:30weekly0.5/docs/self-hosting/bare-metal/2023-10-27T21:39:40+05:30weekly0.5/docs/self-hosting/docker/2023-10-27T21:39:40+05:30weekly0.5/docs/self-hosting/dependencies/2023-10-27T21:39:40+05:30weekly0.5 \ No newline at end of file diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 0ca3c4b..bdcbb16 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -1,128 +1 @@ - - - - /docs/user-manual/ - 2023-10-28T01:09:37+05:30 - weekly - 0.5 - - - - /docs/help/ - 2021-07-21T15:49:53+05:30 - weekly - 0.5 - - - - /docs/webmasters/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - - /docs/api/ - 2022-08-01T22:24:03+05:30 - weekly - 0.5 - - - - /docs/self-hosting/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - /docs/user-manual/cli/ - 2023-10-28T01:09:37+05:30 - weekly - 0.5 - - - /docs/user-manual/how-to-mcaptcha-without-js/ - 2023-10-28T03:16:49+05:30 - weekly - 0.5 - - - /docs/help/troubleshooting/ - 2022-08-01T22:24:30+05:30 - weekly - 0.5 - - - /docs/help/faq/ - 2022-08-01T19:16:21+05:30 - weekly - 0.5 - - - /docs/webmasters/installing-captcha/ - 2023-10-28T02:30:28+05:30 - weekly - 0.5 - - - /docs/webmasters/configuring-difficulty-factor/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - /docs/webmasters/terminology/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - /docs/webmasters/faq/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - /docs/api/browser/ - 2022-08-01T20:24:18+05:30 - weekly - 0.5 - - - /docs/api/mcaptcha-system/ - 2022-08-01T20:24:18+05:30 - weekly - 0.5 - - - /docs/api/pow-sha256/ - 2022-08-01T20:24:18+05:30 - weekly - 0.5 - - - /docs/self-hosting/getting-started/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - /docs/self-hosting/bare-metal/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - /docs/self-hosting/docker/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - /docs/self-hosting/dependencies/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - \ No newline at end of file +/docs/user-manual/2023-10-28T01:09:37+05:30weekly0.5/docs/help/2021-07-21T15:49:53+05:30weekly0.5/docs/webmasters/2023-10-27T21:39:40+05:30weekly0.5/docs/api/2022-08-01T22:24:03+05:30weekly0.5/docs/self-hosting/2023-10-27T21:39:40+05:30weekly0.5/docs/user-manual/cli/2023-10-28T01:09:37+05:30weekly0.5/docs/user-manual/how-to-mcaptcha-without-js/2023-10-28T03:16:49+05:30weekly0.5/docs/help/troubleshooting/2022-08-01T22:24:30+05:30weekly0.5/docs/help/faq/2022-08-01T19:16:21+05:30weekly0.5/docs/webmasters/installing-captcha/2023-10-28T02:30:28+05:30weekly0.5/docs/webmasters/configuring-difficulty-factor/2023-10-27T21:39:40+05:30weekly0.5/docs/webmasters/terminology/2023-10-27T21:39:40+05:30weekly0.5/docs/webmasters/faq/2023-10-27T21:39:40+05:30weekly0.5/docs/api/browser/2022-08-01T20:24:18+05:30weekly0.5/docs/api/mcaptcha-system/2022-08-01T20:24:18+05:30weekly0.5/docs/api/pow-sha256/2022-08-01T20:24:18+05:30weekly0.5/docs/self-hosting/getting-started/2023-10-27T21:39:40+05:30weekly0.5/docs/self-hosting/bare-metal/2023-10-27T21:39:40+05:30weekly0.5/docs/self-hosting/docker/2023-10-27T21:39:40+05:30weekly0.5/docs/self-hosting/dependencies/2023-10-27T21:39:40+05:30weekly0.5 \ No newline at end of file diff --git a/docs/user-manual/cli/index.html b/docs/user-manual/cli/index.html index cefd320..bc0073a 100644 --- a/docs/user-manual/cli/index.html +++ b/docs/user-manual/cli/index.html @@ -1,321 +1,53 @@ - - - - - - - - - - - - - - CLI tool - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- - -
- -

CLI tool

-

-

A CLI tool exists to compute mCaptcha challenges. It can be installed -from multiple sources:

-

Install

-

crates.io

-

The CLI tool is available on, crates.io, the Rust +CLI tool - mCaptcha

CLI tool

A CLI tool exists to compute mCaptcha challenges. It can be installed +from multiple sources:

Install

crates.io

The CLI tool is available on, crates.io, the Rust language’s package registry. Rust language toolchain is required to -install from crates.io, please see rustup.rs for -Instructions to install it.

-
1cargo install mcaptcha-cli
-

Pre-compiled binaries

-

Nightly builds and stable releases are regularly published to -dl.mcaptcha.org for a variety of -CPU architectures and operating systems.

-
    -
  1. Download binary, checksum and GPG signature files
  2. -
-
1wget https://dl.mcaptcha.org/mcaptcha/cli/{VERSION}/{FILENAME}.tar.gz
-2wget https://dl.mcaptcha.org/mcaptcha/cli/{VERSION}/{FILENAME}.tar.gz.asc
-3wget https://dl.mcaptcha.org/mcaptcha/cli/{VERSION}/{FILENAME}.tar.gz.sha256
-
    -
  1. Verify checksum
  2. -
-
1sha256sum -c {FILENAME}.tar.gz.sha256
-
    -
  1. Download mCaptcha’s GPG release keys and verify GPG signature
  2. -
-
1gpg --keyserver keyserver.ubuntu.com --recv 73DAC973A9ADBB9ADCB5CDC4595A08135BA9FF73
-2gpg --verify {FILENAME}.tar.gz.asc
-
    -
  1. Install Binary
  2. -
-
1tar -xvzf {FILENAME}.tar.gz && sudo cp {FILENAME}/mcaptcha-cli /usr/local/bin
-

Build from source

-
    -
  1. Install Rust tool chain -Please see here for instructions.
  2. -
  3. Download source code
  4. -
-
1git clone https://git.batsense.net/mCaptcha/cli
-
    -
  1. Compile and install
  2. -
-
1cargo build --release && sudp cp ./target/release/mcaptcha-cli
-2/usr/local/bin
-

Pass mCaptcha challenge

-

The CLI tool requires details about the challenge to work on it. The -tool can be used in three different modes compute challenge:

-
    -
  1. Protected Page: Compute mCaptcha challenge for the CAPTCHA at a -protected page
  2. -
  3. Widget URL: Compute PoW for captcha at widget URL
  4. -
  5. (Developer mode) Offline: Computes PoW over given CAPTCHA parameters
  6. -
-

From protected page URL

-

The most convenient mode: copy the URL of the webpage which has the +install from crates.io, please see rustup.rs for +Instructions to install it.

1cargo install mcaptcha-cli
+

Pre-compiled binaries

Nightly builds and stable releases are regularly published to +dl.mcaptcha.org for a variety of +CPU architectures and operating systems.

  1. Download binary, checksum and GPG signature files
1wget https://dl.mcaptcha.org/mcaptcha/cli/{VERSION}/{FILENAME}.tar.gz
+2wget https://dl.mcaptcha.org/mcaptcha/cli/{VERSION}/{FILENAME}.tar.gz.asc
+3wget https://dl.mcaptcha.org/mcaptcha/cli/{VERSION}/{FILENAME}.tar.gz.sha256
+
  1. Verify checksum
1sha256sum -c {FILENAME}.tar.gz.sha256
+
  1. Download mCaptcha’s GPG release keys and verify GPG signature
1gpg --keyserver keyserver.ubuntu.com --recv 73DAC973A9ADBB9ADCB5CDC4595A08135BA9FF73
+2gpg --verify {FILENAME}.tar.gz.asc
+
  1. Install Binary
1tar -xvzf {FILENAME}.tar.gz && sudo cp {FILENAME}/mcaptcha-cli /usr/local/bin
+

Build from source

  1. Install Rust tool chain +Please see here for instructions.
  2. Download source code
1git clone https://git.batsense.net/mCaptcha/cli
+
  1. Compile and install
1cargo build --release && sudp cp ./target/release/mcaptcha-cli
+2/usr/local/bin
+

Pass mCaptcha challenge

The CLI tool requires details about the challenge to work on it. The +tool can be used in three different modes compute challenge:

  1. Protected Page: Compute mCaptcha challenge for the CAPTCHA at a +protected page
  2. Widget URL: Compute PoW for captcha at widget URL
  3. (Developer mode) Offline: Computes PoW over given CAPTCHA parameters

From protected page URL

The most convenient mode: copy the URL of the webpage which has the mCaptcha widget (example: showcase.mcaptcha.org) and run the CLI tool with it to get an authorization code: -Compute challenge using the URL

-
103:39 atm@lab cli ±|feat-parse-webpage ✗|→ mcaptcha-cli protected-page https://showcase.mcaptcha.org/
-2Authorization token: eRAZJiMrW58uDYA1s64Tmwq1u30HutuF
-

Widget URL

-

If you have the widget URL (will be in format https://mcaptcha.example.org/widget?sitekey=randomstring), it can be used to solve challenge as well:

-
1Compute PoW by fetching parameters from  CAPTCHA URL
-2
-3Usage: mcaptcha-cli online --url <URL>
-4
-5Options:
-6  -u, --url <URL>  URL of the CAPTCHA. Example:  https://example.org/widget?sitekey=foo
-7  -h, --help       Print help
-

Example usage:

-
113:32 atm@lab cli ±|online ✗|→ mcaptcha-cli online -u https://demo.mcaptcha.org/widget?sitekey=pHy0AktWyOKuxZDzFfoaewncWecCHo23
-2Authorization token: 3xleN26OctBuVu3X4t6CYyUjErhaxQvz
-

[Developer mode] Offline

-

Useful while debugging mCaptcha configurations, works on raw challenge -parameters.

-

Help menu:

-
1Compute PoW with offline parameters
-2
-3Usage: mcaptcha-cli offline --salt <SALT> --phrase <PHRASE> --difficulty-factor <DIFFICULTY_FACTOR>
-4
-5Options:
-6  -s, --salt <SALT>                            Salt with which PoW should be computed
-7  -p, --phrase <PHRASE>                        Phrase over which PoW should be computed
-8  -d, --difficulty-factor <DIFFICULTY_FACTOR>  Difficulty Factor
-9  -h, --help                                   Print help
-

Example usage:

-
113:28 atm@lab cli ±|online|→ mcaptcha-cli offline -s $(rand 32) -p $(rand 32) -d 50000
-2difficulty: 50000
-3nonce: 90507
-4original phrase: f351f333d44b2c6b5bf7f033b065bbb8fb5e9dd153bd402e43ed04425f5a3859
-5result: 340276562956196291522979356090220150471
-

Where rand is this script.

- -

Edit this page on git.batsense.net

- - - -
-
- -
-
- - - - - - - - - +Compute challenge using the URL

103:39 atm@lab cli ±|feat-parse-webpage ✗|→ mcaptcha-cli protected-page https://showcase.mcaptcha.org/
+2Authorization token: eRAZJiMrW58uDYA1s64Tmwq1u30HutuF
+

Widget URL

If you have the widget URL (will be in format https://mcaptcha.example.org/widget?sitekey=randomstring), it can be used to solve challenge as well:

1Compute PoW by fetching parameters from  CAPTCHA URL
+2
+3Usage: mcaptcha-cli online --url <URL>
+4
+5Options:
+6  -u, --url <URL>  URL of the CAPTCHA. Example:  https://example.org/widget?sitekey=foo
+7  -h, --help       Print help
+

Example usage:

113:32 atm@lab cli ±|online ✗|→ mcaptcha-cli online -u https://demo.mcaptcha.org/widget?sitekey=pHy0AktWyOKuxZDzFfoaewncWecCHo23
+2Authorization token: 3xleN26OctBuVu3X4t6CYyUjErhaxQvz
+

[Developer mode] Offline

Useful while debugging mCaptcha configurations, works on raw challenge +parameters.

Help menu:

1Compute PoW with offline parameters
+2
+3Usage: mcaptcha-cli offline --salt <SALT> --phrase <PHRASE> --difficulty-factor <DIFFICULTY_FACTOR>
+4
+5Options:
+6  -s, --salt <SALT>                            Salt with which PoW should be computed
+7  -p, --phrase <PHRASE>                        Phrase over which PoW should be computed
+8  -d, --difficulty-factor <DIFFICULTY_FACTOR>  Difficulty Factor
+9  -h, --help                                   Print help
+

Example usage:

113:28 atm@lab cli ±|online|→ mcaptcha-cli offline -s $(rand 32) -p $(rand 32) -d 50000
+2difficulty: 50000
+3nonce: 90507
+4original phrase: f351f333d44b2c6b5bf7f033b065bbb8fb5e9dd153bd402e43ed04425f5a3859
+5result: 340276562956196291522979356090220150471
+

Where rand is this script.

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/docs/user-manual/how-to-mcaptcha-without-js/index.html b/docs/user-manual/how-to-mcaptcha-without-js/index.html index 6a8a882..1d174fc 100644 --- a/docs/user-manual/how-to-mcaptcha-without-js/index.html +++ b/docs/user-manual/how-to-mcaptcha-without-js/index.html @@ -1,222 +1,5 @@ - - - - - - - - - - - - - - Use mCaptcha without JavaScript - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- - -
- -

Use mCaptcha without JavaScript

-

-

To use mCaptcha without JavaScript:

-
    -
  1. Install mCaptcha CLI too. Please see here for instructions.
  2. -
  3. Copy the URL of the protected page
  4. -
  5. Run mCaptcha CLI with that URL:
  6. -
-
1mcapthca-cli protected-page <URL>
-
    -
  1. Copy authorization code and paste it in the form
  2. -
- -

Edit this page on git.batsense.net

- - - -
-
- -
-
- - - - - - - - - +Use mCaptcha without JavaScript - mCaptcha

Use mCaptcha without JavaScript

To use mCaptcha without JavaScript:

  1. Install mCaptcha CLI too. Please see here for instructions.
  2. Copy the URL of the protected page
  3. Run mCaptcha CLI with that URL:
1mcapthca-cli protected-page <URL>
+
  1. Copy authorization code and paste it in the form

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/docs/user-manual/index.html b/docs/user-manual/index.html index 7dfc6c6..8b57e1d 100644 --- a/docs/user-manual/index.html +++ b/docs/user-manual/index.html @@ -1,197 +1,4 @@ - - - - - - - - - - - - - - User Manual - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
-
- -
-
- -
-
- - - - - - - - - +User Manual - mCaptcha
\ No newline at end of file diff --git a/docs/user-manual/index.xml b/docs/user-manual/index.xml index 378f6b9..aed0f37 100644 --- a/docs/user-manual/index.xml +++ b/docs/user-manual/index.xml @@ -1,32 +1,4 @@ - - - - User Manual on - /docs/user-manual/ - Recent content in User Manual on - Hugo -- gohugo.io - en-US - Fri, 27 Oct 2023 08:48:45 +0000 - - CLI tool - /docs/user-manual/cli/ - Fri, 27 Oct 2023 08:48:45 +0000 - - /docs/user-manual/cli/ - A CLI tool exists to compute mCaptcha challenges. It can be installed from multiple sources: +User Manual on/docs/user-manual/Recent content in User Manual onHugo -- gohugo.ioen-USFri, 27 Oct 2023 08:48:45 +0000CLI tool/docs/user-manual/cli/Fri, 27 Oct 2023 08:48:45 +0000/docs/user-manual/cli/A CLI tool exists to compute mCaptcha challenges. It can be installed from multiple sources: Install crates.io The CLI tool is available on, crates.io, the Rust language&rsquo;s package registry. Rust language toolchain is required to install from crates.io, please see rustup.rs for Instructions to install it. -1cargo install mcaptcha-cli Pre-compiled binaries Nightly builds and stable releases are regularly published to dl.mcaptcha.org for a variety of CPU architectures and operating systems. - - - - Use mCaptcha without JavaScript - /docs/user-manual/how-to-mcaptcha-without-js/ - Fri, 27 Oct 2023 08:48:45 +0000 - - /docs/user-manual/how-to-mcaptcha-without-js/ - To use mCaptcha without JavaScript: -Install mCaptcha CLI too. Please see here for instructions. Copy the URL of the protected page Run mCaptcha CLI with that URL: 1mcapthca-cli protected-page &lt;URL&gt; Copy authorization code and paste it in the form - - - - +1cargo install mcaptcha-cli Pre-compiled binaries Nightly builds and stable releases are regularly published to dl.mcaptcha.org for a variety of CPU architectures and operating systems.Use mCaptcha without JavaScript/docs/user-manual/how-to-mcaptcha-without-js/Fri, 27 Oct 2023 08:48:45 +0000/docs/user-manual/how-to-mcaptcha-without-js/To use mCaptcha without JavaScript: +Install mCaptcha CLI too. Please see here for instructions. Copy the URL of the protected page Run mCaptcha CLI with that URL: 1mcapthca-cli protected-page &lt;URL&gt; Copy authorization code and paste it in the form \ No newline at end of file diff --git a/docs/user-manual/sitemap.xml b/docs/user-manual/sitemap.xml index 606fc3e..4b3c101 100644 --- a/docs/user-manual/sitemap.xml +++ b/docs/user-manual/sitemap.xml @@ -1,17 +1 @@ - - - - /docs/user-manual/cli/ - 2023-10-28T01:09:37+05:30 - weekly - 0.5 - - - - /docs/user-manual/how-to-mcaptcha-without-js/ - 2023-10-28T03:16:49+05:30 - weekly - 0.5 - - \ No newline at end of file +/docs/user-manual/cli/2023-10-28T01:09:37+05:30weekly0.5/docs/user-manual/how-to-mcaptcha-without-js/2023-10-28T03:16:49+05:30weekly0.5 \ No newline at end of file diff --git a/docs/webmasters/configuring-difficulty-factor/index.html b/docs/webmasters/configuring-difficulty-factor/index.html index 57b038d..314b244 100644 --- a/docs/webmasters/configuring-difficulty-factor/index.html +++ b/docs/webmasters/configuring-difficulty-factor/index.html @@ -1,261 +1,26 @@ - - - - - - - - - - - - - - Configuring Difficulty Factor - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- - -
- -

Configuring Difficulty Factor

-

-

mCaptcha is highly responsive to detecting DDoS attacks. Admins are -advised to take advantage of it by setting low difficulty +Configuring Difficulty Factor - mCaptcha

Configuring Difficulty Factor

mCaptcha is highly responsive to detecting DDoS attacks. Admins are +advised to take advantage of it by setting low difficulty factors for normal traffic levels -for their website.

-

Lowest advisable difficulty factor is 5000.

-

For instance, if it is normal for my website to get 2000 requests for -every 30 seconds, I will set a cool +for their website.

Lowest advisable difficulty factor is 5000.

For instance, if it is normal for my website to get 2000 requests for +every 30 seconds, I will set a cool down period of 30 seconds and the -first level of difficulty configuration will have a visitor threshold of 2000 with a -difficulty factor of 5000.

-

There are two modes to setting difficulty factor for your website on -mCaptcha:

-

Easy option

-

Easy mode asks a few basic statistics about your website and generates a +first level of difficulty configuration will have a visitor threshold of 2000 with a +difficulty factor of 5000.

There are two modes to setting difficulty factor for your website on +mCaptcha:

Easy option

Easy mode asks a few basic statistics about your website and generates a configuration that should work for your website. Currently, easy mode is guided by assumptions on suitable difficulty factors to protect a -website but it will be fine-tuned as mCaptcha sees more deployment.

-

Configuration generated by easy mode can be tweaked later using the -advance mode, as you become more familiar with how mCaptcha works.

-
- new sitekey form in easy mode - -
-

Advance option

-

Advance mode gives the admin granular control over how mCaptcha behaves +website but it will be fine-tuned as mCaptcha sees more deployment.

Configuration generated by easy mode can be tweaked later using the +advance mode, as you become more familiar with how mCaptcha works.

new sitekey form in easy mode

Advance option

Advance mode gives the admin granular control over how mCaptcha behaves on their website. It has options to set the difficulty factor for each level of traffic(or visitor threshold, in mCaptcha speak), fully taking -advantage of mCaptcha’s variable difficulty factor feature.

-

For instance, if it is normal for a website to get 200 requests over 30 +advantage of mCaptcha’s variable difficulty factor feature.

For instance, if it is normal for a website to get 200 requests over 30 seconds, then setting a very low difficulty factor for a visitor threshold of 200 and a cool down period of 30 seconds will allow the users to pass through without waiting on the CAPTCHA. But if 1000 requests over 30 seconds will bring down the service, then the admin can configure increasing levels of difficulty factor of increasing traffic levels, effectively rate limiting its users and protecting the -underlying website.

-
- new sitekey form in advance mode - -
- -

Edit this page on git.batsense.net

- - - -
-
- -
-
- - - - - - - - - +underlying website.

new sitekey form in advance mode

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_20x0_resize_box_3.png b/docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_20x0_resize_box_2.png similarity index 100% rename from docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_20x0_resize_box_3.png rename to docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_20x0_resize_box_2.png diff --git a/docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_500x0_resize_box_3.png b/docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_500x0_resize_box_2.png similarity index 100% rename from docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_500x0_resize_box_3.png rename to docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_500x0_resize_box_2.png diff --git a/docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_600x0_resize_box_3.png b/docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_600x0_resize_box_2.png similarity index 100% rename from docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_600x0_resize_box_3.png rename to docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_600x0_resize_box_2.png diff --git a/docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_700x0_resize_box_3.png b/docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_700x0_resize_box_2.png similarity index 100% rename from docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_700x0_resize_box_3.png rename to docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_700x0_resize_box_2.png diff --git a/docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_800x0_resize_box_3.png b/docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_800x0_resize_box_2.png similarity index 100% rename from docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_800x0_resize_box_3.png rename to docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_800x0_resize_box_2.png diff --git a/docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_900x0_resize_box_3.png b/docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_900x0_resize_box_2.png similarity index 100% rename from docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_900x0_resize_box_3.png rename to docs/webmasters/configuring-difficulty-factor/new-sitekey-adv-mode_huc4867c6295dc4be195d832a52b37239b_23312_900x0_resize_box_2.png diff --git a/docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_20x0_resize_box_3.png b/docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_20x0_resize_box_2.png similarity index 100% rename from docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_20x0_resize_box_3.png rename to docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_20x0_resize_box_2.png diff --git a/docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_500x0_resize_box_3.png b/docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_500x0_resize_box_2.png similarity index 100% rename from docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_500x0_resize_box_3.png rename to docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_500x0_resize_box_2.png diff --git a/docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_600x0_resize_box_3.png b/docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_600x0_resize_box_2.png similarity index 100% rename from docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_600x0_resize_box_3.png rename to docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_600x0_resize_box_2.png diff --git a/docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_700x0_resize_box_3.png b/docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_700x0_resize_box_2.png similarity index 100% rename from docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_700x0_resize_box_3.png rename to docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_700x0_resize_box_2.png diff --git a/docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_800x0_resize_box_3.png b/docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_800x0_resize_box_2.png similarity index 100% rename from docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_800x0_resize_box_3.png rename to docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_800x0_resize_box_2.png diff --git a/docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_900x0_resize_box_3.png b/docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_900x0_resize_box_2.png similarity index 100% rename from docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_900x0_resize_box_3.png rename to docs/webmasters/configuring-difficulty-factor/new-sitekey-easy-mode_hu3f66189ea53484ac6603a2d78fa015c8_26636_900x0_resize_box_2.png diff --git a/docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_20x0_resize_box_3.png b/docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_20x0_resize_box_2.png similarity index 100% rename from docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_20x0_resize_box_3.png rename to docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_20x0_resize_box_2.png diff --git a/docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_500x0_resize_box_3.png b/docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_500x0_resize_box_2.png similarity index 100% rename from docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_500x0_resize_box_3.png rename to docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_500x0_resize_box_2.png diff --git a/docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_600x0_resize_box_3.png b/docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_600x0_resize_box_2.png similarity index 100% rename from docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_600x0_resize_box_3.png rename to docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_600x0_resize_box_2.png diff --git a/docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_700x0_resize_box_3.png b/docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_700x0_resize_box_2.png similarity index 100% rename from docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_700x0_resize_box_3.png rename to docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_700x0_resize_box_2.png diff --git a/docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_800x0_resize_box_3.png b/docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_800x0_resize_box_2.png similarity index 100% rename from docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_800x0_resize_box_3.png rename to docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_800x0_resize_box_2.png diff --git a/docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_900x0_resize_box_3.png b/docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_900x0_resize_box_2.png similarity index 100% rename from docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_900x0_resize_box_3.png rename to docs/webmasters/faq/copy-sitekey_huf38748cca91d238810283a1abb694c9a_63890_900x0_resize_box_2.png diff --git a/docs/webmasters/faq/index.html b/docs/webmasters/faq/index.html index 40dcd77..c886939 100644 --- a/docs/webmasters/faq/index.html +++ b/docs/webmasters/faq/index.html @@ -1,234 +1,5 @@ - - - - - - - - - - - - - - Webmasters FAQ - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- - -
- -

Webmasters FAQ

-

-

Easy Mode: Default cooldown period

-

When configuring mCaptcha in easy mode, the default cooldown period is set to 30 seconds.

-

How to get site key from dashboard?

-
    -
  1. Go to “Site keys” on the side panel in the dashboard
  2. -
-
-
- Site key menu option on the dashboard, encircled in red. - -
-
-
    -
  1. click on the clipboard button to copy the site key to your -clipboard.
  2. -
-
- Copy site key to clipboard. Clipboard button is highlighted in the photo - -
- -

Edit this page on git.batsense.net

- - - -
-
- -
-
- - - - - - - - - +Webmasters FAQ - mCaptcha

Webmasters FAQ

Easy Mode: Default cooldown period

When configuring mCaptcha in easy mode, the default cooldown period is set to 30 seconds.

How to get site key from dashboard?

  1. Go to “Site keys” on the side panel in the dashboard
Site key menu option on the dashboard, encircled in red.
  1. click on the clipboard button to copy the site key to your +clipboard.
Copy site key to clipboard. Clipboard button is highlighted in the photo

Edit this page on git.batsense.net

\ No newline at end of file diff --git a/docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_20x0_resize_box_3.png b/docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_20x0_resize_box_2.png similarity index 100% rename from docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_20x0_resize_box_3.png rename to docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_20x0_resize_box_2.png diff --git a/docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_500x0_resize_box_3.png b/docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_500x0_resize_box_2.png similarity index 100% rename from docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_500x0_resize_box_3.png rename to docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_500x0_resize_box_2.png diff --git a/docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_600x0_resize_box_3.png b/docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_600x0_resize_box_2.png similarity index 100% rename from docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_600x0_resize_box_3.png rename to docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_600x0_resize_box_2.png diff --git a/docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_700x0_resize_box_3.png b/docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_700x0_resize_box_2.png similarity index 100% rename from docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_700x0_resize_box_3.png rename to docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_700x0_resize_box_2.png diff --git a/docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_800x0_resize_box_3.png b/docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_800x0_resize_box_2.png similarity index 100% rename from docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_800x0_resize_box_3.png rename to docs/webmasters/faq/sitekey-in-dashboard-sidepanel_hu437e619e92d9fef838a97af482e11285_26958_800x0_resize_box_2.png diff --git a/docs/webmasters/index.html b/docs/webmasters/index.html index 64b2108..d495be6 100644 --- a/docs/webmasters/index.html +++ b/docs/webmasters/index.html @@ -1,209 +1,4 @@ - - - - - - - - - - - - - - Webmasters - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
-
- -
-
- -
-
- - - - - - - - - +Webmasters - mCaptcha
\ No newline at end of file diff --git a/docs/webmasters/index.xml b/docs/webmasters/index.xml index 37a844d..5a354d2 100644 --- a/docs/webmasters/index.xml +++ b/docs/webmasters/index.xml @@ -1,53 +1,7 @@ - - - - Webmasters on - /docs/webmasters/ - Recent content in Webmasters on - Hugo -- gohugo.io - en-US - Tue, 06 Oct 2020 08:48:45 +0000 - - Installing mCaptcha on your website - /docs/webmasters/installing-captcha/ - Wed, 22 Jun 2022 00:00:00 +0000 - - /docs/webmasters/installing-captcha/ - mCaptcha can protect your website from DDoS attacks. In this guide we&rsquo;ll explore how to install mCaptcha on your website. The end result will be something like this, on your website: +Webmasters on/docs/webmasters/Recent content in Webmasters onHugo -- gohugo.ioen-USTue, 06 Oct 2020 08:48:45 +0000Installing mCaptcha on your website/docs/webmasters/installing-captcha/Wed, 22 Jun 2022 00:00:00 +0000/docs/webmasters/installing-captcha/mCaptcha can protect your website from DDoS attacks. In this guide we&rsquo;ll explore how to install mCaptcha on your website. The end result will be something like this, on your website: For the purpose of this demo, we will be using demo.mcaptcha.org, a demo instance running in @realaravinth&rsquo;s bedroom(for this same reason, it shouldn&rsquo;t be used for anything serious) -1. Create an account and sign into the mCaptcha dashboard Head over to demo. - - - - Configuring Difficulty Factor - /docs/webmasters/configuring-difficulty-factor/ - Wed, 22 Jun 2022 00:00:00 +0000 - - /docs/webmasters/configuring-difficulty-factor/ - mCaptcha is highly responsive to detecting DDoS attacks. Admins are advised to take advantage of it by setting low difficulty factors for normal traffic levels for their website. +1. Create an account and sign into the mCaptcha dashboard Head over to demo.Configuring Difficulty Factor/docs/webmasters/configuring-difficulty-factor/Wed, 22 Jun 2022 00:00:00 +0000/docs/webmasters/configuring-difficulty-factor/mCaptcha is highly responsive to detecting DDoS attacks. Admins are advised to take advantage of it by setting low difficulty factors for normal traffic levels for their website. Lowest advisable difficulty factor is 5000. -For instance, if it is normal for my website to get 2000 requests for every 30 seconds, I will set a cool down period of 30 seconds and the first level of difficulty configuration will have a visitor threshold of 2000 with a difficulty factor of 5000. - - - - Terminology - /docs/webmasters/terminology/ - Wed, 27 Jul 2022 08:48:45 +0000 - - /docs/webmasters/terminology/ - Authorization token When a visitor solves the CAPTCHA and sends their solution to an mCaptcha instance, the solution will be verified for correctness. If the solution is correct, mCaptcha will return a single use authorization token. -This authorization token should be attached to the visitor&rsquo;s requited to the protected service and the protected service should validity of the authorization token with the mCaptcha instance and only allow authorization to protected resource if the authorization token is valid. - - - - Webmasters FAQ - /docs/webmasters/faq/ - Wed, 27 Jul 2022 08:48:45 +0000 - - /docs/webmasters/faq/ - Easy Mode: Default cooldown period When configuring mCaptcha in easy mode, the default cooldown period is set to 30 seconds. -How to get site key from dashboard? Go to &ldquo;Site keys&rdquo; on the side panel in the dashboard click on the clipboard button to copy the site key to your clipboard. - - - - +For instance, if it is normal for my website to get 2000 requests for every 30 seconds, I will set a cool down period of 30 seconds and the first level of difficulty configuration will have a visitor threshold of 2000 with a difficulty factor of 5000.Terminology/docs/webmasters/terminology/Wed, 27 Jul 2022 08:48:45 +0000/docs/webmasters/terminology/Authorization token When a visitor solves the CAPTCHA and sends their solution to an mCaptcha instance, the solution will be verified for correctness. If the solution is correct, mCaptcha will return a single use authorization token. +This authorization token should be attached to the visitor&rsquo;s requited to the protected service and the protected service should validity of the authorization token with the mCaptcha instance and only allow authorization to protected resource if the authorization token is valid.Webmasters FAQ/docs/webmasters/faq/Wed, 27 Jul 2022 08:48:45 +0000/docs/webmasters/faq/Easy Mode: Default cooldown period When configuring mCaptcha in easy mode, the default cooldown period is set to 30 seconds. +How to get site key from dashboard? Go to &ldquo;Site keys&rdquo; on the side panel in the dashboard click on the clipboard button to copy the site key to your clipboard. \ No newline at end of file diff --git a/docs/webmasters/installing-captcha/index.html b/docs/webmasters/installing-captcha/index.html index d62a0eb..e9c1bef 100644 --- a/docs/webmasters/installing-captcha/index.html +++ b/docs/webmasters/installing-captcha/index.html @@ -1,323 +1,59 @@ - - - - - - - - - - - - - - Installing mCaptcha on your website - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- -
- - -
- -

Installing mCaptcha on your website

-

-

mCaptcha can protect your website from DDoS attacks. In this guide we’ll +Installing mCaptcha on your website - mCaptcha

Installing mCaptcha on your website

mCaptcha can protect your website from DDoS attacks. In this guide we’ll explore how to install mCaptcha on your website. The end result will be -something like this, on your website:

-
- A registration form with mCaptcha widget installed - -
-

For the purpose of this demo, we will be using -demo.mcaptcha.org, a demo instance running +something like this, on your website:

A registration form with mCaptcha widget installed

For the purpose of this demo, we will be using +demo.mcaptcha.org, a demo instance running in @realaravinth’s bedroom(for this same reason, it shouldn’t be used -for anything serious)

-

1. Create an account and sign into the mCaptcha dashboard

-

Head over to demo.mcaptcha.org and -create an account. When ready, sign in.

-

2. Create new site key

-

A site key is how a new CAPTCHA is configured within mCaptcha. To create -a new site key, click on “New Site” button in the dashboard.

-
- mCaptcha dashboard with the 'new site key' button highlighted - -
-

There are two options to create a new site key, easy and advanced. We +for anything serious)

1. Create an account and sign into the mCaptcha dashboard

Head over to demo.mcaptcha.org and +create an account. When ready, sign in.

2. Create new site key

A site key is how a new CAPTCHA is configured within mCaptcha. To create +a new site key, click on “New Site” button in the dashboard.

mCaptcha dashboard with the 'new site key' button highlighted

There are two options to create a new site key, easy and advanced. We are going to use the easy mode in this tutorial. If you are interested -in learning more about the advance mode, please see here.

-
-

Easy Mode

-

Easy mode asks a few basic statistics about your website and generates a +in learning more about the advance mode, please see here.

Easy Mode

Easy mode asks a few basic statistics about your website and generates a configuration that should work for your website. Currently, easy mode is guided by assumptions on suitable difficulty factors to protect a -website but it will be fine-tuned as mCaptcha sees more deployment.

-

Configuration generated by easy mode can be tweaked later using the -advance mode, as you become more familiar with how mCaptcha works.

-
-

Fill the form and submit it.

-
- mCaptcha dashboard with the 'new site key' form in easy mode, with details filled in - -
- -

Submitting the form will take you to a page where site key configuration +website but it will be fine-tuned as mCaptcha sees more deployment.

Configuration generated by easy mode can be tweaked later using the +advance mode, as you become more familiar with how mCaptcha works.

Fill the form and submit it.

mCaptcha dashboard with the 'new site key' form in easy mode, with details filled in

Submitting the form will take you to a page where site key configuration can be viewed. “View deployment” link will display CAPTCHA widget with -the supplied configuration. Click on it and grab the widget link.

-

4. Install mCaptcha on your website

-

Integration support is available for some frontend JavaScript +the supplied configuration. Click on it and grab the widget link.

4. Install mCaptcha on your website

Integration support is available for some frontend JavaScript frameworks. To see full list of supported frameworks, please see -here.

-

There are two options to use the integration library to integrate -mCaptcha on your website:

-
    -
  1. Serve the integration library yourself
  2. -
  3. Use a CDN like unpkg.com
  4. -
-

In this tutorial, we’ll be using the CDN.

-

Pasting the following snippet on the page, within the form that requires to be protected +here.

There are two options to use the integration library to integrate +mCaptcha on your website:

  1. Serve the integration library yourself
  2. Use a CDN like unpkg.com

In this tutorial, we’ll be using the CDN.

Pasting the following snippet on the page, within the form that requires to be protected will load the mCaptcha widget with the configuration supplied. Be sure to replace Your {{paste your widget link}} with the link obtained from -the previous step.

-
 1<label
- 2  data-mcaptcha_url="{{paste your widget link here}}"
- 3  for="mcaptcha__token"
- 4  id="mcaptcha__token-label"
- 5>
- 6  mCaptcha authorization token.
- 7  <a
- 8    href="https://mcaptcha.org/docs/user-manual/how-to-mcaptcha-without-js/"
- 9    >Instructions</a
-10  >.
-11  <input type="text" name="mcaptcha__token" id="mcaptcha__token" />
-12</label>
-13<div id="mcaptcha__widget-container"></div>
-14<script src="https://unpkg.com/@mcaptcha/vanilla-glue@0.1.0-rc2/dist/index.js"></script>
-

A full example is available -here.

-

5. Configure backend to authenticate CAPTCHA tokens

-
    -
  1. -

    Get access token from the user’s +the previous step.

     1<label
    + 2  data-mcaptcha_url="{{paste your widget link here}}"
    + 3  for="mcaptcha__token"
    + 4  id="mcaptcha__token-label"
    + 5>
    + 6  mCaptcha authorization token.
    + 7  <a
    + 8    href="https://mcaptcha.org/docs/user-manual/how-to-mcaptcha-without-js/"
    + 9    >Instructions</a
    +10  >.
    +11  <input type="text" name="mcaptcha__token" id="mcaptcha__token" />
    +12</label>
    +13<div id="mcaptcha__widget-container"></div>
    +14<script src="https://unpkg.com/@mcaptcha/vanilla-glue@0.1.0-rc2/dist/index.js"></script>
    +

    A full example is available +here.

    5. Configure backend to authenticate CAPTCHA tokens

    1. Get access token from the user’s form submission payload. The access token will be associated with a -parameter called mcaptcha__token.

      -
      1 mcaptcha_token = request.form["mcaptcha__token"]
      -
    2. -
    3. -

      Validate access token with mCaptcha instance

      -
    4. -
    -
     1payload = {
    - 2    "token": mcaptcha_token,
    - 3    "key": mcaptcha_sitekey, # captcha site key
    - 4    # mCaptcha account secret; available in settings
    - 5    "secret": mcaptcha_account_secret,
    - 6}
    - 7resp = requests.post(
    - 8    "https://demo.mcaptha.org/api/v1/pow/siteverify", json=payload
    - 9)
    -10resp = resp.json()
    -
      -
    1. If access token is valid, allow access to protected resource or deny -access.
    2. -
    -
    1 if resp["valid"] == False:
    -2     return "invalid captcha", 400
    -3 else:
    -4     return allow_access_to_protected_resource(request.form)
    -

    Please see here for a complete Flask example and here for an Actix -Web example.

    -

    Congratulations, mCaptcha is now integrated with your website!

    - -

    Edit this page on git.batsense.net

    - - - -
-
- -
-
- - - - - - - - - +parameter called mcaptcha__token.

1 mcaptcha_token = request.form["mcaptcha__token"]
+
  • Validate access token with mCaptcha instance

  •  1payload = {
    + 2    "token": mcaptcha_token,
    + 3    "key": mcaptcha_sitekey, # captcha site key
    + 4    # mCaptcha account secret; available in settings
    + 5    "secret": mcaptcha_account_secret,
    + 6}
    + 7resp = requests.post(
    + 8    "https://demo.mcaptha.org/api/v1/pow/siteverify", json=payload
    + 9)
    +10resp = resp.json()
    +
    1. If access token is valid, allow access to protected resource or deny +access.
    1 if resp["valid"] == False:
    +2     return "invalid captcha", 400
    +3 else:
    +4     return allow_access_to_protected_resource(request.form)
    +

    Please see here for a complete Flask example and here for an Actix +Web example.

    Congratulations, mCaptcha is now integrated with your website!

    Edit this page on git.batsense.net

    \ No newline at end of file diff --git a/docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_20x0_resize_box_3.png b/docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_20x0_resize_box_2.png similarity index 100% rename from docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_20x0_resize_box_3.png rename to docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_20x0_resize_box_2.png diff --git a/docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_500x0_resize_box_3.png b/docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_500x0_resize_box_2.png similarity index 100% rename from docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_500x0_resize_box_3.png rename to docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_500x0_resize_box_2.png diff --git a/docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_600x0_resize_box_3.png b/docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_600x0_resize_box_2.png similarity index 100% rename from docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_600x0_resize_box_3.png rename to docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_600x0_resize_box_2.png diff --git a/docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_700x0_resize_box_3.png b/docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_700x0_resize_box_2.png similarity index 100% rename from docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_700x0_resize_box_3.png rename to docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_700x0_resize_box_2.png diff --git a/docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_800x0_resize_box_2.png b/docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_800x0_resize_box_2.png new file mode 100644 index 0000000000000000000000000000000000000000..de4e1cf8c33620e430e4615667b9f6b9cca12ed2 GIT binary patch literal 30236 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 literal 0 HcmV?d00001 diff --git a/docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_800x0_resize_box_3.png b/docs/webmasters/installing-captcha/mcaptcha-widget-installation-result_hub39801b2a229b4882fd00c2c83dd77fb_28299_800x0_resize_box_3.png deleted file mode 100644 index f30fcddbbd42d75aea04ff47469edba289abf678..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33 lcmeAS@N?(olHy`uVBq!ia0y~yU{(O)Bn~E^h** - - - /docs/webmasters/installing-captcha/ - 2023-10-28T02:30:28+05:30 - weekly - 0.5 - - - - /docs/webmasters/configuring-difficulty-factor/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - - /docs/webmasters/terminology/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - - /docs/webmasters/faq/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - \ No newline at end of file +/docs/webmasters/installing-captcha/2023-10-28T02:30:28+05:30weekly0.5/docs/webmasters/configuring-difficulty-factor/2023-10-27T21:39:40+05:30weekly0.5/docs/webmasters/terminology/2023-10-27T21:39:40+05:30weekly0.5/docs/webmasters/faq/2023-10-27T21:39:40+05:30weekly0.5 \ No newline at end of file diff --git a/docs/webmasters/terminology/index.html b/docs/webmasters/terminology/index.html index 04035ac..8a4bf61 100644 --- a/docs/webmasters/terminology/index.html +++ b/docs/webmasters/terminology/index.html @@ -1,303 +1,36 @@ - - - - - - - - - - - - - - Terminology - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    -
    - -
    - - -
    - -

    Terminology

    -

    -

    Authorization token

    -

    When a visitor solves the CAPTCHA and sends their solution to an +Terminology - mCaptcha

    Terminology

    Authorization token

    When a visitor solves the CAPTCHA and sends their solution to an mCaptcha instance, the solution will be verified for correctness. If the -solution is correct, mCaptcha will return a single use authorization token.

    -

    This authorization token should be attached to the visitor’s requited to the +solution is correct, mCaptcha will return a single use authorization token.

    This authorization token should be attached to the visitor’s requited to the protected service and the protected service should validity of the authorization token with the mCaptcha instance and only allow authorization to -protected resource if the authorization token is valid.

    -

    Cooldown Period

    -

    mCaptcha implements leaky bucket algorithm to measure +protected resource if the authorization token is valid.

    Cooldown Period

    mCaptcha implements leaky bucket algorithm to measure current traffic levels. Cooldown period specifies the leak or the time -after which a visitor addition is decremented.

    -

    For instance, if initial traffic level is 0 and a user visits one +after which a visitor addition is decremented.

    For instance, if initial traffic level is 0 and a user visits one second later, the traffic level will be incremented to 1. Now, if the cooldown period is set to 30 seconds, the traffic level will be decremented after 30 seconds. So after 30 seconds, the traffic level will -go from 1 to 0.

    -

    Difficulty Factor

    -

    Difficulty factor determines the time it takes to solve a CAPTCHA. The +go from 1 to 0.

    Difficulty Factor

    Difficulty factor determines the time it takes to solve a CAPTCHA. The higher the difficulty factor, the longer it will take to generate a -proof of work for it to solve the CAPTCHA.

    -

    mCaptcha’s proof of work based mechanism makes it highly accessible to +proof of work for it to solve the CAPTCHA.

    mCaptcha’s proof of work based mechanism makes it highly accessible to people with special needs but it is important to choose the difficulty factor with care as very high difficulty factors will make the CAPTCHA -inaccessible to users on slow devices.

    -

    Sitekey

    -

    Site key is a unique identifier associated with CAPTCHA configurations +inaccessible to users on slow devices.

    Sitekey

    Site key is a unique identifier associated with CAPTCHA configurations created on mCaptcha. It is required to integrate a CAPTCHA with your -website.

    -

    Visitor Threshold

    -

    mCaptcha’s variable difficulty factor mechanism requires a website’s traffic +website.

    Visitor Threshold

    mCaptcha’s variable difficulty factor mechanism requires a website’s traffic statistics be split into levels, so that it can deploy the right -difficulty factor for each level.

    -

    Visitor threshold is used to traffic into levels and mCaptcha accepts a +difficulty factor for each level.

    Visitor threshold is used to traffic into levels and mCaptcha accepts a difficulty configuration for each of these levels. When current traffic exceeds a difficulty factor, mCaptcha will increase the difficulty -factor to the next configured level.

    -

    For instance, consider the configuration given below:

    -
      -
    • Cool down period: 30 seconds
    • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    LevelDifficulty FactorVisitor Threshold
    15,0002,000
    250,0005,000
    3500,00010,000
    45,000,00015,000
    -

    If the website sees 2,000 requests in a 30 second window, level 1 +factor to the next configured level.

    For instance, consider the configuration given below:

    • Cool down period: 30 seconds
    LevelDifficulty FactorVisitor Threshold
    15,0002,000
    250,0005,000
    3500,00010,000
    45,000,00015,000

    If the website sees 2,000 requests in a 30 second window, level 1 difficulty factor(5,000) will be deployed. If the traffic increases to 5,000 requests in a 30 second window, then difficulty factor will be upgraded to level 2(50,000). Likewise 10,000 and 15,000 requests over 30 seconds will result in difficulty factor being upgraded to 500,000 and -5,000,000 respectively.

    -

    Visitor threshold is how mCaptcha determines which difficulty factor +5,000,000 respectively.

    Visitor threshold is how mCaptcha determines which difficulty factor level to deploy. mCaptcha uses leaky bucket algorithm to keep the visitor threshold constantly updated within the configured cool down period. So, at any given moment the, the current visitor level will be -the amount of traffic that was served in the cool down period specified.

    - -

    Edit this page on git.batsense.net

    - - - -
    -
    - -
    -
    - - - - - - - - - +the amount of traffic that was served in the cool down period specified.

    Edit this page on git.batsense.net

    \ No newline at end of file diff --git a/donate/index.html b/donate/index.html index f4d80e5..164a333 100644 --- a/donate/index.html +++ b/donate/index.html @@ -1,183 +1,11 @@ - - - - - - - - - - - - - - Donate - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    -
    - -
    - -
    - -

    Donate

    -

    Last Edited July 16, 2021

    -

    -

    mCaptcha is a small operation that is self-funded. At the time of +Donate - mCaptcha

    Donate

    Last Edited July 16, 2021

    mCaptcha is a small operation that is self-funded. At the time of writing, we are not backed by any venture capitals. If you like mCaptcha, please consider donating. Your donations will go a long -way in supporting us.

    -

    Some of the payment options are anonymous. You can optionally send -me(@realaravinth) an email so that -I can thank you :)

    -

    XMR

    -
    85QAHsHqg4WfA6G7ycXc7U4LmrSLCQARv6H9p3AYjf8o8YP
    +way in supporting us.

    Some of the payment options are anonymous. You can optionally send +me(@realaravinth) an email so that +I can thank you :)

    XMR

    85QAHsHqg4WfA6G7ycXc7U4LmrSLCQARv6H9p3AYjf8o8YP
     WH3ngC8Zi7bUYGUifdXb54Xuz41kcu2pqgGFuAYp3VSh5JsR
    -
    - Monero address QR code - -
    Monero address QR code
    -
    -

    Liberapay

    - -

    - -

    Edit this page on git.batsense.net

    - -
    -
    - -
    -
    - - - - - - - - - +
    Monero address QR code
    Monero address QR code

    Liberapay

    Edit this page on git.batsense.net

    \ No newline at end of file diff --git a/donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_20x0_resize_box_3.png b/donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_20x0_resize_box_2.png similarity index 100% rename from donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_20x0_resize_box_3.png rename to donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_20x0_resize_box_2.png diff --git a/donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_500x0_resize_box_3.png b/donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_500x0_resize_box_2.png similarity index 100% rename from donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_500x0_resize_box_3.png rename to donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_500x0_resize_box_2.png diff --git a/donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_600x0_resize_box_3.png b/donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_600x0_resize_box_2.png similarity index 100% rename from donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_600x0_resize_box_3.png rename to donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_600x0_resize_box_2.png diff --git a/donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_700x0_resize_box_3.png b/donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_700x0_resize_box_2.png similarity index 100% rename from donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_700x0_resize_box_3.png rename to donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_700x0_resize_box_2.png diff --git a/donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_800x0_resize_box_3.png b/donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_800x0_resize_box_2.png similarity index 100% rename from donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_800x0_resize_box_3.png rename to donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_800x0_resize_box_2.png diff --git a/donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_900x0_resize_box_3.png b/donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_900x0_resize_box_2.png similarity index 100% rename from donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_900x0_resize_box_3.png rename to donate/mcptcha-donations-monero-address-qr_huda75cb0a97a0728b33b2d59d7a34dd33_7547_900x0_resize_box_2.png diff --git a/index.html b/index.html index b38f089..ee3686d 100644 --- a/index.html +++ b/index.html @@ -1,189 +1,6 @@ - - - - - - - - - - - - - - mCaptcha - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    -
    - -
    -
    -
    -

    Defend Like Castles

    -
    -
    -

    mCaptcha is proof-of-work based captcha system that is privacy focused and fully automated.

    - Try mCaptcha -       - Get started -

    Libre software GitHub

    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -

    Privacy focused

    -

    Doesn't track, doesn't profile your users.

    -
    -
    -

    Robust and Accurate

    -

    Got users behind NATs? No issues. We don't use IP address for rate-liming. NAT or not you get the mCaptcha experience. -

    -
    -

    Best-in-class UX

    -

    mCaptcha is silent, so silent that your users won't even feel it. No more annoying images, no more helping for Big Brothers with their ML stuff

    -
    -
    -
    -
    -

    Defend like castles

    -

    Our PoW-based solution defends fierily. mCaptcha makes attacking your site more expensive than what it will take for you to respond to the attacker's requests

    -
    -
    -

    Libre Software

    -

    Client libraries are licensed using proprietary-friendly free software licenses but the core is AGPL'd. We believe this is a tech that can change the way the web works so mCaptcha will always be free

    -
    -
    -

    xCaptcha drop-in replacement

    -

    Already using a captcha solution? No worries, our APIs are compatible with reCAPTCHA and hCaptcha!

    -
    -
    -
    -
    - - -
    -
    -
    -
    -
    - - - - - - - - +mCaptcha - mCaptcha

    Defend Like Castles

    mCaptcha is proof-of-work based captcha system that is privacy focused and fully automated.

    Try mCaptcha +      + Get started

    Libre software GitHub

    Privacy focused

    Doesn't track, doesn't profile your users.

    Robust and Accurate

    Got users behind NATs? No issues. We don't use IP address for rate-liming. NAT or not you get the mCaptcha experience.

    Best-in-class UX

    mCaptcha is silent, so silent that your users won't even feel it. No more annoying images, no more helping for Big Brothers with their ML stuff

    Defend like castles

    Our PoW-based solution defends fierily. mCaptcha makes attacking your site more expensive than what it will take for you to respond to the attacker's requests

    Libre Software

    Client libraries are licensed using proprietary-friendly free software licenses but the core is AGPL'd. We believe this is a tech that can change the way the web works so mCaptcha will always be free

    xCaptcha drop-in replacement

    Already using a captcha solution? No worries, our APIs are compatible with reCAPTCHA and hCaptcha!

    \ No newline at end of file diff --git a/index.min.39f65050268d816f7a57ee89577dd6b7c861ed858fdbfd100931444f0bb1609ea23d7d4ddc1997c8401f4553ca412051d7fd12a5b0a675c6053b7d9dc9c2cc98.js b/index.min.39f65050268d816f7a57ee89577dd6b7c861ed858fdbfd100931444f0bb1609ea23d7d4ddc1997c8401f4553ca412051d7fd12a5b0a675c6053b7d9dc9c2cc98.js deleted file mode 100644 index dbc9b8f..0000000 --- a/index.min.39f65050268d816f7a57ee89577dd6b7c861ed858fdbfd100931444f0bb1609ea23d7d4ddc1997c8401f4553ca412051d7fd12a5b0a675c6053b7d9dc9c2cc98.js +++ /dev/null @@ -1,614 +0,0 @@ -var suggestions=document.getElementById("suggestions"),userinput=document.getElementById("userinput");document.addEventListener("keydown",inputFocus);function inputFocus(e){e.keyCode===191&&(e.preventDefault(),userinput.focus()),e.keyCode===27&&(userinput.blur(),suggestions.classList.add("d-none"))}document.addEventListener("click",function(e){var t=suggestions.contains(e.target);t||suggestions.classList.add("d-none")}),document.addEventListener("keydown",suggestionFocus);function suggestionFocus(e){const s=suggestions.querySelectorAll("a"),o=[...s],t=o.indexOf(document.activeElement);let n=0;e.keyCode===38?(e.preventDefault(),n=t>0?t-1:0,s[n].focus()):e.keyCode===40&&(e.preventDefault(),n=t+1mCaptcha can protect your website from DDoS attacks. In this guide we’ll -explore how to install mCaptcha on your website. The end result will be -something like this, on your website:

    -
    - A registration form with mCaptcha widget installed - -
    -

    For the purpose of this demo, we will be using -demo.mcaptcha.org, a demo instance running -in @realaravinth’s bedroom(for this same reason, it shouldn’t be used -for anything serious)

    -

    1. Create an account and sign into the mCaptcha dashboard

    -

    Head over to demo.mcaptcha.org and -create an account. When ready, sign in.

    -

    2. Create new site key

    -

    A site key is how a new CAPTCHA is configured within mCaptcha. To create -a new site key, click on “New Site” button in the dashboard.

    -
    - mCaptcha dashboard with the 'new site key' button highlighted - -
    -

    There are two options to create a new site key, easy and advanced. We -are going to use the easy mode in this tutorial. If you are interested -in learning more about the advance mode, please see here.

    -
    -

    Easy Mode

    -

    Easy mode asks a few basic statistics about your website and generates a -configuration that should work for your website. Currently, easy mode is -guided by assumptions on suitable difficulty factors to protect a -website but it will be fine-tuned as mCaptcha sees more deployment.

    -

    Configuration generated by easy mode can be tweaked later using the -advance mode, as you become more familiar with how mCaptcha works.

    -
    -

    Fill the form and submit it.

    -
    - mCaptcha dashboard with the 'new site key' form in easy mode, with details filled in - -
    - -

    Submitting the form will take you to a page where site key configuration -can be viewed. “View deployment” link will display CAPTCHA widget with -the supplied configuration. Click on it and grab the widget link.

    -

    4. Install mCaptcha on your website

    -

    Integration support is available for some frontend JavaScript -frameworks. To see full list of supported frameworks, please see -here.

    -

    There are two options to use the integration library to integrate -mCaptcha on your website:

    -
      -
    1. Serve the integration library yourself
    2. -
    3. Use a CDN like unpkg.com
    4. -
    -

    In this tutorial, we’ll be using the CDN.

    -

    Pasting the following snippet on the page, within the form that requires to be protected -will load the mCaptcha widget with the configuration supplied. Be sure -to replace Your {{paste your widget link}} with the link obtained from -the previous step.

    -
     1<label
    - 2  data-mcaptcha_url="{{paste your widget link here}}"
    - 3  for="mcaptcha__token"
    - 4  id="mcaptcha__token-label"
    - 5>
    - 6  mCaptcha authorization token.
    - 7  <a
    - 8    href="https://mcaptcha.org/docs/user-manual/how-to-mcaptcha-without-js/"
    - 9    >Instructions</a
    -10  >.
    -11  <input type="text" name="mcaptcha__token" id="mcaptcha__token" />
    -12</label>
    -13<div id="mcaptcha__widget-container"></div>
    -14<script src="https://unpkg.com/@mcaptcha/vanilla-glue@0.1.0-rc2/dist/index.js"></script>
    -

    A full example is available -here.

    -

    5. Configure backend to authenticate CAPTCHA tokens

    -
      -
    1. -

      Get access token from the user’s -form submission payload. The access token will be associated with a -parameter called mcaptcha__token.

      -
      1 mcaptcha_token = request.form["mcaptcha__token"]
      -
    2. -
    3. -

      Validate access token with mCaptcha instance

      -
    4. -
    -
     1payload = {
    - 2    "token": mcaptcha_token,
    - 3    "key": mcaptcha_sitekey, # captcha site key
    - 4    # mCaptcha account secret; available in settings
    - 5    "secret": mcaptcha_account_secret,
    - 6}
    - 7resp = requests.post(
    - 8    "https://demo.mcaptha.org/api/v1/pow/siteverify", json=payload
    - 9)
    -10resp = resp.json()
    -
      -
    1. If access token is valid, allow access to protected resource or deny -access.
    2. -
    -
    1 if resp["valid"] == False:
    -2     return "invalid captcha", 400
    -3 else:
    -4     return allow_access_to_protected_resource(request.form)
    -

    Please see here for a complete Flask example and here for an Actix -Web example.

    -

    Congratulations, mCaptcha is now integrated with your website!

    -`},{id:1,href:"/docs/webmasters/configuring-difficulty-factor/",title:"Configuring Difficulty Factor",description:"mCaptcha has options to configure its proof of work engine behavior, this page explains how to determine difficulty facotrs that work best for your website!",content:`

    mCaptcha is highly responsive to detecting DDoS attacks. Admins are -advised to take advantage of it by setting low difficulty -factors for normal traffic levels -for their website.

    -

    Lowest advisable difficulty factor is 5000.

    -

    For instance, if it is normal for my website to get 2000 requests for -every 30 seconds, I will set a cool -down period of 30 seconds and the -first level of difficulty configuration will have a visitor threshold of 2000 with a -difficulty factor of 5000.

    -

    There are two modes to setting difficulty factor for your website on -mCaptcha:

    -

    Easy option

    -

    Easy mode asks a few basic statistics about your website and generates a -configuration that should work for your website. Currently, easy mode is -guided by assumptions on suitable difficulty factors to protect a -website but it will be fine-tuned as mCaptcha sees more deployment.

    -

    Configuration generated by easy mode can be tweaked later using the -advance mode, as you become more familiar with how mCaptcha works.

    -
    - new sitekey form in easy mode - -
    -

    Advance option

    -

    Advance mode gives the admin granular control over how mCaptcha behaves -on their website. It has options to set the difficulty factor for each -level of traffic(or visitor threshold, in mCaptcha speak), fully taking -advantage of mCaptcha’s variable difficulty factor feature.

    -

    For instance, if it is normal for a website to get 200 requests over 30 -seconds, then setting a very low difficulty factor for a visitor -threshold of 200 and a cool down period of 30 seconds will allow the -users to pass through without waiting on the CAPTCHA. But if 1000 -requests over 30 seconds will bring down the service, then the admin can -configure increasing levels of difficulty factor of increasing traffic -levels, effectively rate limiting its users and protecting the -underlying website.

    -
    - new sitekey form in advance mode - -
    -`},{id:2,href:"/docs/self-hosting/getting-started/",title:"Getting started",description:"Get started with self-hosting mCaptcha",content:`

    Get started

    -

    There are two main ways to self-host mCaptcha:

    -
      -
    1. Bare metal
    2. -
    3. With Docker
    4. -
    -`},{id:3,href:"/docs/self-hosting/bare-metal/",title:"Deploy bare metal",description:"Bare metal deployment is tedious, most of this will be automated with a script in the future.",content:`

    2. Configure

    -

    mcaptcha is highly configurable.

    -

    Configuration is applied/merged in the following order:

    -
      -
    1. path to configuration file passed in via MCAPTCHA_CONFIG
    2. -
    3. ./config/default.toml
    4. -
    5. /etc/mcaptcha/config.toml
    6. -
    7. environment variables.
    8. -
    -

    1. Install postgres if you don’t have it already.

    -

    For Debian based distributions:

    -
    1sudo apt install postgres
    -

    2. Create new user for running mcaptcha

    -
    1$ sudo useradd -b /srv -m -s /usr/bin/zsh mcaptcha
    -

    3. Create new user in Postgres

    -
    1$ sudo -iu postgres # switch to \`postgres\` user
    -2$ psql
    -3postgres=#  CREATE USER mcaptcha WITH PASSWORD 'my super long password and yes you need single quote\`;
    -4$  createdb -O mcaptcha mcaptcha # create db 'mcaptcha' with 'mcaptcha' as owner
    -

    4. Install and load mCaptcha/cache module:

    -

    See mCaptcha/cache for more -details.

    -

    4. Build mcaptcha

    -

    To build mcaptcha, you need the following dependencies:

    -
      -
    1. rust
    2. -
    3. node(v14.16.0)
    4. -
    5. yarn(JavaScript package manager)
    6. -
    7. make
    8. -
    -

    How to build

    -
      -
    1. Install Cargo using rustup with:
    2. -
    -
    1$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    -
      -
    1. -

      Install node(v14.16.0)

      -
    2. -
    3. -

      Install yarn(JavaScript package manager)

      -
    4. -
    5. -

      Build with make:

      -
    6. -
    -
    1$ make dev-env && \\
    -2	make release
    -

    5. Install package:

    -
    1$ sudo cp ./target/release/mcaptcha /usr/bin/ && \\
    -2	mkdir sudo /etc/mcaptcha && \\
    -3	sudo cp config/default.toml /etc/mcaptcha/config.toml
    -

    6. Systemd service configuration:

    -
      -
    1. Copy the following to /etc/systemd/system/mcaptcha.service:
    2. -
    -
     1[Unit]
    - 2Description=mCaptcha: a CAPTCHA system that gives attackers a run for their money
    - 3
    - 4[Service]
    - 5Type=simple
    - 6User=mcaptcha
    - 7ExecStart=/usr/bin/mcaptcha
    - 8Restart=on-failure
    - 9RestartSec=1
    -10SuccessExitStatus=3 4
    -11RestartForceExitStatus=3 4
    -12SystemCallArchitectures=native
    -13MemoryDenyWriteExecute=true
    -14NoNewPrivileges=true
    -15Environment="RUST_LOG=info"
    -16
    -17[Unit]
    -18After=sound.target
    -19Wants=network-online.target
    -20Wants=network-online.target
    -21Requires=postgresql.service
    -22After=syslog.target
    -23
    -24[Install]
    -25WantedBy=multi-user.target
    -
      -
    1. Enable service:
    2. -
    -
    1$ sudo systemctl daemon-reload && \\
    -2	sudo systemctl enable mcaptcha && \\ # Auto startup during boot
    -3	sudo systemctl start mcaptcha
    -4\`\`
    -
    `},{id:4,href:"/docs/self-hosting/docker/",title:"Using Docker",description:"Deploy mCaptcha using docker",content:`

    With Docker

    -

    1. Configure

    -

    mcaptcha is highly configurable.

    -

    Configuration is applied/merged in the following order:

    -
      -
    1. path to configuration file passed in via MCAPTCHA_CONFIG
    2. -
    3. ./config/default.toml
    4. -
    5. /etc/mcaptcha/config.toml
    6. -
    7. environment variables.
    8. -
    -

    See -CONFIGURATION.md -for configurable options.

    -

    2. Run image

    -

    If you have already have a Postgres instance running, then:

    -
    1docker run -p <host-machine-port>:<port-in-configuration-file> \\
    -2	--add-host=database:<database-ip-addrss> \\
    -3	-e RUST_LOG=debug \\
    -4	-e DATABASE_URL="postgres://<db-user>:<db-password>@database:<db-port>/<db-name>" \\
    -5	mcaptcha/mcaptcha:latest
    -

    If you don’t have a Postgres instance running, you can either install -one using a package manager or launch one with docker. A docker-compose -configuration is available that will launch both -a database instance mcaptcha instance.

    -

    With docker-compose

    -
      -
    1. -

      Follow steps above to build docker image.

      -
    2. -
    3. -

      Set database password docker-compose configuration.

      -
    4. -
    5. -

      Launch network

      -
    6. -
    -
    1docker-compose up -d
    -
    `},{id:5,href:"/docs/self-hosting/dependencies/",title:"Database and cache",description:"mCaptcha server requires dependencies like a Postgres database and a Redis cache",content:`

    Notes

    -

    Database

    -
      -
    • -

      Database migrations are baked into the server binary so don’t worry -about them.

      -
    • -
    • -

      When compiling from source, unset database configuration(comment out -database configuration/ unset relevant environment variables). -mCaptcha uses sqlx database client -library which checks SQL queries at compile time. So if you are starting -with a fresh database without migrations applied, compilation will fail.

      -
    • -
    -

    Redis

    -
      -
    • -

      Redis is an optional dependency. Currently, the non-Redis configuration -doesn’t persist CAPTCHA heat. So if there’s a systems failure, CAPTCHA -heat will be reset and visitor count will start from 0. For small -installations, this should post a problem as heat is short lived and is -reset anyways at cool down period.

      -
    • -
    • -

      mCaptcha uses a custom Redis module called -cache to overcome some of Redis' -limitations.

      -
    • -
    -

    Instructions

    -

    Once again, there are two ways to go about this:

    -
      -
    1. Docker
    2. -
    3. Bare metal
    4. -
    -

    Docker

    -

    Database

    -

    Download and run Postgres

    -
    1docker create --name mcaptcha-postgres \\
    -2  -e POSTGRES_PASSWORD=<database-password> \\
    -3  -p 5432:5432 \\
    -4  postgres && docker start mcaptcha-postgres
    -

    Redis

    -
    1docker create --name mcaptcha-cache \\
    -2  -p 6379:6379 \\
    -3  mcaptcha/cache && docker start mcaptcha-cache
    -

    See mCaptcha/cache for more -details.

    -

    1. Install Postgres if you don’t have it already.

    -

    For Debian based distributions:

    -
    1sudo apt install postgres
    -

    2. Create new user for running mCaptcha

    -
    1$ sudo useradd -b /srv -m -s /usr/bin/bash mcaptcha
    -

    3. Create new user in Postgres

    -
    1$ sudo -iu postgres # switch to \`postgres\` user
    -2$ psql
    -3postgres=#  CREATE USER mcaptcha WITH PASSWORD 'my super long password and yes you need single quote';
    -4$  createdb -O mcaptcha mcaptcha # create db 'mcaptcha' with 'mcaptcha' as owner
    -

    4. Install mCaptcha/cache

    -

    See mCaptcha/cache for more -details.

    -`},{id:6,href:"/docs/help/troubleshooting/",title:"Troubleshooting",description:"Solutions to common problems.",content:`

    Q: I just setup an instance but I am unable to login

    -

    mCaptcha by default is configured to server at localhost hostname. If -the instance is deployed at another hostname, please try setting -MCAPTCHA_SERVER_DOMAIN environment variable to the hostname at which -your instance is deployed or setting the equivalent in config.toml:

    -
    1[server]
    -2domain=mydomain
    -
    `},{id:7,href:"/docs/api/browser/",title:"Browser libraries",description:"API documenttion for mCaptcha WASM library",content:`

    The browser part of mCaptcha is divided into three components.

    -
      -
    • Glue code
    • -
    • Widget program
    • -
    • Proof-of-Work libraries(WebAssembly and JavaScript polyfill)
    • -
    -

    Glue code

    -

    This is the code that links mCaptcha with your website’s frontend code. -It creates an iframe containing the mCaptcha widget and injects the -received verification proof token into a hidden input field.

    -

    Support is available for various frameworks, see -mCaptcha/glue for the full list.

    -

    For frameworks without official support, a low-level library, -@mcaptcha/core-glue, -can be used to implement support.

    -

    Widget Program

    -

    This part is served by the mCaptcha backend. It fetches PoW config from -the backend, generates proof and submits it for verification. If -verification is successful, it sends a message containing the -verification proof token to the parent window, assuming it’s loaded as -an iframe.

    - -

    WebAssembly library which generates Proofs of Work for mCaptcha systems.

    -

    Proof-of-Work(PoW) library

    -

    WebAssembly bindings(mCaptcha/pow_wasm) are available for the main rust library(mCaptcha/pow_sha256).

    -

    For browsers without support WebAssembly, a -polyfill(pow_sha256-polyfill) -is available.

    -`},{id:8,href:"/docs/api/mcaptcha-system/",title:"mCaptcha System Library",description:"API documenttion for the core Library used in mCaptcha",content:`

    Documentation for the library used in mCaptcha core.

    -

    Versions

    - -`},{id:9,href:"/docs/api/pow-sha256/",title:"pow_sha256",description:"API documenttion for PoW Library used in mCaptcha",content:`

    Rust crate which generates SHA256 Proofs of Work on serializable datatypes.

    -

    This is a fork of the pow library by -@robkorn) with some new -additions. Primary of these being:

    -
      -
    • PoW datatype now offers a constructor
    • -
    • Salt is no longer hard coded into the library, users can provide -unique salts.
    • -
    -

    Other small changes have also been included of various importance but -mostly just stylistic/ease of use improvements.

    -

    Versions

    - -

    Changelog

    -

    Changelog is available at the project’s -repository

    -`},{id:10,href:"/docs/help/faq/",title:"FAQ",description:"Answers to frequently asked questions.",content:`

    Coming soon

    -`},{id:11,href:"/docs/user-manual/cli/",title:"CLI tool",description:"Instructions to install mCaptcha CLI",content:`

    A CLI tool exists to compute mCaptcha challenges. It can be installed -from multiple sources:

    -

    Install

    -

    crates.io

    -

    The CLI tool is available on, crates.io, the Rust -language’s package registry. Rust language toolchain is required to -install from crates.io, please see rustup.rs for -Instructions to install it.

    -
    1cargo install mcaptcha-cli
    -

    Pre-compiled binaries

    -

    Nightly builds and stable releases are regularly published to -dl.mcaptcha.org for a variety of -CPU architectures and operating systems.

    -
      -
    1. Download binary, checksum and GPG signature files
    2. -
    -
    1wget https://dl.mcaptcha.org/mcaptcha/cli/{VERSION}/{FILENAME}.tar.gz
    -2wget https://dl.mcaptcha.org/mcaptcha/cli/{VERSION}/{FILENAME}.tar.gz.asc
    -3wget https://dl.mcaptcha.org/mcaptcha/cli/{VERSION}/{FILENAME}.tar.gz.sha256
    -
      -
    1. Verify checksum
    2. -
    -
    1sha256sum -c {FILENAME}.tar.gz.sha256
    -
      -
    1. Download mCaptcha’s GPG release keys and verify GPG signature
    2. -
    -
    1gpg --keyserver keyserver.ubuntu.com --recv 73DAC973A9ADBB9ADCB5CDC4595A08135BA9FF73
    -2gpg --verify {FILENAME}.tar.gz.asc
    -
      -
    1. Install Binary
    2. -
    -
    1tar -xvzf {FILENAME}.tar.gz && sudo cp {FILENAME}/mcaptcha-cli /usr/local/bin
    -

    Build from source

    -
      -
    1. Install Rust tool chain -Please see here for instructions.
    2. -
    3. Download source code
    4. -
    -
    1git clone https://git.batsense.net/mCaptcha/cli
    -
      -
    1. Compile and install
    2. -
    -
    1cargo build --release && sudp cp ./target/release/mcaptcha-cli
    -2/usr/local/bin
    -

    Pass mCaptcha challenge

    -

    The CLI tool requires details about the challenge to work on it. The -tool can be used in three different modes compute challenge:

    -
      -
    1. Protected Page: Compute mCaptcha challenge for the CAPTCHA at a -protected page
    2. -
    3. Widget URL: Compute PoW for captcha at widget URL
    4. -
    5. (Developer mode) Offline: Computes PoW over given CAPTCHA parameters
    6. -
    -

    From protected page URL

    -

    The most convenient mode: copy the URL of the webpage which has the -mCaptcha widget (example: showcase.mcaptcha.org) and run the CLI tool -with it to get an authorization code: -Compute challenge using the URL

    -
    103:39 atm@lab cli ±|feat-parse-webpage ✗|→ mcaptcha-cli protected-page https://showcase.mcaptcha.org/
    -2Authorization token: eRAZJiMrW58uDYA1s64Tmwq1u30HutuF
    -

    Widget URL

    -

    If you have the widget URL (will be in format https://mcaptcha.example.org/widget?sitekey=randomstring), it can be used to solve challenge as well:

    -
    1Compute PoW by fetching parameters from  CAPTCHA URL
    -2
    -3Usage: mcaptcha-cli online --url <URL>
    -4
    -5Options:
    -6  -u, --url <URL>  URL of the CAPTCHA. Example:  https://example.org/widget?sitekey=foo
    -7  -h, --help       Print help
    -

    Example usage:

    -
    113:32 atm@lab cli ±|online ✗|→ mcaptcha-cli online -u https://demo.mcaptcha.org/widget?sitekey=pHy0AktWyOKuxZDzFfoaewncWecCHo23
    -2Authorization token: 3xleN26OctBuVu3X4t6CYyUjErhaxQvz
    -

    [Developer mode] Offline

    -

    Useful while debugging mCaptcha configurations, works on raw challenge -parameters.

    -

    Help menu:

    -
    1Compute PoW with offline parameters
    -2
    -3Usage: mcaptcha-cli offline --salt <SALT> --phrase <PHRASE> --difficulty-factor <DIFFICULTY_FACTOR>
    -4
    -5Options:
    -6  -s, --salt <SALT>                            Salt with which PoW should be computed
    -7  -p, --phrase <PHRASE>                        Phrase over which PoW should be computed
    -8  -d, --difficulty-factor <DIFFICULTY_FACTOR>  Difficulty Factor
    -9  -h, --help                                   Print help
    -

    Example usage:

    -
    113:28 atm@lab cli ±|online|→ mcaptcha-cli offline -s $(rand 32) -p $(rand 32) -d 50000
    -2difficulty: 50000
    -3nonce: 90507
    -4original phrase: f351f333d44b2c6b5bf7f033b065bbb8fb5e9dd153bd402e43ed04425f5a3859
    -5result: 340276562956196291522979356090220150471
    -

    Where rand is this script.

    -`},{id:12,href:"/docs/user-manual/how-to-mcaptcha-without-js/",title:"Use mCaptcha without JavaScript",description:"Instructions to solve mCaptcha with JavaScript disabled",content:`

    To use mCaptcha without JavaScript:

    -
      -
    1. Install mCaptcha CLI too. Please see here for instructions.
    2. -
    3. Copy the URL of the protected page
    4. -
    5. Run mCaptcha CLI with that URL:
    6. -
    -
    1mcapthca-cli protected-page <URL>
    -
      -
    1. Copy authorization code and paste it in the form
    2. -
    -`},{id:13,href:"/docs/user-manual/",title:"User Manual",description:"Introduction to mCaptcha for users",content:""},{id:14,href:"/docs/webmasters/terminology/",title:"Terminology",description:"Information about terminology used in mCaptcha, some of which unique to the project",content:`

    Authorization token

    -

    When a visitor solves the CAPTCHA and sends their solution to an -mCaptcha instance, the solution will be verified for correctness. If the -solution is correct, mCaptcha will return a single use authorization token.

    -

    This authorization token should be attached to the visitor’s requited to the -protected service and the protected service should validity of the -authorization token with the mCaptcha instance and only allow authorization to -protected resource if the authorization token is valid.

    -

    Cooldown Period

    -

    mCaptcha implements leaky bucket algorithm to measure -current traffic levels. Cooldown period specifies the leak or the time -after which a visitor addition is decremented.

    -

    For instance, if initial traffic level is 0 and a user visits one -second later, the traffic level will be incremented to 1. Now, if the -cooldown period is set to 30 seconds, the traffic level will be -decremented after 30 seconds. So after 30 seconds, the traffic level will -go from 1 to 0.

    -

    Difficulty Factor

    -

    Difficulty factor determines the time it takes to solve a CAPTCHA. The -higher the difficulty factor, the longer it will take to generate a -proof of work for it to solve the CAPTCHA.

    -

    mCaptcha’s proof of work based mechanism makes it highly accessible to -people with special needs but it is important to choose the difficulty factor -with care as very high difficulty factors will make the CAPTCHA -inaccessible to users on slow devices.

    -

    Sitekey

    -

    Site key is a unique identifier associated with CAPTCHA configurations -created on mCaptcha. It is required to integrate a CAPTCHA with your -website.

    -

    Visitor Threshold

    -

    mCaptcha’s variable difficulty factor mechanism requires a website’s traffic -statistics be split into levels, so that it can deploy the right -difficulty factor for each level.

    -

    Visitor threshold is used to traffic into levels and mCaptcha accepts a -difficulty configuration for each of these levels. When current traffic -exceeds a difficulty factor, mCaptcha will increase the difficulty -factor to the next configured level.

    -

    For instance, consider the configuration given below:

    -
      -
    • Cool down period: 30 seconds
    • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    LevelDifficulty FactorVisitor Threshold
    15,0002,000
    250,0005,000
    3500,00010,000
    45,000,00015,000
    -

    If the website sees 2,000 requests in a 30 second window, level 1 -difficulty factor(5,000) will be deployed. If the traffic increases to -5,000 requests in a 30 second window, then difficulty factor will be -upgraded to level 2(50,000). Likewise 10,000 and 15,000 requests over 30 -seconds will result in difficulty factor being upgraded to 500,000 and -5,000,000 respectively.

    -

    Visitor threshold is how mCaptcha determines which difficulty factor -level to deploy. mCaptcha uses leaky bucket algorithm to keep the -visitor threshold constantly updated within the configured cool down -period. So, at any given moment the, the current visitor level will be -the amount of traffic that was served in the cool down period specified.

    -`},{id:15,href:"/docs/webmasters/faq/",title:"Webmasters FAQ",description:"Frequently asked questions related to using mCaptcha as a webmaster",content:`

    Easy Mode: Default cooldown period

    -

    When configuring mCaptcha in easy mode, the default cooldown period is set to 30 seconds.

    -

    How to get site key from dashboard?

    -
      -
    1. Go to “Site keys” on the side panel in the dashboard
    2. -
    -
    -
    - Site key menu option on the dashboard, encircled in red. - -
    -
    -
      -
    1. click on the clipboard button to copy the site key to your -clipboard.
    2. -
    -
    - Copy site key to clipboard. Clipboard button is highlighted in the photo - -
    -`},{id:16,href:"/docs/help/",title:"Help",description:"Help mCaptcha.",content:""},{id:17,href:"/docs/webmasters/",title:"Webmasters",description:"Introduction to mCaptcha for webmasters",content:""},{id:18,href:"/docs/api/",title:"API",description:"Documentation for libraries used in mCaptcha",content:""},{id:19,href:"/docs/",title:"mCaptcha",description:"Docs mCaptcha",content:""},{id:20,href:"/docs/self-hosting/",title:"Self-Hosting",description:"Instructions to self-host mCaptcha",content:""}];e.add(n),userinput.addEventListener("input",s,!0),suggestions.addEventListener("click",o,!0);function s(){var n,i=this.value,s=e.search(i,5),o=suggestions.childNodes,r=0,c=s.length;for(suggestions.classList.remove("d-none"),s.forEach(function(e){n=document.createElement("div"),n.innerHTML="",a=n.querySelector("a"),t=n.querySelector("span:first-child"),d=n.querySelector("span:nth-child(2)"),a.href=e.href,t.textContent=e.title,d.textContent=e.description,suggestions.appendChild(n)});o.length>c;)suggestions.removeChild(o[r])}function o(){for(;suggestions.lastChild;)suggestions.removeChild(suggestions.lastChild);return!1}})() \ No newline at end of file diff --git a/index.min.80cc62918990f0b9afd15b81ea43df0bc0090a2419660eb4a32b4d122db3bdd007faabd824064bd5d275cbeb3d1e2d2bd650220c94c2ef3aeffb4dc2ef6551f5.js b/index.min.80cc62918990f0b9afd15b81ea43df0bc0090a2419660eb4a32b4d122db3bdd007faabd824064bd5d275cbeb3d1e2d2bd650220c94c2ef3aeffb4dc2ef6551f5.js new file mode 100644 index 0000000..ddab039 --- /dev/null +++ b/index.min.80cc62918990f0b9afd15b81ea43df0bc0090a2419660eb4a32b4d122db3bdd007faabd824064bd5d275cbeb3d1e2d2bd650220c94c2ef3aeffb4dc2ef6551f5.js @@ -0,0 +1 @@ +var suggestions=document.getElementById('suggestions'),userinput=document.getElementById('userinput');document.addEventListener('keydown',inputFocus);function inputFocus(a){a.keyCode===191&&(a.preventDefault(),userinput.focus()),a.keyCode===27&&(userinput.blur(),suggestions.classList.add('d-none'))}document.addEventListener('click',function(a){var b=suggestions.contains(a.target);b||suggestions.classList.add('d-none')}),document.addEventListener('keydown',suggestionFocus);function suggestionFocus(b){const d=suggestions.querySelectorAll('a'),e=[...d],a=e.indexOf(document.activeElement);let c=0;b.keyCode===38?(b.preventDefault(),c=a>0?a-1:0,d[c].focus()):b.keyCode===40&&(b.preventDefault(),c=a+1
    - - - - - - - - - +

    Edit this page on git.batsense.net

    \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index b1a71c9..65d268f 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1,292 +1 @@ - - - - - /blog/introducing-mcaptcha-net/ - 2023-10-21T16:48:55+05:30 - weekly - 0.5 - - - - /blog/february-2023-monthly-report/ - 2023-03-09T02:30:43+05:30 - weekly - 0.5 - - - - /blog/july-2022-monthly-report/ - 2023-02-13T14:50:39+05:30 - weekly - 0.5 - - - - /blog/june-2022-monthly-report/ - 2022-07-07T20:05:57+05:30 - weekly - 0.5 - - - - /blog/may-2022-monthly-report/ - 2022-06-14T15:39:59+05:30 - weekly - 0.5 - - - - /blog/december-2021-monthly-report/ - 2022-06-14T15:39:59+05:30 - weekly - 0.5 - - - - /blog/survey/ - 2021-12-23T23:26:38+05:30 - weekly - 0.5 - - - - /blog/pow-performance/ - 2021-09-01T15:33:12+05:30 - weekly - 0.5 - - - - /blog/say-hello-to-mcaptcha/ - 2021-12-02T10:25:42+05:30 - weekly - 0.5 - - - - /docs/webmasters/installing-captcha/ - 2023-10-28T02:30:28+05:30 - weekly - 0.5 - - - - /docs/webmasters/configuring-difficulty-factor/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - - /docs/self-hosting/getting-started/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - - /docs/self-hosting/bare-metal/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - - /docs/self-hosting/docker/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - - /docs/self-hosting/dependencies/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - - /docs/help/troubleshooting/ - 2022-08-01T22:24:30+05:30 - weekly - 0.5 - - - - /docs/api/browser/ - 2022-08-01T20:24:18+05:30 - weekly - 0.5 - - - - /docs/api/mcaptcha-system/ - 2022-08-01T20:24:18+05:30 - weekly - 0.5 - - - - /docs/api/pow-sha256/ - 2022-08-01T20:24:18+05:30 - weekly - 0.5 - - - - /docs/help/faq/ - 2022-08-01T19:16:21+05:30 - weekly - 0.5 - - - - /docs/user-manual/cli/ - 2023-10-28T01:09:37+05:30 - weekly - 0.5 - - - - /docs/user-manual/how-to-mcaptcha-without-js/ - 2023-10-28T03:16:49+05:30 - weekly - 0.5 - - - - /docs/user-manual/ - 2023-10-28T01:09:37+05:30 - weekly - 0.5 - - - - /docs/webmasters/terminology/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - - /docs/webmasters/faq/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - - /about/ - 2023-05-29T16:01:44-04:00 - weekly - 0.5 - - - - /donate/ - 2021-07-16T21:58:39+05:30 - weekly - 0.5 - - - - /contributors/aravinth-manivannan/ - 2021-05-26T14:18:41+05:30 - weekly - 0.5 - - - - /contributors/ - 2021-05-26T14:18:41+05:30 - weekly - 0.5 - - - - /privacy-policy/ - 2021-05-27T19:15:04+05:30 - weekly - 0.5 - - - - /community/ - 2022-08-01T18:47:16+05:30 - weekly - 0.5 - - - - /security/ - 2021-05-27T19:15:04+05:30 - weekly - 0.5 - - - - /thanks/ - 2023-03-08T17:28:52+05:30 - weekly - 0.5 - - - - / - 2022-08-01T22:26:08+05:30 - weekly - 0.5 - - - - /docs/help/ - 2021-07-21T15:49:53+05:30 - weekly - 0.5 - - - - /docs/webmasters/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - - /docs/api/ - 2022-08-01T22:24:03+05:30 - weekly - 0.5 - - - - /contact/ - 2021-05-27T18:12:01+05:30 - weekly - 0.5 - - - - /blog/ - 2021-05-26T14:18:41+05:30 - weekly - 0.5 - - - - /docs/ - 2021-07-21T15:49:53+05:30 - weekly - 0.5 - - - - /docs/self-hosting/ - 2023-10-27T21:39:40+05:30 - weekly - 0.5 - - - +/blog/introducing-mcaptcha-net/2023-10-21T16:48:55+05:30weekly0.5/blog/february-2023-monthly-report/2023-03-09T02:30:43+05:30weekly0.5/blog/july-2022-monthly-report/2023-02-13T14:50:39+05:30weekly0.5/blog/june-2022-monthly-report/2022-07-07T20:05:57+05:30weekly0.5/blog/may-2022-monthly-report/2022-06-14T15:39:59+05:30weekly0.5/blog/december-2021-monthly-report/2022-06-14T15:39:59+05:30weekly0.5/blog/survey/2021-12-23T23:26:38+05:30weekly0.5/blog/pow-performance/2021-09-01T15:33:12+05:30weekly0.5/blog/say-hello-to-mcaptcha/2021-12-02T10:25:42+05:30weekly0.5/docs/webmasters/installing-captcha/2023-10-28T02:30:28+05:30weekly0.5/docs/webmasters/configuring-difficulty-factor/2023-10-27T21:39:40+05:30weekly0.5/docs/self-hosting/getting-started/2023-10-27T21:39:40+05:30weekly0.5/docs/self-hosting/bare-metal/2023-10-27T21:39:40+05:30weekly0.5/docs/self-hosting/docker/2023-10-27T21:39:40+05:30weekly0.5/docs/self-hosting/dependencies/2023-10-27T21:39:40+05:30weekly0.5/docs/help/troubleshooting/2022-08-01T22:24:30+05:30weekly0.5/docs/api/browser/2022-08-01T20:24:18+05:30weekly0.5/docs/api/mcaptcha-system/2022-08-01T20:24:18+05:30weekly0.5/docs/api/pow-sha256/2022-08-01T20:24:18+05:30weekly0.5/docs/help/faq/2022-08-01T19:16:21+05:30weekly0.5/docs/user-manual/cli/2023-10-28T01:09:37+05:30weekly0.5/docs/user-manual/how-to-mcaptcha-without-js/2023-10-28T03:16:49+05:30weekly0.5/docs/user-manual/2023-10-28T01:09:37+05:30weekly0.5/docs/webmasters/terminology/2023-10-27T21:39:40+05:30weekly0.5/docs/webmasters/faq/2023-10-27T21:39:40+05:30weekly0.5/about/2023-05-29T16:01:44-04:00weekly0.5/donate/2021-07-16T21:58:39+05:30weekly0.5/contributors/aravinth-manivannan/2021-05-26T14:18:41+05:30weekly0.5/contributors/2021-05-26T14:18:41+05:30weekly0.5/privacy-policy/2021-05-27T19:15:04+05:30weekly0.5/community/2022-08-01T18:47:16+05:30weekly0.5/security/2021-05-27T19:15:04+05:30weekly0.5/thanks/2023-03-08T17:28:52+05:30weekly0.5/2022-08-01T22:26:08+05:30weekly0.5/docs/help/2021-07-21T15:49:53+05:30weekly0.5/docs/webmasters/2023-10-27T21:39:40+05:30weekly0.5/docs/api/2022-08-01T22:24:03+05:30weekly0.5/contact/2021-05-27T18:12:01+05:30weekly0.5/blog/2021-05-26T14:18:41+05:30weekly0.5/docs/2021-07-21T15:49:53+05:30weekly0.5/docs/self-hosting/2023-10-27T21:39:40+05:30weekly0.5 \ No newline at end of file diff --git a/thanks/index.html b/thanks/index.html index 903679d..b5d48ae 100644 --- a/thanks/index.html +++ b/thanks/index.html @@ -1,195 +1,11 @@ - - - - - - - - - - - - - - Thanks - mCaptcha - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    -
    - -
    - -
    - -

    Thanks

    -

    -

    Funding

    -

    NLnet

    -
    - NLnet NGIZero logo -
    -
    -

    2023 development is funded through the NGI0 Entrust -Fund, via NLnet. Please -see here for more details.

    -

    Free software libraries and tools

    -

    mCaptcha is built entirely using free software libraries tools. We are +Thanks - mCaptcha

    Thanks

    Funding

    NLnet

    NLnet NGIZero logo


    2023 development is funded through the NGI0 Entrust +Fund, via NLnet. Please +see here for more details.

    Free software libraries and tools

    mCaptcha is built entirely using free software libraries tools. We are grateful for all maintainers and contributors for their time and effort -in making them!

    -

    Creative Commons licensed artwork

    -

    mCaptcha shied logo is derived from this -photo captured by Paweł +in making them!

    Creative Commons licensed artwork

    mCaptcha shied logo is derived from this +photo captured by Paweł Czerwiński. You can check out -their work at:

    - - -

    Edit this page on git.batsense.net

    - -
    -
    - -
    -
    - - - - - - - - - +their work at:

    Edit this page on git.batsense.net

    \ No newline at end of file
    -
    - -
    - -
    - -

    Security

    -

    Last Edited May 27, 2021

    -

    -

    Security is at the heart of mCaptcha. If you find any discrepancies in -our software(see listing on our GitHub, -services available)

    -

    Rules:

    -

    Before you start

    -
      -
    • -

      Check the list of domains that are in scope for security research -and the list of targets for useful information for getting started.

      -
    • -
    • -

      Check the list of bugs that have been classified as ineligible.

      -
    • -
    • -

      Check our changelog(in our GitHub repositories) for recently launched -features.

      -
    • -
    • -

      Never attempt non-technical attacks such as social engineering, +Security - mCaptcha

      Security

      Last Edited May 27, 2021

      Security is at the heart of mCaptcha. If you find any discrepancies in +our software(see listing on our GitHub, +services available)

      Rules:

      Before you start

      • Check the list of domains that are in scope for security research +and the list of targets for useful information for getting started.

      • Check the list of bugs that have been classified as ineligible.

      • Check our changelog(in our GitHub repositories) for recently launched +features.

      • Never attempt non-technical attacks such as social engineering, phishing, or physical attacks against our employees, users, or -infrastructure.

        -
      • -
      -

      When in doubt, contact -me(@realaravinth) at -realaravinth@batense.net.

      -

      Performing your research

      -
        -
      • -

        Do not impact other users with your testing, this includes testing +infrastructure.

      When in doubt, contact +me(@realaravinth) at +realaravinth@batense.net.

      Performing your research

      • Do not impact other users with your testing, this includes testing vulnerabilities with CAPTCHA credentials and account credentials of accounts you do not own. If you are attempting to find an -authorization bypass, you must use accounts you own.

        -
      • -
      • -

        The following are never allowed for research. We may -suspend your mCaptcha account for:

        -
          -
        • -

          Performing distributed denial of service (DDoS) or other volumetric +authorization bypass, you must use accounts you own.

        • The following are never allowed for research. We may +suspend your mCaptcha account for:

          • Performing distributed denial of service (DDoS) or other volumetric attacks. Sure, we are a DDoS protection organisation, but with sufficient resources and motivation, it is possible to take us down. For this -reason, we request you to not hurt us.

            -
          • -
          • -

            Spamming content Large-scale vulnerability scanners, scrapers, or -automated tools which produce excessive amounts of traffic.

            -

            Note: We do allow the use of automated tools so long as they do +reason, we request you to not hurt us.

          • Spamming content Large-scale vulnerability scanners, scrapers, or +automated tools which produce excessive amounts of traffic.

            Note: We do allow the use of automated tools so long as they do not produce excessive amounts of traffic. For example, running one nmap scan against one host is allowed, but sending 65,000 -requests in two minutes using Burp Suite Intruder is excessive.

            -
          • -
          -
        • -
        • -

          Researching denial-of-service attacks is allowed only if you follow -these rules:

          -
            -
          • -

            There are no limits for researching denial of service +requests in two minutes using Burp Suite Intruder is excessive.

        • Researching denial-of-service attacks is allowed only if you follow +these rules:

          • There are no limits for researching denial of service vulnerabilities against your own instance of mCaptcha server. We strongly recommend/prefer this method for researching denial of -service issues.

            -
          • -
          • -

            If you choose to test on mCaptcha proper (i.e. -https://mcaptcha.org or https://mcaptcha.io):

            -
              -
            • Research must be performed using credentials you own.
            • -
            • Stop immediately if you believe you have affected the +service issues.

            • If you choose to test on mCaptcha proper (i.e. +https://mcaptcha.org or https://mcaptcha.io):

              • Research must be performed using credentials you own.
              • Stop immediately if you believe you have affected the availability of our services. Don’t worry about demonstrating the full impact of your vulnerability, our team -will be able to determine the impact.
              • -
              -
            • -
            -
          • -
          -

          Handling personally identifiable information (PII)

          -
            -
          • -

            Personally identifying information (PII) includes:

            -
              -
            • legal and/or full names
            • -
            • names or usernames combined with other identifiers like phone numbers or email addresses
            • -
            • health or financial information (including insurance information, social security numbers, etc.)
            • -
            • information about political or religious affiliations
            • -
            • information about race, ethnicity, sexual orientation, gender, or other identifying information that could be used for discriminatory purposes
            • -
            -
          • -
          • -

            Do not intentionally access others’ PII. If you suspect a service +will be able to determine the impact.

      Handling personally identifiable information (PII)

      • Personally identifying information (PII) includes:

        • legal and/or full names
        • names or usernames combined with other identifiers like phone numbers or email addresses
        • health or financial information (including insurance information, social security numbers, etc.)
        • information about political or religious affiliations
        • information about race, ethnicity, sexual orientation, gender, or other identifying information that could be used for discriminatory purposes
      • Do not intentionally access others’ PII. If you suspect a service provides access to PII, limit queries to your own personal -information.

        -
      • -
      • -

        Report the vulnerability immediately and do not attempt to access any -other data. We will assess the scope and impact of the PII exposure.

        -
      • -
      • -

        Limit the amount of data returned from services. For SQL injection, -for example, limit the number of rows returned

        -
      • -
      • -

        You must delete all your local, stored, or cached copies of data +information.

      • Report the vulnerability immediately and do not attempt to access any +other data. We will assess the scope and impact of the PII exposure.

      • Limit the amount of data returned from services. For SQL injection, +for example, limit the number of rows returned

      • You must delete all your local, stored, or cached copies of data containing PII as soon as possible. We may ask you to sign a certificate of deletion and confidentiality agreement regarding the exact information you accessed. We may ask you for the usernames and IP addresses used during your testing to assess the impact of the -vulnerability.

        -
      • -
      -

      Reporting your vulnerability

      -
        -
      • -

        Reports must include written instructions for reproducing the -vulnerability.

        -
      • -
      • -

        When reporting vulnerabilities you must keep all information on -restricted to email correspondence with us(see below for +vulnerability.

      Reporting your vulnerability

      • Reports must include written instructions for reproducing the +vulnerability.

      • When reporting vulnerabilities you must keep all information on +restricted to email correspondence with us(see below for contact). If you believe the bug to be critical, please use -encryption.

        -
      • -
      • -

        Do not post information to -video-sharing or pastebin sites.

        -
      • -
      • -

        For vulnerabilities involving personally identifiable information, +encryption.

      • Do not post information to +video-sharing or pastebin sites.

      • For vulnerabilities involving personally identifiable information, please explain the kind of PII you believe is exposed and limit the amount of PII data included in your bug report. For textual information and screenshots, please only include redacted data in your -bug report.

        -
      • -
      • -

        During the course of an investigation, it may take time to resolve +bug report.

      • During the course of an investigation, it may take time to resolve the issue you have reported. We ask that you refrain from publicly disclosing details regarding an issue you’ve reported until the fix has -been publicly made available.

        -
      • -
      - -

      We currently don’t have any legal policies in place but rest assured +been publicly made available.

    We currently don’t have any legal policies in place but rest assured that as long as your research adheres to the above rules, your security research and vulnerability disclosure activities are considered as -“authorized”.

    -

    A detailed policy based on this sentiment is in the works.

    -

    Scope:

    -

    mCaptcha runs a number of services. Only domains listed below are are +“authorized”.

    A detailed policy based on this sentiment is in the works.

    Scope:

    mCaptcha runs a number of services. Only domains listed below are are eligible for security research. Any mCaptcha-owned domains not listed -below are not in scope and are not covered by our legal safe -harbor

    -

    mcaptcha.org

    -
      -
    • mcaptcha.org
    • -
    • demo.mcaptcha.org
    • -
    • demo2.mcaptcha.org
    • -
    -

    mcaptcha.io

    -
      -
    • mcaptcha.io
    • -
    -

    Contact

    -

    Email

    -

    realaravinth@batense.net.

    -

    GPG Key

    -

    Click here to download key

    -
    -----BEGIN PGP PUBLIC KEY BLOCK-----
    +below are not in scope and are not covered by our legal safe
    +harbor

    mcaptcha.org

    • mcaptcha.org
    • demo.mcaptcha.org
    • demo2.mcaptcha.org

    mcaptcha.io

    • mcaptcha.io

    Contact

    Email

    realaravinth@batense.net.

    GPG Key

    Click here to download key

    -----BEGIN PGP PUBLIC KEY BLOCK-----
     
     mQGNBF7jJtMBDADwoO98P31bTkBmWlkICljq8o+S9ltFab9f9l6Npox+qbCnZUCd
     Y+p1jCmRc+6iBh4N2p5kP/02z6BkW7BhVtPKU9Zg1nvkhluCUSMixUlpn/dUYw2J
    @@ -469,40 +211,4 @@ NXxBvA5ABkcHzULubZWLB3QoKDP5DgEXB4cA7kMDryFPnN2shSdBsWt69g1E3gVo
     zKdOEDuIPIv4f7HhhCDCylGwfwqar5XJwnHQrBXLpwlTm4neDsnEOvOzyd8=
     =gpUQ
     -----END PGP PUBLIC KEY BLOCK-----
    -
    -

    Edit this page on git.batsense.net

    - -
    -
    - -
    -