Version Description
- Minor bug fix - added missing check to enqueue recaptcha script only if that feature is enabled.
Download this release
Release Info
Developer | wpsolutions |
Plugin | All In One WP Security & Firewall |
Version | 4.3.8.1 |
Comparing to | |
See all releases |
Code changes from version 4.3.7.2 to 4.3.8.1
- {tags/4.3.7.1/trunk/admin → admin}/general/wp-security-list-table.php +0 -0
- {tags/2.0/admin → admin}/index.html +0 -0
- {tags/1.0/admin → admin}/index.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-admin-init.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-admin-menu.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-blacklist-menu.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-brute-force-menu.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-dashboard-menu.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-database-menu.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-filescan-menu.php +0 -0
- admin/wp-security-filesystem-menu.php +505 -0
- {tags/4.3.1/admin → admin}/wp-security-firewall-menu.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-list-404.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-list-acct-activity.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-list-comment-spammer-ip.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-list-locked-ip.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-list-logged-in-users.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-list-login-fails.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-list-permanent-blocked-ip.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-list-registered-users.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-maintenance-menu.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-misc-options-menu.php +0 -0
- {trunk/admin → admin}/wp-security-settings-menu.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-spam-menu.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-user-accounts-menu.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-user-login-menu.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-user-registration-menu.php +0 -0
- {tags/4.3.7.1/trunk/admin → admin}/wp-security-whois-menu.php +0 -0
- assets/banner-1544x500.png +0 -0
- assets/banner-772x250.png +0 -0
- assets/icon-128x128.png +0 -0
- {tags/2.0/backups → backups}/index.html +0 -0
- {tags/4.3.7.1/trunk/classes → classes}/grade-system/wp-security-feature-item-manager.php +0 -0
- {tags/4.0.1/classes → classes}/grade-system/wp-security-feature-item.php +0 -0
- {tags/2.0/classes → classes}/index.html +0 -0
- {tags/1.0/classes → classes}/index.php +0 -0
- {tags/4.3.7.1/trunk/classes → classes}/wp-security-backup.php +0 -0
- {tags/4.3.7.1/trunk/classes → classes}/wp-security-blocking.php +0 -0
- {tags/4.3.7.1/trunk/classes → classes}/wp-security-bot-protection.php +0 -0
- {tags/4.3.7.1/trunk/classes → classes}/wp-security-captcha.php +0 -0
- {tags/4.3.7.1/trunk/classes → classes}/wp-security-config.php +0 -0
- {tags/4.3.7.1/trunk/classes → classes}/wp-security-configure-settings.php +0 -0
- {tags/4.3.7.1/trunk/classes → classes}/wp-security-cronjob-handler.php +0 -0
- {tags/4.3.7.1/trunk/classes → classes}/wp-security-deactivation-tasks.php +0 -0
- {tags/4.3.7.1/trunk/classes → classes}/wp-security-debug-logger.php +0 -0
- {tags/4.3.7.1/trunk/classes → classes}/wp-security-file-scan.php +0 -0
- classes/wp-security-general-init-tasks.php +616 -0
- classes/wp-security-installer.php +206 -0
- classes/wp-security-process-renamed-login-page.php +243 -0
- classes/wp-security-user-login.php +607 -0
- {tags/4.3.7.1/trunk/classes → classes}/wp-security-user-registration.php +0 -0
- {tags/4.3.7.1/trunk/classes → classes}/wp-security-utility-file.php +0 -0
- {trunk/classes → classes}/wp-security-utility-htaccess.php +0 -0
- {tags/4.3.7.1/trunk/classes → classes}/wp-security-utility-ip-address.php +0 -0
- {tags/4.3.7.1/trunk/classes → classes}/wp-security-utility.php +0 -0
- classes/wp-security-wp-footer-content.php +93 -0
- {tags/4.3.7.1/trunk/classes → classes}/wp-security-wp-loaded-tasks.php +0 -0
- {tags/2.0/css → css}/index.html +0 -0
- {tags/4.0.8/css → css}/wp-security-admin-styles.css +0 -0
- {tags/1.8/css → css}/wp-security-site-lockout-page.css +0 -0
- {tags/1.7/images → images}/arrow.png +0 -0
- {tags/1.0/images → images}/error.png +0 -0
- {tags/1.0/images → images}/feature-difficulty-badge-bg.png +0 -0
- {tags/1.0/images → images}/feature-points-badge-bg.png +0 -0
- {tags/1.7/images → images}/form_bg.png +0 -0
- {tags/2.0/images → images}/index.html +0 -0
- {tags/1.0/images → images}/info-icon.png +0 -0
- {tags/1.0/images → images}/loading.gif +0 -0
- {tags/1.0/images → images}/plugin-icon.png +0 -0
- {tags/1.0/images → images}/plugin-icon2.png +0 -0
- {tags/1.0/images → images}/shield-info-icon-36.png +0 -0
- {tags/1.0/images → images}/shield-security-icon-36.png +0 -0
- {tags/1.0/images → images}/success.png +0 -0
- tags/2.0/index.html → index.html +0 -0
- {tags/2.0/js → js}/index.html +0 -0
- {tags/3.7.5/js → js}/masonry.pkgd.min.js +0 -0
- {tags/1.7/js → js}/password-strength-tool.js +0 -0
- {tags/4.1.0/js → js}/wp-security-admin-script.js +0 -0
- {tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-de_DE.mo +0 -0
- {tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-de_DE.po +0 -0
- {tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-es_ES.mo +0 -0
- {tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-es_ES.po +0 -0
- {tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-fa_IR.mo +0 -0
- {tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-fa_IR.po +0 -0
- {tags/4.1.0/languages → languages}/all-in-one-wp-security-and-firewall-fr_FR.mo +0 -0
- {tags/4.1.4/languages → languages}/all-in-one-wp-security-and-firewall-fr_FR.po +0 -0
- {tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-hu_HU.mo +0 -0
- {tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-hu_HU.po +0 -0
- {tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-it_IT.mo +0 -0
- {tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-it_IT.po +0 -0
- languages/all-in-one-wp-security-and-firewall-nl_NL.mo +0 -0
- languages/all-in-one-wp-security-and-firewall-nl_NL.po +4786 -0
- {tags/4.0.8/languages → languages}/all-in-one-wp-security-and-firewall-pt_BR.mo +0 -0
- {tags/4.0.8/languages → languages}/all-in-one-wp-security-and-firewall-pt_BR.po +0 -0
- {tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-ru_RU.mo +0 -0
- {tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-ru_RU.po +0 -0
- {tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-sv_SE.mo +0 -0
- {tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-sv_SE.po +0 -0
- {tags/4.2.8/languages → languages}/all-in-one-wp-security-and-firewall-zh_CN.mo +0 -0
- {tags/4.2.8/languages → languages}/all-in-one-wp-security-and-firewall-zh_CN.po +0 -0
- {tags/4.3.7.1/trunk/languages → languages}/all-in-one-wp-security-and-firewall.pot +0 -0
- {tags/2.0/lib → languages}/index.html +0 -0
- {tags/2.0/logs → lib}/index.html +0 -0
- {tags/1.0/lib → lib}/whois/LICENSE +0 -0
- {tags/1.0/lib → lib}/whois/handler.template.php +0 -0
- {tags/1.0/lib → lib}/whois/npdata.ser +0 -0
- {tags/1.0/lib → lib}/whois/whois.ae.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.aero.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.ag.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.asia.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.at.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.au.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.be.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.biz.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.br.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.ca.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.cat.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.ch.php +0 -0
- {tags/4.3.1/lib → lib}/whois/whois.cl.php +0 -0
- {tags/4.3.1/lib → lib}/whois/whois.client.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.cn.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.co.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.co.za.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.coop.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.cz.php +0 -0
- {tags/4.3.1/lib → lib}/whois/whois.de.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.edu.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.eu.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.fi.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.fj.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.fm.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.fr.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.afternic.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.alldomains.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.ascio.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.assorted.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.corporatedomains.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.directnic.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.domaindiscover.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.domainpeople.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.dotster.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.dreamhost.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.enom.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.fabulous.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.fastdomain.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.gandi.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.genericb.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.godaddy.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.iana.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.interdomain.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.itsyourdomain.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.joker.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.markmonitor.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.melbourneit.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.moniker.php +0 -0
- {tags/4.3.1/lib → lib}/whois/whois.gtld.namejuice.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.nameking.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.names4ever.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.namevault.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.networksolutions.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.nicco.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.nicline.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.onlinenic.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.opensrs.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.ovh.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.psiusa.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.publicdomainregistry.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.register.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.rrpproxy.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.schlund.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.srsplus.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.tmagnic.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.tvcorp.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.gtld.wildwestdomains.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.hu.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.icon.png +0 -0
- {tags/4.2.8/lib → lib}/whois/whois.idna.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.ie.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.in.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.info.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.int.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.ip.afrinic.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.ip.apnic.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.ip.arin.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.ip.krnic.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.ip.lacnic.php +0 -0
- {tags/4.3.1/lib → lib}/whois/whois.ip.lib.php +0 -0
- {tags/4.3.1/lib → lib}/whois/whois.ip.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.ip.ripe.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.ir.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.is.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.it.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.jp.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.lt.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.lu.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.ly.php +0 -0
- {tags/4.2.8/lib → lib}/whois/whois.main.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.me.php +0 -0
- {tags/4.3.1/lib → lib}/whois/whois.mobi.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.museum.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.mx.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.name.php +0 -0
- {tags/4.3.1/lib → lib}/whois/whois.nl.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.nu.php +0 -0
- {tags/4.3.1/lib → lib}/whois/whois.nz.php +0 -0
- {tags/4.3.1/lib → lib}/whois/whois.org.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.org.za.php +0 -0
- {tags/4.3.1/lib → lib}/whois/whois.parser.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.pl.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.pro.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.pt.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.ro.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.ru.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.rwhois.php +0 -0
- {tags/4.3.1/lib → lib}/whois/whois.sc.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.se.php +0 -0
- {tags/4.3.1/lib → lib}/whois/whois.servers.php +0 -0
- {tags/4.3.1/lib → lib}/whois/whois.si.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.su.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.tel.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.travel.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.uk.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.us.php +0 -0
- {tags/4.3.1/lib → lib}/whois/whois.utils.php +0 -0
- {tags/4.3.1/lib → lib}/whois/whois.ve.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.ws.php +0 -0
- {tags/1.0/lib → lib}/whois/whois.zanet.php +0 -0
- tags/1.0/license.txt → license.txt +0 -0
- {tags/4.2.8/logs → logs}/.htaccess +0 -0
- {tags/2.0/other-includes → logs}/index.html +0 -0
- {tags/1.0/logs → logs}/wp-security-log-cron-job.txt +0 -0
- {tags/1.0/logs → logs}/wp-security-log.txt +0 -0
- {tags/2.1.1/admin → other-includes}/index.html +0 -0
- other-includes/wp-security-rename-login-feature.php +1136 -0
- {tags/4.3.7.1/trunk/other-includes → other-includes}/wp-security-stop-users-enumeration.php +0 -0
- {tags/4.3.7.1/trunk/other-includes → other-includes}/wp-security-unlock-request.php +0 -0
- {tags/1.8/other-includes → other-includes}/wp-security-visitor-lockout-page.php +0 -0
- readme.txt +836 -0
- tags/1.0/admin/general/wp-security-list-table.php +0 -907
- tags/1.0/admin/wp-security-admin-init.php +0 -167
- tags/1.0/admin/wp-security-admin-menu.php +0 -93
- tags/1.0/admin/wp-security-blacklist-menu.php +0 -332
- tags/1.0/admin/wp-security-dashboard-menu.php +0 -304
- tags/1.0/admin/wp-security-database-menu.php +0 -463
- tags/1.0/admin/wp-security-filesystem-menu.php +0 -500
- tags/1.0/admin/wp-security-firewall-menu.php +0 -445
- tags/1.0/admin/wp-security-list-acct-activity.php +0 -159
- tags/1.0/admin/wp-security-list-comment-spammer-ip.php +0 -195
- tags/1.0/admin/wp-security-list-locked-ip.php +0 -194
- tags/1.0/admin/wp-security-list-login-fails.php +0 -158
- tags/1.0/admin/wp-security-settings-menu.php +0 -433
- tags/1.0/admin/wp-security-user-accounts-menu.php +0 -289
- tags/1.0/admin/wp-security-user-login-menu.php +0 -435
- tags/1.0/admin/wp-security-whois-menu.php +0 -126
- tags/1.0/classes/grade-system/wp-security-feature-item-manager.php +0 -388
- tags/1.0/classes/grade-system/wp-security-feature-item.php +0 -40
- tags/1.0/classes/wp-security-backup.php +0 -191
- tags/1.0/classes/wp-security-config.php +0 -54
- tags/1.0/classes/wp-security-configure-settings.php +0 -70
- tags/1.0/classes/wp-security-cronjob-handler.php +0 -27
- tags/1.0/classes/wp-security-debug-logger.php +0 -100
- tags/1.0/classes/wp-security-installer.php +0 -73
- tags/1.0/classes/wp-security-user-login.php +0 -373
- tags/1.0/classes/wp-security-utility-file.php +0 -230
- tags/1.0/classes/wp-security-utility-htaccess.php +0 -783
- tags/1.0/classes/wp-security-utility-ip-address.php +0 -146
- tags/1.0/classes/wp-security-utility.php +0 -105
- tags/1.0/css/wp-security-admin-styles.css +0 -255
- tags/1.0/js/wp-security-admin-script.js +0 -39
- tags/1.0/lib/whois/whois.cl.php +0 -56
- tags/1.0/lib/whois/whois.client.php +0 -595
- tags/1.0/lib/whois/whois.de.php +0 -78
- tags/1.0/lib/whois/whois.gtld.namejuice.php +0 -53
- tags/1.0/lib/whois/whois.idna.php +0 -969
- tags/1.0/lib/whois/whois.ip.lib.php +0 -120
- tags/1.0/lib/whois/whois.ip.php +0 -285
- tags/1.0/lib/whois/whois.main.php +0 -327
- tags/1.0/lib/whois/whois.mobi.php +0 -47
- tags/1.0/lib/whois/whois.nl.php +0 -88
- tags/1.0/lib/whois/whois.nz.php +0 -102
- tags/1.0/lib/whois/whois.org.php +0 -47
- tags/1.0/lib/whois/whois.parser.php +0 -873
- tags/1.0/lib/whois/whois.sc.php +0 -45
- tags/1.0/lib/whois/whois.servers.php +0 -252
- tags/1.0/lib/whois/whois.si.php +0 -55
- tags/1.0/lib/whois/whois.utils.php +0 -152
- tags/1.0/lib/whois/whois.ve.php +0 -75
- tags/1.0/readme.txt +0 -109
- tags/1.0/wp-security-core.php +0 -204
- tags/1.0/wp-security.php +0 -26
- tags/1.1/admin/general/wp-security-list-table.php +0 -907
- tags/1.1/admin/index.php +0 -5
- tags/1.1/admin/wp-security-admin-init.php +0 -167
- tags/1.1/admin/wp-security-admin-menu.php +0 -93
- tags/1.1/admin/wp-security-blacklist-menu.php +0 -64
{tags/4.3.7.1/trunk/admin → admin}/general/wp-security-list-table.php
RENAMED
File without changes
|
{tags/2.0/admin → admin}/index.html
RENAMED
File without changes
|
{tags/1.0/admin → admin}/index.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-admin-init.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-admin-menu.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-blacklist-menu.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-brute-force-menu.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-dashboard-menu.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-database-menu.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-filescan-menu.php
RENAMED
File without changes
|
admin/wp-security-filesystem-menu.php
ADDED
@@ -0,0 +1,505 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if ( !defined( 'ABSPATH' ) ) { exit; } // Prevent direct access to file
|
3 |
+
class AIOWPSecurity_Filesystem_Menu extends AIOWPSecurity_Admin_Menu
|
4 |
+
{
|
5 |
+
var $menu_page_slug = AIOWPSEC_FILESYSTEM_MENU_SLUG;
|
6 |
+
|
7 |
+
/* Specify all the tabs of this menu in the following array */
|
8 |
+
var $menu_tabs;
|
9 |
+
|
10 |
+
var $menu_tabs_handler = array(
|
11 |
+
'tab1' => 'render_tab1',
|
12 |
+
'tab2' => 'render_tab2',
|
13 |
+
'tab3' => 'render_tab3',
|
14 |
+
'tab4' => 'render_tab4',
|
15 |
+
);
|
16 |
+
|
17 |
+
function __construct()
|
18 |
+
{
|
19 |
+
$this->render_menu_page();
|
20 |
+
add_action( 'admin_footer', array( &$this, 'filesystem_menu_footer_code' ) );
|
21 |
+
}
|
22 |
+
|
23 |
+
function set_menu_tabs()
|
24 |
+
{
|
25 |
+
$this->menu_tabs = array(
|
26 |
+
'tab1' => __('File Permissions','all-in-one-wp-security-and-firewall'),
|
27 |
+
'tab2' => __('PHP File Editing','all-in-one-wp-security-and-firewall'),
|
28 |
+
'tab3' => __('WP File Access','all-in-one-wp-security-and-firewall'),
|
29 |
+
'tab4' => __('Host System Logs','all-in-one-wp-security-and-firewall'),
|
30 |
+
);
|
31 |
+
}
|
32 |
+
|
33 |
+
function get_current_tab()
|
34 |
+
{
|
35 |
+
$tab_keys = array_keys($this->menu_tabs);
|
36 |
+
$tab = isset( $_GET['tab'] ) ? sanitize_text_field($_GET['tab']) : $tab_keys[0];
|
37 |
+
return $tab;
|
38 |
+
}
|
39 |
+
|
40 |
+
/*
|
41 |
+
* Renders our tabs of this menu as nav items
|
42 |
+
*/
|
43 |
+
function render_menu_tabs()
|
44 |
+
{
|
45 |
+
$current_tab = $this->get_current_tab();
|
46 |
+
|
47 |
+
echo '<h2 class="nav-tab-wrapper">';
|
48 |
+
foreach ( $this->menu_tabs as $tab_key => $tab_caption )
|
49 |
+
{
|
50 |
+
$active = $current_tab == $tab_key ? 'nav-tab-active' : '';
|
51 |
+
echo '<a class="nav-tab ' . $active . '" href="?page=' . $this->menu_page_slug . '&tab=' . $tab_key . '">' . $tab_caption . '</a>';
|
52 |
+
}
|
53 |
+
echo '</h2>';
|
54 |
+
}
|
55 |
+
|
56 |
+
/*
|
57 |
+
* The menu rendering goes here
|
58 |
+
*/
|
59 |
+
function render_menu_page()
|
60 |
+
{
|
61 |
+
echo '<div class="wrap">';
|
62 |
+
echo '<h2>'.__('Filesystem Security','all-in-one-wp-security-and-firewall').'</h2>';//Interface title
|
63 |
+
$this->set_menu_tabs();
|
64 |
+
$tab = $this->get_current_tab();
|
65 |
+
$this->render_menu_tabs();
|
66 |
+
?>
|
67 |
+
<div id="poststuff"><div id="post-body">
|
68 |
+
<?php
|
69 |
+
//$tab_keys = array_keys($this->menu_tabs);
|
70 |
+
call_user_func(array(&$this, $this->menu_tabs_handler[$tab]));
|
71 |
+
?>
|
72 |
+
</div></div>
|
73 |
+
</div><!-- end of wrap -->
|
74 |
+
<?php
|
75 |
+
}
|
76 |
+
|
77 |
+
function render_tab1()
|
78 |
+
{
|
79 |
+
//if this is the case there is no need to display a "fix permissions" button
|
80 |
+
global $wpdb, $aio_wp_security;
|
81 |
+
if (isset($_POST['aiowps_fix_permissions']))
|
82 |
+
{
|
83 |
+
$nonce=$_REQUEST['_wpnonce'];
|
84 |
+
if (!wp_verify_nonce($nonce, 'aiowpsec-fix-permissions-nonce'))
|
85 |
+
{
|
86 |
+
$aio_wp_security->debug_logger->log_debug("Nonce check failed for manual DB backup operation!",4);
|
87 |
+
die(__('Nonce check failed for manual DB backup operation!','all-in-one-wp-security-and-firewall'));
|
88 |
+
}
|
89 |
+
if (isset($_POST['aiowps_permission_chg_file']))
|
90 |
+
{
|
91 |
+
$folder_or_file = $_POST['aiowps_permission_chg_file'];
|
92 |
+
$rec_perm_oct_string = $_POST['aiowps_recommended_permissions']; //Convert the octal string to dec so the chmod func will accept it
|
93 |
+
$rec_perm_dec = octdec($rec_perm_oct_string); //Convert the octal string to dec so the chmod func will accept it
|
94 |
+
$perm_result = @chmod($_POST['aiowps_permission_chg_file'], $rec_perm_dec);
|
95 |
+
if ($perm_result === true)
|
96 |
+
{
|
97 |
+
$msg = sprintf( __('The permissions for %s were succesfully changed to %s', 'all-in-one-wp-security-and-firewall'), $folder_or_file, $rec_perm_oct_string);
|
98 |
+
$this->show_msg_updated($msg);
|
99 |
+
}else if($perm_result === false)
|
100 |
+
{
|
101 |
+
$msg = sprintf( __('Unable to change permissions for %s!', 'all-in-one-wp-security-and-firewall'), $folder_or_file);
|
102 |
+
$this->show_msg_error($msg);
|
103 |
+
}
|
104 |
+
}
|
105 |
+
}
|
106 |
+
?>
|
107 |
+
<h2><?php _e('File Permissions Scan', 'all-in-one-wp-security-and-firewall')?></h2>
|
108 |
+
<div class="aio_blue_box">
|
109 |
+
<?php
|
110 |
+
echo '<p>'.__('Your WordPress file and folder permission settings govern the accessability and read/write privileges of the files and folders which make up your WP installation.', 'all-in-one-wp-security-and-firewall').'
|
111 |
+
<br />'.__('Your WP installation already comes with reasonably secure file permission settings for the filesystem.', 'all-in-one-wp-security-and-firewall').'
|
112 |
+
<br />'.__('However, sometimes people or other plugins modify the various permission settings of certain core WP folders or files such that they end up making their site less secure because they chose the wrong permission values.', 'all-in-one-wp-security-and-firewall').'
|
113 |
+
<br />'.__('This feature will scan the critical WP core folders and files and will highlight any permission settings which are insecure.', 'all-in-one-wp-security-and-firewall').'
|
114 |
+
</p>';
|
115 |
+
?>
|
116 |
+
</div>
|
117 |
+
<?php
|
118 |
+
$detected_os = strtoupper(PHP_OS);
|
119 |
+
if(strpos($detected_os, "WIN") !== false && $detected_os != "DARWIN"){
|
120 |
+
echo '<div class="aio_yellow_box">';
|
121 |
+
echo '<p>'.__('This plugin has detected that your site is running on a Windows server.', 'all-in-one-wp-security-and-firewall').'
|
122 |
+
<br />'.__('This feature is not applicable for Windows server installations.', 'all-in-one-wp-security-and-firewall').'
|
123 |
+
</p>';
|
124 |
+
echo '</div>';
|
125 |
+
}else{
|
126 |
+
?>
|
127 |
+
<div class="postbox">
|
128 |
+
<h3 class="hndle"><label for="title"><?php _e('WP Directory and File Permissions Scan Results', 'all-in-one-wp-security-and-firewall'); ?></label></h3>
|
129 |
+
<div class="inside">
|
130 |
+
<?php
|
131 |
+
//Display security info badge
|
132 |
+
global $aiowps_feature_mgr;
|
133 |
+
$aiowps_feature_mgr->output_feature_details_badge("filesystem-file-permissions");
|
134 |
+
?>
|
135 |
+
<form action="" method="POST">
|
136 |
+
<?php wp_nonce_field('aiowpsec-fix-permissions-nonce'); ?>
|
137 |
+
<table class="widefat file_permission_table">
|
138 |
+
<thead>
|
139 |
+
<tr>
|
140 |
+
<th><?php _e('Name', 'all-in-one-wp-security-and-firewall') ?></th>
|
141 |
+
<th><?php _e('File/Folder', 'all-in-one-wp-security-and-firewall') ?></th>
|
142 |
+
<th><?php _e('Current Permissions', 'all-in-one-wp-security-and-firewall') ?></th>
|
143 |
+
<th><?php _e('Recommended Permissions', 'all-in-one-wp-security-and-firewall') ?></th>
|
144 |
+
<th><?php _e('Recommended Action', 'all-in-one-wp-security-and-firewall') ?></th>
|
145 |
+
</tr>
|
146 |
+
</thead>
|
147 |
+
<tbody>
|
148 |
+
<?php
|
149 |
+
$util = new AIOWPSecurity_Utility_File;
|
150 |
+
$files_dirs_to_check = $util->files_and_dirs_to_check;
|
151 |
+
foreach ($files_dirs_to_check as $file_or_dir)
|
152 |
+
{
|
153 |
+
$this->show_wp_filesystem_permission_status($file_or_dir['name'],$file_or_dir['path'],$file_or_dir['permissions']);
|
154 |
+
}
|
155 |
+
?>
|
156 |
+
</tbody>
|
157 |
+
<tfoot>
|
158 |
+
<tr>
|
159 |
+
<th><?php _e('Name', 'all-in-one-wp-security-and-firewall') ?></th>
|
160 |
+
<th><?php _e('File/Folder', 'all-in-one-wp-security-and-firewall') ?></th>
|
161 |
+
<th><?php _e('Current Permissions', 'all-in-one-wp-security-and-firewall') ?></th>
|
162 |
+
<th><?php _e('Recommended Permissions', 'all-in-one-wp-security-and-firewall') ?></th>
|
163 |
+
<th><?php _e('Recommended Action', 'all-in-one-wp-security-and-firewall') ?></th>
|
164 |
+
</tfoot>
|
165 |
+
</table>
|
166 |
+
</form>
|
167 |
+
</div></div>
|
168 |
+
<?php
|
169 |
+
}
|
170 |
+
}
|
171 |
+
|
172 |
+
function render_tab2()
|
173 |
+
{
|
174 |
+
global $aio_wp_security;
|
175 |
+
global $aiowps_feature_mgr;
|
176 |
+
|
177 |
+
if(isset($_POST['aiowps_disable_file_edit']))//Do form submission tasks
|
178 |
+
{
|
179 |
+
$nonce=$_REQUEST['_wpnonce'];
|
180 |
+
if (!wp_verify_nonce($nonce, 'aiowpsec-disable-file-edit-nonce'))
|
181 |
+
{
|
182 |
+
$aio_wp_security->debug_logger->log_debug("Nonce check failed on disable PHP file edit options save!",4);
|
183 |
+
die("Nonce check failed on disable PHP file edit options save!");
|
184 |
+
}
|
185 |
+
|
186 |
+
if(isset($_POST['aiowps_disable_file_editing']))
|
187 |
+
{
|
188 |
+
|
189 |
+
$res = AIOWPSecurity_Utility::disable_file_edits();//$this->disable_file_edits();
|
190 |
+
} else
|
191 |
+
{
|
192 |
+
$res = AIOWPSecurity_Utility::enable_file_edits();//$this->enable_file_edits();
|
193 |
+
}
|
194 |
+
if ($res)
|
195 |
+
{
|
196 |
+
//Save settings if no errors
|
197 |
+
$aio_wp_security->configs->set_value('aiowps_disable_file_editing',isset($_POST["aiowps_disable_file_editing"])?'1':'');
|
198 |
+
$aio_wp_security->configs->save_config();
|
199 |
+
|
200 |
+
//Recalculate points after the feature status/options have been altered
|
201 |
+
$aiowps_feature_mgr->check_feature_status_and_recalculate_points();
|
202 |
+
$this->show_msg_updated(__('Your PHP file editing settings were saved successfully.', 'all-in-one-wp-security-and-firewall'));
|
203 |
+
}
|
204 |
+
else
|
205 |
+
{
|
206 |
+
$this->show_msg_error(__('Operation failed! Unable to modify or make a backup of wp-config.php file!', 'all-in-one-wp-security-and-firewall'));
|
207 |
+
}
|
208 |
+
//$this->show_msg_settings_updated();
|
209 |
+
|
210 |
+
}
|
211 |
+
else {
|
212 |
+
// Make sure the setting value is up-to-date with current value in WP config
|
213 |
+
$aio_wp_security->configs->set_value('aiowps_disable_file_editing', defined('DISALLOW_FILE_EDIT') && DISALLOW_FILE_EDIT ? '1' : '');
|
214 |
+
$aio_wp_security->configs->save_config();
|
215 |
+
//Recalculate points after the feature status/options have been altered
|
216 |
+
$aiowps_feature_mgr->check_feature_status_and_recalculate_points();
|
217 |
+
}
|
218 |
+
?>
|
219 |
+
<h2><?php _e('File Editing', 'all-in-one-wp-security-and-firewall')?></h2>
|
220 |
+
<div class="aio_blue_box">
|
221 |
+
<?php
|
222 |
+
echo '<p>'.__('The Wordpress Dashboard by default allows administrators to edit PHP files, such as plugin and theme files.', 'all-in-one-wp-security-and-firewall').'
|
223 |
+
<br />'.__('This is often the first tool an attacker will use if able to login, since it allows code execution.', 'all-in-one-wp-security-and-firewall').'
|
224 |
+
<br />'.__('This feature will disable the ability for people to edit PHP files via the dashboard.', 'all-in-one-wp-security-and-firewall').'
|
225 |
+
</p>';
|
226 |
+
?>
|
227 |
+
</div>
|
228 |
+
|
229 |
+
<div class="postbox">
|
230 |
+
<h3 class="hndle"><label for="title"><?php _e('Disable PHP File Editing', 'all-in-one-wp-security-and-firewall'); ?></label></h3>
|
231 |
+
<div class="inside">
|
232 |
+
<?php
|
233 |
+
//Display security info badge
|
234 |
+
global $aiowps_feature_mgr;
|
235 |
+
$aiowps_feature_mgr->output_feature_details_badge("filesystem-file-editing");
|
236 |
+
?>
|
237 |
+
|
238 |
+
<form action="" method="POST">
|
239 |
+
<?php wp_nonce_field('aiowpsec-disable-file-edit-nonce'); ?>
|
240 |
+
<table class="form-table">
|
241 |
+
<tr valign="top">
|
242 |
+
<th scope="row"><?php _e('Disable Ability To Edit PHP Files', 'all-in-one-wp-security-and-firewall')?>:</th>
|
243 |
+
<td>
|
244 |
+
<input name="aiowps_disable_file_editing" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_disable_file_editing')=='1') echo ' checked="checked"'; ?> value="1"/>
|
245 |
+
<span class="description"><?php _e('Check this if you want to remove the ability for people to edit PHP files via the WP dashboard', 'all-in-one-wp-security-and-firewall'); ?></span>
|
246 |
+
</td>
|
247 |
+
</tr>
|
248 |
+
</table>
|
249 |
+
<input type="submit" name="aiowps_disable_file_edit" value="<?php _e('Save Settings', 'all-in-one-wp-security-and-firewall')?>" class="button-primary" />
|
250 |
+
</form>
|
251 |
+
</div></div>
|
252 |
+
<?php
|
253 |
+
}
|
254 |
+
|
255 |
+
function render_tab3()
|
256 |
+
{
|
257 |
+
global $aio_wp_security;
|
258 |
+
global $aiowps_feature_mgr;
|
259 |
+
if(isset($_POST['aiowps_save_wp_file_access_settings']))//Do form submission tasks
|
260 |
+
{
|
261 |
+
$nonce=$_REQUEST['_wpnonce'];
|
262 |
+
if (!wp_verify_nonce($nonce, 'aiowpsec-prevent-default-wp-file-access-nonce'))
|
263 |
+
{
|
264 |
+
$aio_wp_security->debug_logger->log_debug("Nonce check failed on enable basic firewall settings!",4);
|
265 |
+
die("Nonce check failed on enable basic firewall settings!");
|
266 |
+
}
|
267 |
+
|
268 |
+
//Save settings
|
269 |
+
if(isset($_POST['aiowps_prevent_default_wp_file_access']))
|
270 |
+
{
|
271 |
+
$aio_wp_security->configs->set_value('aiowps_prevent_default_wp_file_access','1');
|
272 |
+
}
|
273 |
+
else
|
274 |
+
{
|
275 |
+
$aio_wp_security->configs->set_value('aiowps_prevent_default_wp_file_access','');
|
276 |
+
}
|
277 |
+
|
278 |
+
//Commit the config settings
|
279 |
+
$aio_wp_security->configs->save_config();
|
280 |
+
|
281 |
+
//Recalculate points after the feature status/options have been altered
|
282 |
+
$aiowps_feature_mgr->check_feature_status_and_recalculate_points();
|
283 |
+
|
284 |
+
//Now let's write the applicable rules to the .htaccess file
|
285 |
+
$res = AIOWPSecurity_Utility_Htaccess::write_to_htaccess();
|
286 |
+
|
287 |
+
if ($res)
|
288 |
+
{
|
289 |
+
$this->show_msg_updated(__('You have successfully saved the Prevent Access to Default WP Files configuration.', 'all-in-one-wp-security-and-firewall'));
|
290 |
+
}
|
291 |
+
else
|
292 |
+
{
|
293 |
+
$this->show_msg_error(__('Could not write to the .htaccess file. Please check the file permissions.', 'all-in-one-wp-security-and-firewall'));
|
294 |
+
}
|
295 |
+
}
|
296 |
+
|
297 |
+
?>
|
298 |
+
<h2><?php _e('WordPress Files', 'all-in-one-wp-security-and-firewall')?></h2>
|
299 |
+
<div class="aio_blue_box">
|
300 |
+
<?php
|
301 |
+
$info_msg = sprintf( __('This feature allows you to prevent access to files such as %s, %s and %s which are delivered with all WP installations.', 'all-in-one-wp-security-and-firewall'), 'readme.html', 'license.txt', 'wp-config-sample.php');
|
302 |
+
echo '<p>'.$info_msg.'</p>'.'<p>'.__('By preventing access to these files you are hiding some key pieces of information (such as WordPress version info) from potential hackers.', 'all-in-one-wp-security-and-firewall').'</p>';
|
303 |
+
?>
|
304 |
+
</div>
|
305 |
+
|
306 |
+
<div class="postbox">
|
307 |
+
<h3 class="hndle"><label for="title"><?php _e('Prevent Access to Default WP Files', 'all-in-one-wp-security-and-firewall'); ?></label></h3>
|
308 |
+
<div class="inside">
|
309 |
+
<?php
|
310 |
+
//Display security info badge
|
311 |
+
global $aiowps_feature_mgr;
|
312 |
+
$aiowps_feature_mgr->output_feature_details_badge("block-wp-files-access");
|
313 |
+
?>
|
314 |
+
<form action="" method="POST">
|
315 |
+
<?php wp_nonce_field('aiowpsec-prevent-default-wp-file-access-nonce'); ?>
|
316 |
+
<table class="form-table">
|
317 |
+
<tr valign="top">
|
318 |
+
<th scope="row"><?php _e('Prevent Access to WP Default Install Files', 'all-in-one-wp-security-and-firewall')?>:</th>
|
319 |
+
<td>
|
320 |
+
<input name="aiowps_prevent_default_wp_file_access" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_prevent_default_wp_file_access')=='1') echo ' checked="checked"'; ?> value="1"/>
|
321 |
+
<span class="description"><?php _e('Check this if you want to prevent access to readme.html, license.txt and wp-config-sample.php.', 'all-in-one-wp-security-and-firewall'); ?></span>
|
322 |
+
</td>
|
323 |
+
</tr>
|
324 |
+
</table>
|
325 |
+
<input type="submit" name="aiowps_save_wp_file_access_settings" value="<?php _e('Save Setting', 'all-in-one-wp-security-and-firewall')?>" class="button-primary" />
|
326 |
+
</form>
|
327 |
+
</div></div>
|
328 |
+
<?php
|
329 |
+
}
|
330 |
+
|
331 |
+
function render_tab4()
|
332 |
+
{
|
333 |
+
global $aio_wp_security;
|
334 |
+
|
335 |
+
if (isset($_POST['aiowps_system_log_file'])){
|
336 |
+
if ($_POST['aiowps_system_log_file'] != NULL){
|
337 |
+
$sys_log_file = esc_html($_POST['aiowps_system_log_file']);
|
338 |
+
$aio_wp_security->configs->set_value('aiowps_system_log_file',$sys_log_file);
|
339 |
+
}else{
|
340 |
+
$sys_log_file = 'error_log';
|
341 |
+
$aio_wp_security->configs->set_value('aiowps_system_log_file',$sys_log_file);
|
342 |
+
}
|
343 |
+
$aio_wp_security->configs->save_config();
|
344 |
+
}else{
|
345 |
+
$sys_log_file = $aio_wp_security->configs->get_value('aiowps_system_log_file');
|
346 |
+
}
|
347 |
+
|
348 |
+
?>
|
349 |
+
<h2><?php _e('System Logs', 'all-in-one-wp-security-and-firewall')?></h2>
|
350 |
+
<div class="aio_blue_box">
|
351 |
+
<?php
|
352 |
+
echo '<p>'.__('Sometimes your hosting platform will produce error or warning logs in a file called "error_log".', 'all-in-one-wp-security-and-firewall').'
|
353 |
+
<br />'.__('Depending on the nature and cause of the error or warning, your hosting server can create multiple instances of this file in numerous directory locations of your WordPress installation.', 'all-in-one-wp-security-and-firewall').'
|
354 |
+
<br />'.__('By occassionally viewing the contents of these logs files you can keep informed of any underlying problems on your system which you might need to address.', 'all-in-one-wp-security-and-firewall').'
|
355 |
+
</p>';
|
356 |
+
?>
|
357 |
+
</div>
|
358 |
+
|
359 |
+
<div class="postbox">
|
360 |
+
<h3 class="hndle"><label for="title"><?php _e('View System Logs', 'all-in-one-wp-security-and-firewall'); ?></label></h3>
|
361 |
+
<div class="inside">
|
362 |
+
<p>Please click the button below to view the latest system logs:</p>
|
363 |
+
<form action="" method="POST">
|
364 |
+
<?php wp_nonce_field('aiowpsec-view-system-logs-nonce'); ?>
|
365 |
+
<div><?php _e('Enter System Log File Name', 'all-in-one-wp-security-and-firewall')?>:
|
366 |
+
<input type="text" size="25" name="aiowps_system_log_file" value="<?php echo esc_html($sys_log_file); ?>" />
|
367 |
+
<span class="description"><?php _e('Enter your system log file name. (Defaults to error_log)', 'all-in-one-wp-security-and-firewall'); ?></span>
|
368 |
+
</div>
|
369 |
+
<div class="aio_spacer_15"></div>
|
370 |
+
<input type="submit" name="aiowps_search_error_files" value="<?php _e('View Latest System Logs', 'all-in-one-wp-security-and-firewall'); ?>" class="button-primary search-error-files" />
|
371 |
+
<span class="aiowps_loading_1">
|
372 |
+
<img src="<?php echo AIO_WP_SECURITY_URL.'/images/loading.gif'; ?>" alt="<?php __('Loading...', 'all-in-one-wp-security-and-firewall'); ?>" />
|
373 |
+
</span>
|
374 |
+
</form>
|
375 |
+
</div></div>
|
376 |
+
<?php
|
377 |
+
if (isset($_POST['aiowps_search_error_files']))
|
378 |
+
{
|
379 |
+
$nonce=$_REQUEST['_wpnonce'];
|
380 |
+
if (!wp_verify_nonce($nonce, 'aiowpsec-view-system-logs-nonce'))
|
381 |
+
{
|
382 |
+
$aio_wp_security->debug_logger->log_debug("Nonce check failed on view system log operation!",4);
|
383 |
+
die("Nonce check failed on view system log operation!");
|
384 |
+
}
|
385 |
+
|
386 |
+
$logResults = AIOWPSecurity_Utility_File::recursive_file_search($sys_log_file, 0, ABSPATH);
|
387 |
+
if (empty($logResults) || $logResults == NULL || $logResults == '' || $logResults === FALSE)
|
388 |
+
{
|
389 |
+
$this->show_msg_updated(__('No system logs were found!', 'all-in-one-wp-security-and-firewall'));
|
390 |
+
}
|
391 |
+
else
|
392 |
+
{
|
393 |
+
foreach($logResults as $file)
|
394 |
+
{
|
395 |
+
$this->display_system_logs_in_table($file);
|
396 |
+
}
|
397 |
+
}
|
398 |
+
}
|
399 |
+
}
|
400 |
+
|
401 |
+
/*
|
402 |
+
* Scans WP key core files and directory permissions and populates a wp wide_fat table
|
403 |
+
* Displays a red background entry with a "Fix" button for permissions which are "777"
|
404 |
+
* Displays a yellow background entry with a "Fix" button for permissions which are less secure than the recommended
|
405 |
+
* Displays a green entry for permissions which are as secure or better than the recommended
|
406 |
+
*/
|
407 |
+
function show_wp_filesystem_permission_status($name,$path,$recommended)
|
408 |
+
{
|
409 |
+
$fix = false;
|
410 |
+
$configmod = AIOWPSecurity_Utility_File::get_file_permission($path);
|
411 |
+
if ($configmod == "0777"){
|
412 |
+
$trclass = "aio_table_row_red"; //Display a red background if permissions are set as least secure ("777")
|
413 |
+
$fix = true;
|
414 |
+
}
|
415 |
+
else if($configmod != $recommended)
|
416 |
+
{
|
417 |
+
//$res = $this->is_file_permission_secure($recommended, $configmod);
|
418 |
+
$res = AIOWPSecurity_Utility_File::is_file_permission_secure($recommended, $configmod);
|
419 |
+
if ($res)
|
420 |
+
{
|
421 |
+
$trclass = "aio_table_row_green"; //If the current permissions are even tighter than recommended then display a green row
|
422 |
+
$fix = true;
|
423 |
+
}
|
424 |
+
else
|
425 |
+
{
|
426 |
+
$trclass = "aio_table_row_yellow"; //Display a yellow background if permissions are set to something different than recommended
|
427 |
+
$fix = true;
|
428 |
+
}
|
429 |
+
}
|
430 |
+
else
|
431 |
+
{
|
432 |
+
$trclass = "aio_table_row_green";
|
433 |
+
}
|
434 |
+
echo "<tr class=".$trclass.">";
|
435 |
+
echo '<td>' . $name . "</td>";
|
436 |
+
echo '<td>'. $path ."</td>";
|
437 |
+
echo '<td>' . $configmod . '</td>';
|
438 |
+
echo '<td>' . $recommended . '</td>';
|
439 |
+
if ($fix)
|
440 |
+
{
|
441 |
+
echo '<td>
|
442 |
+
<input type="submit" name="aiowps_fix_permissions" value="'.__('Set Recommended Permissions','all-in-one-wp-security-and-firewall').'" class="button-secondary" />
|
443 |
+
<input type="hidden" name="aiowps_permission_chg_file" value="'.$path.'"/>
|
444 |
+
<input type="hidden" name="aiowps_recommended_permissions" value="'.$recommended.'"/>
|
445 |
+
</td>';
|
446 |
+
} else
|
447 |
+
{
|
448 |
+
echo '<td>'.__('No Action Required', 'all-in-one-wp-security-and-firewall').'</td>';
|
449 |
+
}
|
450 |
+
echo "</tr>";
|
451 |
+
}
|
452 |
+
|
453 |
+
|
454 |
+
|
455 |
+
function filesystem_menu_footer_code()
|
456 |
+
{
|
457 |
+
?>
|
458 |
+
<script type="text/javascript">
|
459 |
+
/* <![CDATA[ */
|
460 |
+
jQuery(document).ready(function($) {
|
461 |
+
loading_span = $('.aiowps_loading_1');
|
462 |
+
loading_span.hide(); //hide the spinner gif after page has successfully loaded
|
463 |
+
$('.search-error-files').on("click",function(){
|
464 |
+
loading_span.show();
|
465 |
+
});
|
466 |
+
});
|
467 |
+
/* ]]> */
|
468 |
+
</script>
|
469 |
+
<?php
|
470 |
+
}
|
471 |
+
|
472 |
+
function display_system_logs_in_table($filepath)
|
473 |
+
{
|
474 |
+
global $aio_wp_security;
|
475 |
+
//Get contents of the error_log file
|
476 |
+
$error_file_contents = file($filepath);
|
477 |
+
if (!$error_file_contents)
|
478 |
+
{
|
479 |
+
//TODO - error could not read file, display notice???
|
480 |
+
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_Filesystem_Menu - Unable to read file: ".$filepath,4);
|
481 |
+
|
482 |
+
}
|
483 |
+
$last_50_entries = array_slice($error_file_contents, -50); //extract the last 50 entries
|
484 |
+
?>
|
485 |
+
<table class="widefat file_permission_table">
|
486 |
+
<thead>
|
487 |
+
<tr>
|
488 |
+
<th><?php echo(sprintf(__('Showing latest entries of error_log file: %s', 'all-in-one-wp-security-and-firewall'),'<strong>'.$filepath.'</strong>')); ?></th>
|
489 |
+
</tr>
|
490 |
+
</thead>
|
491 |
+
<tbody>
|
492 |
+
<?php
|
493 |
+
foreach ($last_50_entries as $entry)
|
494 |
+
{
|
495 |
+
echo "<tr>";
|
496 |
+
echo '<td>' . $entry . "</td>";
|
497 |
+
echo "</tr>";
|
498 |
+
}
|
499 |
+
?>
|
500 |
+
</tbody>
|
501 |
+
</table>
|
502 |
+
<?php
|
503 |
+
|
504 |
+
}
|
505 |
+
} //end class
|
{tags/4.3.1/admin → admin}/wp-security-firewall-menu.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-list-404.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-list-acct-activity.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-list-comment-spammer-ip.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-list-locked-ip.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-list-logged-in-users.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-list-login-fails.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-list-permanent-blocked-ip.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-list-registered-users.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-maintenance-menu.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-misc-options-menu.php
RENAMED
File without changes
|
{trunk/admin → admin}/wp-security-settings-menu.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-spam-menu.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-user-accounts-menu.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-user-login-menu.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-user-registration-menu.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/admin → admin}/wp-security-whois-menu.php
RENAMED
File without changes
|
assets/banner-1544x500.png
DELETED
Binary file
|
assets/banner-772x250.png
DELETED
Binary file
|
assets/icon-128x128.png
DELETED
Binary file
|
{tags/2.0/backups → backups}/index.html
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/classes → classes}/grade-system/wp-security-feature-item-manager.php
RENAMED
File without changes
|
{tags/4.0.1/classes → classes}/grade-system/wp-security-feature-item.php
RENAMED
File without changes
|
{tags/2.0/classes → classes}/index.html
RENAMED
File without changes
|
{tags/1.0/classes → classes}/index.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/classes → classes}/wp-security-backup.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/classes → classes}/wp-security-blocking.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/classes → classes}/wp-security-bot-protection.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/classes → classes}/wp-security-captcha.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/classes → classes}/wp-security-config.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/classes → classes}/wp-security-configure-settings.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/classes → classes}/wp-security-cronjob-handler.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/classes → classes}/wp-security-deactivation-tasks.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/classes → classes}/wp-security-debug-logger.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/classes → classes}/wp-security-file-scan.php
RENAMED
File without changes
|
classes/wp-security-general-init-tasks.php
ADDED
@@ -0,0 +1,616 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if(!defined('ABSPATH')){
|
3 |
+
exit;//Exit if accessed directly
|
4 |
+
}
|
5 |
+
|
6 |
+
class AIOWPSecurity_General_Init_Tasks
|
7 |
+
{
|
8 |
+
function __construct(){
|
9 |
+
global $aio_wp_security;
|
10 |
+
|
11 |
+
if ($aio_wp_security->configs->get_value('aiowps_disable_xmlrpc_pingback_methods') == '1') {
|
12 |
+
add_filter( 'xmlrpc_methods', array(&$this, 'aiowps_disable_xmlrpc_pingback_methods') );
|
13 |
+
add_filter( 'wp_headers', array(&$this, 'aiowps_remove_x_pingback_header') );
|
14 |
+
}
|
15 |
+
|
16 |
+
add_action( 'permalink_structure_changed', array(&$this, 'refresh_firewall_rules' ), 10, 2);
|
17 |
+
|
18 |
+
if ($aio_wp_security->configs->get_value('aiowps_enable_autoblock_spam_ip') == '1') {
|
19 |
+
AIOWPSecurity_Blocking::check_visitor_ip_and_perform_blocking();
|
20 |
+
|
21 |
+
//add_action( 'spammed_comment', array(&$this, 'process_spammed_comment' )); //this hook gets fired when admin marks comment as spam
|
22 |
+
//add_action( 'akismet_submit_spam_comment', array(&$this, 'process_akismet_submit_spam_comment' ), 10, 2); //this hook gets fired when akismet marks a comment as spam
|
23 |
+
add_action( 'comment_post', array(&$this, 'spam_detect_process_comment_post' ), 10, 2); //this hook gets fired just after comment is saved to DB
|
24 |
+
add_action( 'transition_comment_status', array(&$this, 'process_transition_comment_status' ), 10, 3); //this hook gets fired when a comment's status changes
|
25 |
+
}
|
26 |
+
|
27 |
+
if ($aio_wp_security->configs->get_value('aiowps_enable_rename_login_page') == '1') {
|
28 |
+
add_action( 'widgets_init', array(&$this, 'remove_standard_wp_meta_widget' ));
|
29 |
+
add_filter( 'retrieve_password_message', array(&$this, 'decode_reset_pw_msg'), 10, 4); //Fix for non decoded html entities in password reset link
|
30 |
+
}
|
31 |
+
|
32 |
+
add_action('admin_notices', array(&$this,'reapply_htaccess_rules_notice'));
|
33 |
+
if(isset($_REQUEST['aiowps_reapply_htaccess'])){
|
34 |
+
if(strip_tags($_REQUEST['aiowps_reapply_htaccess']) == 1){
|
35 |
+
include_once ('wp-security-installer.php');
|
36 |
+
if(AIOWPSecurity_Installer::reactivation_tasks()){
|
37 |
+
$aio_wp_security->debug_logger->log_debug("The AIOWPS .htaccess rules were successfully re-inserted!");
|
38 |
+
$_SESSION['reapply_htaccess_rules_action_result'] = '1';//Success indicator.
|
39 |
+
//Can't echo to the screen here. It will create an header already sent error.
|
40 |
+
}else{
|
41 |
+
$aio_wp_security->debug_logger->log_debug("AIOWPS encountered an error when trying to write to your .htaccess file. Please check the logs.", 5);
|
42 |
+
$_SESSION['reapply_htaccess_rules_action_result'] = '2';//fail indicator.
|
43 |
+
//Can't echo to the screen here. It will create an header already sent error.
|
44 |
+
}
|
45 |
+
|
46 |
+
}elseif(strip_tags($_REQUEST['aiowps_reapply_htaccess']) == 2){
|
47 |
+
//Don't re-write the rules and just delete the temp config item
|
48 |
+
delete_option('aiowps_temp_configs');
|
49 |
+
}
|
50 |
+
}
|
51 |
+
|
52 |
+
if($aio_wp_security->configs->get_value('aiowps_prevent_site_display_inside_frame') == '1'){
|
53 |
+
send_frame_options_header(); //send X-Frame-Options: SAMEORIGIN in HTTP header
|
54 |
+
}
|
55 |
+
|
56 |
+
if($aio_wp_security->configs->get_value('aiowps_remove_wp_generator_meta_info') == '1'){
|
57 |
+
add_filter('the_generator', array(&$this,'remove_wp_generator_meta_info'));
|
58 |
+
add_filter('style_loader_src', array(&$this,'remove_wp_css_js_meta_info'));
|
59 |
+
add_filter('script_loader_src', array(&$this,'remove_wp_css_js_meta_info'));
|
60 |
+
}
|
61 |
+
|
62 |
+
//For the cookie based brute force prevention feature
|
63 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_brute_force_attack_prevention') == 1){
|
64 |
+
$bfcf_secret_word = $aio_wp_security->configs->get_value('aiowps_brute_force_secret_word');
|
65 |
+
if(isset($_GET[$bfcf_secret_word])){
|
66 |
+
//If URL contains secret word in query param then set cookie and then redirect to the login page
|
67 |
+
AIOWPSecurity_Utility::set_cookie_value($bfcf_secret_word, "1");
|
68 |
+
AIOWPSecurity_Utility::redirect_to_url(AIOWPSEC_WP_URL."/wp-admin");
|
69 |
+
}
|
70 |
+
}
|
71 |
+
|
72 |
+
//Stop users enumeration feature
|
73 |
+
if( $aio_wp_security->configs->get_value('aiowps_prevent_users_enumeration') == 1) {
|
74 |
+
include_once(AIO_WP_SECURITY_PATH.'/other-includes/wp-security-stop-users-enumeration.php');
|
75 |
+
}
|
76 |
+
|
77 |
+
//REST API security
|
78 |
+
if( $aio_wp_security->configs->get_value('aiowps_disallow_unauthorized_rest_requests') == 1) {
|
79 |
+
add_action('rest_api_init', array(&$this, 'check_rest_api_requests'), 10 ,1);
|
80 |
+
}
|
81 |
+
|
82 |
+
//For user unlock request feature
|
83 |
+
if(isset($_POST['aiowps_unlock_request']) || isset($_POST['aiowps_wp_submit_unlock_request'])){
|
84 |
+
nocache_headers();
|
85 |
+
remove_action('wp_head','head_addons',7);
|
86 |
+
include_once(AIO_WP_SECURITY_PATH.'/other-includes/wp-security-unlock-request.php');
|
87 |
+
exit();
|
88 |
+
}
|
89 |
+
|
90 |
+
if(isset($_GET['aiowps_auth_key'])){
|
91 |
+
//If URL contains unlock key in query param then process the request
|
92 |
+
$unlock_key = sanitize_text_field($_GET['aiowps_auth_key']);
|
93 |
+
AIOWPSecurity_User_Login::process_unlock_request($unlock_key);
|
94 |
+
}
|
95 |
+
|
96 |
+
//For honeypot feature
|
97 |
+
if(isset($_POST['aio_special_field'])){
|
98 |
+
$special_field_value = sanitize_text_field($_POST['aio_special_field']);
|
99 |
+
if(!empty($special_field_value)){
|
100 |
+
//This means a robot has submitted the login form!
|
101 |
+
//Redirect back to its localhost
|
102 |
+
AIOWPSecurity_Utility::redirect_to_url('http://127.0.0.1');
|
103 |
+
}
|
104 |
+
}
|
105 |
+
|
106 |
+
//For 404 IP lockout feature
|
107 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_404_IP_lockout') == '1'){
|
108 |
+
if (!is_user_logged_in() || !current_user_can('administrator')) {
|
109 |
+
$this->do_404_lockout_tasks();
|
110 |
+
}
|
111 |
+
}
|
112 |
+
|
113 |
+
|
114 |
+
//For login captcha feature
|
115 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_login_captcha') == '1'){
|
116 |
+
if (!is_user_logged_in()) {
|
117 |
+
add_action('login_form', array(&$this, 'insert_captcha_question_form'));
|
118 |
+
}
|
119 |
+
}
|
120 |
+
|
121 |
+
//For woo form captcha features
|
122 |
+
$woo_captcha_enabled = false;
|
123 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_woo_login_captcha') == '1' &&
|
124 |
+
!is_user_logged_in()) {
|
125 |
+
$woo_captcha_enabled = true;
|
126 |
+
add_action('woocommerce_login_form', array(&$this, 'insert_captcha_question_form'));
|
127 |
+
}
|
128 |
+
|
129 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_woo_register_captcha') == '1' &&
|
130 |
+
!is_user_logged_in()) {
|
131 |
+
$woo_captcha_enabled = true;
|
132 |
+
add_action('woocommerce_register_form', array(&$this, 'insert_captcha_question_form'));
|
133 |
+
}
|
134 |
+
|
135 |
+
if($woo_captcha_enabled){
|
136 |
+
add_filter('woocommerce_process_login_errors', array(&$this, 'aiowps_validate_woo_login_with_captcha'), 10, 3);
|
137 |
+
}
|
138 |
+
|
139 |
+
//For bbpress new topic form captcha
|
140 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_bbp_new_topic_captcha') == '1'){
|
141 |
+
if (!is_user_logged_in()) {
|
142 |
+
add_action('bbp_theme_before_topic_form_submit_wrapper', array(&$this, 'insert_captcha_question_form'));
|
143 |
+
}
|
144 |
+
}
|
145 |
+
|
146 |
+
//For custom login form captcha feature, ie, when wp_login_form() function is used to generate login form
|
147 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_custom_login_captcha') == '1'){
|
148 |
+
if (!is_user_logged_in()) {
|
149 |
+
add_filter( 'login_form_middle', array(&$this, 'insert_captcha_custom_login'), 10, 2); //For cases where the WP wp_login_form() function is used
|
150 |
+
}
|
151 |
+
}
|
152 |
+
|
153 |
+
//For honeypot feature
|
154 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_login_honeypot') == '1'){
|
155 |
+
if (!is_user_logged_in()) {
|
156 |
+
add_action('login_form', array(&$this, 'insert_honeypot_hidden_field'));
|
157 |
+
}
|
158 |
+
}
|
159 |
+
|
160 |
+
//For registration honeypot feature
|
161 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_registration_honeypot') == '1'){
|
162 |
+
if (!is_user_logged_in()) {
|
163 |
+
add_action('register_form', array(&$this, 'insert_honeypot_hidden_field'));
|
164 |
+
}
|
165 |
+
}
|
166 |
+
|
167 |
+
//For lost password captcha feature
|
168 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_lost_password_captcha') == '1'){
|
169 |
+
if (!is_user_logged_in()) {
|
170 |
+
add_action('lostpassword_form', array(&$this, 'insert_captcha_question_form'));
|
171 |
+
add_action('lostpassword_post', array(&$this, 'process_lost_password_form_post'));
|
172 |
+
}
|
173 |
+
}
|
174 |
+
|
175 |
+
//For registration manual approval feature
|
176 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_manual_registration_approval') == '1'){
|
177 |
+
add_filter('wp_login_errors', array(&$this, 'modify_registration_page_messages'),10, 2);
|
178 |
+
}
|
179 |
+
|
180 |
+
//For registration page captcha feature
|
181 |
+
if (AIOWPSecurity_Utility::is_multisite_install()){
|
182 |
+
$blog_id = get_current_blog_id();
|
183 |
+
switch_to_blog($blog_id);
|
184 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_registration_page_captcha') == '1'){
|
185 |
+
if (!is_user_logged_in()) {
|
186 |
+
add_action('signup_extra_fields', array(&$this, 'insert_captcha_question_form_multi'));
|
187 |
+
//add_action('preprocess_signup_form', array(&$this, 'process_signup_form_multi'));
|
188 |
+
add_filter( 'wpmu_validate_user_signup', array(&$this, 'process_signup_form_multi') );
|
189 |
+
|
190 |
+
}
|
191 |
+
}
|
192 |
+
restore_current_blog();
|
193 |
+
}else{
|
194 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_registration_page_captcha') == '1'){
|
195 |
+
if (!is_user_logged_in()) {
|
196 |
+
add_action('register_form', array(&$this, 'insert_captcha_question_form'));
|
197 |
+
}
|
198 |
+
}
|
199 |
+
}
|
200 |
+
|
201 |
+
//For comment captcha feature
|
202 |
+
if (AIOWPSecurity_Utility::is_multisite_install()){
|
203 |
+
$blog_id = get_current_blog_id();
|
204 |
+
switch_to_blog($blog_id);
|
205 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_comment_captcha') == '1'){
|
206 |
+
if (!is_user_logged_in()) {
|
207 |
+
if($aio_wp_security->configs->get_value('aiowps_default_recaptcha')) {
|
208 |
+
add_action('wp_head', array(&$this, 'add_recaptcha_script'));
|
209 |
+
}
|
210 |
+
add_action( 'comment_form_after_fields', array(&$this, 'insert_captcha_question_form'), 1 );
|
211 |
+
add_action( 'comment_form_logged_in_after', array(&$this, 'insert_captcha_question_form'), 1 );
|
212 |
+
add_filter( 'preprocess_comment', array(&$this, 'process_comment_post') );
|
213 |
+
}
|
214 |
+
}
|
215 |
+
restore_current_blog();
|
216 |
+
}else{
|
217 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_comment_captcha') == '1'){
|
218 |
+
if (!is_user_logged_in()) {
|
219 |
+
if($aio_wp_security->configs->get_value('aiowps_default_recaptcha')) {
|
220 |
+
add_action('wp_head', array(&$this, 'add_recaptcha_script'));
|
221 |
+
}
|
222 |
+
add_action( 'comment_form_after_fields', array(&$this, 'insert_captcha_question_form'), 1 );
|
223 |
+
add_action( 'comment_form_logged_in_after', array(&$this, 'insert_captcha_question_form'), 1 );
|
224 |
+
add_filter( 'preprocess_comment', array(&$this, 'process_comment_post') );
|
225 |
+
}
|
226 |
+
}
|
227 |
+
}
|
228 |
+
|
229 |
+
//For buddypress registration captcha feature
|
230 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_bp_register_captcha') == '1'){
|
231 |
+
add_action('bp_account_details_fields', array(&$this, 'insert_captcha_question_form'));
|
232 |
+
add_action('bp_signup_validate', array(&$this, 'buddy_press_signup_validate_captcha'));
|
233 |
+
}
|
234 |
+
|
235 |
+
|
236 |
+
//For feature which displays logged in users
|
237 |
+
$this->update_logged_in_user_transient();
|
238 |
+
|
239 |
+
//For block fake googlebots feature
|
240 |
+
if($aio_wp_security->configs->get_value('aiowps_block_fake_googlebots') == '1'){
|
241 |
+
include_once(AIO_WP_SECURITY_PATH.'/classes/wp-security-bot-protection.php');
|
242 |
+
AIOWPSecurity_Fake_Bot_Protection::block_fake_googlebots();
|
243 |
+
}
|
244 |
+
|
245 |
+
//For 404 event logging
|
246 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_404_logging') == '1'){
|
247 |
+
add_action('wp_head', array(&$this, 'check_404_event'));
|
248 |
+
}
|
249 |
+
|
250 |
+
//Add more tasks that need to be executed at init time
|
251 |
+
|
252 |
+
}
|
253 |
+
|
254 |
+
function aiowps_disable_xmlrpc_pingback_methods( $methods ) {
|
255 |
+
unset( $methods['pingback.ping'] );
|
256 |
+
unset( $methods['pingback.extensions.getPingbacks'] );
|
257 |
+
return $methods;
|
258 |
+
}
|
259 |
+
|
260 |
+
function aiowps_remove_x_pingback_header( $headers ) {
|
261 |
+
unset( $headers['X-Pingback'] );
|
262 |
+
return $headers;
|
263 |
+
}
|
264 |
+
|
265 |
+
/**
|
266 |
+
* Refreshes the firewall rules in .htaccess file
|
267 |
+
* eg: if permalink settings changed and white list enabled
|
268 |
+
* @param $old_permalink_structure
|
269 |
+
* @param $permalink_structure
|
270 |
+
*/
|
271 |
+
function refresh_firewall_rules($old_permalink_structure, $permalink_structure){
|
272 |
+
global $aio_wp_security;
|
273 |
+
//If white list enabled need to re-adjust the .htaccess rules
|
274 |
+
if ($aio_wp_security->configs->get_value('aiowps_enable_whitelisting') == '1') {
|
275 |
+
$write_result = AIOWPSecurity_Utility_Htaccess::write_to_htaccess(); //now let's write to the .htaccess file
|
276 |
+
if ( !$write_result )
|
277 |
+
{
|
278 |
+
$this->show_msg_error(__('The plugin was unable to write to the .htaccess file. Please edit file manually.','all-in-one-wp-security-and-firewall'));
|
279 |
+
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_whitelist_Menu - The plugin was unable to write to the .htaccess file.");
|
280 |
+
}
|
281 |
+
}
|
282 |
+
}
|
283 |
+
|
284 |
+
function spam_detect_process_comment_post($comment_id, $comment_approved)
|
285 |
+
{
|
286 |
+
if($comment_approved === "spam"){
|
287 |
+
$this->block_comment_ip($comment_id);
|
288 |
+
}
|
289 |
+
|
290 |
+
}
|
291 |
+
|
292 |
+
function process_transition_comment_status($new_status, $old_status, $comment)
|
293 |
+
{
|
294 |
+
if($new_status == 'spam'){
|
295 |
+
$this->block_comment_ip($comment->comment_ID);
|
296 |
+
}
|
297 |
+
|
298 |
+
}
|
299 |
+
|
300 |
+
/**
|
301 |
+
* Will check auto-spam blocking settings and will add IP to blocked table accordingly
|
302 |
+
* @param $comment_id
|
303 |
+
*/
|
304 |
+
function block_comment_ip($comment_id)
|
305 |
+
{
|
306 |
+
global $aio_wp_security, $wpdb;
|
307 |
+
$comment_obj = get_comment( $comment_id );
|
308 |
+
$comment_ip = $comment_obj->comment_author_IP;
|
309 |
+
//Get number of spam comments from this IP
|
310 |
+
$sql = $wpdb->prepare("SELECT * FROM $wpdb->comments
|
311 |
+
WHERE comment_approved = 'spam'
|
312 |
+
AND comment_author_IP = %s
|
313 |
+
", $comment_ip);
|
314 |
+
$comment_data = $wpdb->get_results($sql, ARRAY_A);
|
315 |
+
$spam_count = count($comment_data);
|
316 |
+
$min_comment_before_block = $aio_wp_security->configs->get_value('aiowps_spam_ip_min_comments_block');
|
317 |
+
if(!empty($min_comment_before_block) && $spam_count >= ($min_comment_before_block - 1)){
|
318 |
+
AIOWPSecurity_Blocking::add_ip_to_block_list($comment_ip, 'spam');
|
319 |
+
}
|
320 |
+
}
|
321 |
+
|
322 |
+
function remove_standard_wp_meta_widget()
|
323 |
+
{
|
324 |
+
unregister_widget('WP_Widget_Meta');
|
325 |
+
}
|
326 |
+
|
327 |
+
function remove_wp_generator_meta_info()
|
328 |
+
{
|
329 |
+
return '';
|
330 |
+
}
|
331 |
+
|
332 |
+
function remove_wp_css_js_meta_info($src) {
|
333 |
+
global $wp_version;
|
334 |
+
static $wp_version_hash = null; // Cache hash value for all function calls
|
335 |
+
|
336 |
+
// Replace only version number of assets with WP version
|
337 |
+
if ( strpos($src, 'ver=' . $wp_version) !== false ) {
|
338 |
+
if ( !$wp_version_hash ) {
|
339 |
+
$wp_version_hash = wp_hash($wp_version);
|
340 |
+
}
|
341 |
+
// Replace version number with computed hash
|
342 |
+
$src = add_query_arg('ver', $wp_version_hash, $src);
|
343 |
+
}
|
344 |
+
return $src;
|
345 |
+
}
|
346 |
+
|
347 |
+
function do_404_lockout_tasks(){
|
348 |
+
global $aio_wp_security;
|
349 |
+
$redirect_url = $aio_wp_security->configs->get_value('aiowps_404_lock_redirect_url'); //This is the redirect URL for blocked users
|
350 |
+
|
351 |
+
$visitor_ip = AIOWPSecurity_Utility_IP::get_user_ip_address();
|
352 |
+
|
353 |
+
$is_locked = AIOWPSecurity_Utility::check_locked_ip($visitor_ip);
|
354 |
+
|
355 |
+
if($is_locked){
|
356 |
+
//redirect blocked user to configured URL
|
357 |
+
AIOWPSecurity_Utility::redirect_to_url($redirect_url);
|
358 |
+
}else{
|
359 |
+
//allow through
|
360 |
+
}
|
361 |
+
}
|
362 |
+
|
363 |
+
function update_logged_in_user_transient(){
|
364 |
+
if(is_user_logged_in()){
|
365 |
+
$current_user_ip = AIOWPSecurity_Utility_IP::get_user_ip_address();
|
366 |
+
// get the logged in users list from transients entry
|
367 |
+
$logged_in_users = (AIOWPSecurity_Utility::is_multisite_install() ? get_site_transient('users_online') : get_transient('users_online'));
|
368 |
+
$current_user = wp_get_current_user();
|
369 |
+
$current_user = $current_user->ID;
|
370 |
+
$current_time = current_time('timestamp');
|
371 |
+
|
372 |
+
$current_user_info = array("user_id" => $current_user, "last_activity" => $current_time, "ip_address" => $current_user_ip); //We will store last activity time and ip address in transient entry
|
373 |
+
|
374 |
+
if($logged_in_users === false || $logged_in_users == NULL){
|
375 |
+
$logged_in_users = array();
|
376 |
+
$logged_in_users[] = $current_user_info;
|
377 |
+
AIOWPSecurity_Utility::is_multisite_install() ? set_site_transient('users_online', $logged_in_users, 30 * 60) : set_transient('users_online', $logged_in_users, 30 * 60);
|
378 |
+
}
|
379 |
+
else
|
380 |
+
{
|
381 |
+
$key = 0;
|
382 |
+
$do_nothing = false;
|
383 |
+
$update_existing = false;
|
384 |
+
$item_index = 0;
|
385 |
+
foreach ($logged_in_users as $value)
|
386 |
+
{
|
387 |
+
if($value['user_id'] == $current_user && strcmp($value['ip_address'], $current_user_ip) == 0)
|
388 |
+
{
|
389 |
+
if ($value['last_activity'] < ($current_time - (15 * 60)))
|
390 |
+
{
|
391 |
+
$update_existing = true;
|
392 |
+
$item_index = $key;
|
393 |
+
break;
|
394 |
+
}else{
|
395 |
+
$do_nothing = true;
|
396 |
+
break;
|
397 |
+
}
|
398 |
+
}
|
399 |
+
$key++;
|
400 |
+
}
|
401 |
+
|
402 |
+
if($update_existing)
|
403 |
+
{
|
404 |
+
//Update transient if the last activity was less than 15 min ago for this user
|
405 |
+
$logged_in_users[$item_index] = $current_user_info;
|
406 |
+
AIOWPSecurity_Utility::is_multisite_install() ? set_site_transient('users_online', $logged_in_users, 30 * 60) : set_transient('users_online', $logged_in_users, 30 * 60);
|
407 |
+
}else if($do_nothing){
|
408 |
+
//Do nothing
|
409 |
+
}else{
|
410 |
+
$logged_in_users[] = $current_user_info;
|
411 |
+
AIOWPSecurity_Utility::is_multisite_install() ? set_site_transient('users_online', $logged_in_users, 30 * 60) : set_transient('users_online', $logged_in_users, 30 * 60);
|
412 |
+
}
|
413 |
+
}
|
414 |
+
}
|
415 |
+
}
|
416 |
+
|
417 |
+
function insert_captcha_custom_login($cust_html_code, $args)
|
418 |
+
{
|
419 |
+
global $aio_wp_security;
|
420 |
+
$cap_form = '<p class="aiowps-captcha"><label>'.__('Please enter an answer in digits:','all-in-one-wp-security-and-firewall').'</label>';
|
421 |
+
$cap_form .= '<div class="aiowps-captcha-equation"><strong>';
|
422 |
+
$maths_question_output = $aio_wp_security->captcha_obj->generate_maths_question();
|
423 |
+
$cap_form .= $maths_question_output . '</strong></div></p>';
|
424 |
+
|
425 |
+
$cust_html_code .= $cap_form;
|
426 |
+
return $cust_html_code;
|
427 |
+
}
|
428 |
+
|
429 |
+
function insert_captcha_question_form_multi($error)
|
430 |
+
{
|
431 |
+
global $aio_wp_security;
|
432 |
+
$aio_wp_security->captcha_obj->display_captcha_form();
|
433 |
+
}
|
434 |
+
|
435 |
+
function process_signup_form_multi($result)
|
436 |
+
{
|
437 |
+
global $aio_wp_security;
|
438 |
+
//Check if captcha enabled
|
439 |
+
$verify_captcha = $aio_wp_security->captcha_obj->maybe_verify_captcha();
|
440 |
+
if ( $verify_captcha === false ) {
|
441 |
+
// wrong answer was entered
|
442 |
+
$result['errors']->add('generic', __('<strong>ERROR</strong>: Your answer was incorrect - please try again.', 'all-in-one-wp-security-and-firewall'));
|
443 |
+
}
|
444 |
+
return $result;
|
445 |
+
}
|
446 |
+
|
447 |
+
function insert_captcha_question_form(){
|
448 |
+
global $aio_wp_security;
|
449 |
+
|
450 |
+
if($aio_wp_security->configs->get_value('aiowps_default_recaptcha')) {
|
451 |
+
|
452 |
+
// Woocommerce "my account" page needs special consideration, ie,
|
453 |
+
// need to display two Google reCaptcha forms on same page (for login and register forms)
|
454 |
+
// For this case we use the "explicit" recaptcha display
|
455 |
+
$calling_hook = current_filter();
|
456 |
+
$site_key = esc_html( $aio_wp_security->configs->get_value('aiowps_recaptcha_site_key') );
|
457 |
+
if ( $calling_hook == 'woocommerce_login_form' ) {
|
458 |
+
echo '<div class="g-recaptcha-wrap" style="padding:10px 0 10px 0"><div id="woo_recaptcha_1" class="g-recaptcha" data-sitekey="'.$site_key.'"></div></div>';
|
459 |
+
return;
|
460 |
+
}
|
461 |
+
|
462 |
+
if ( $calling_hook == 'woocommerce_register_form' ) {
|
463 |
+
echo '<div class="g-recaptcha-wrap" style="padding:10px 0 10px 0"><div id="woo_recaptcha_2" class="g-recaptcha" data-sitekey="'.$site_key.'"></div></div>';
|
464 |
+
return;
|
465 |
+
}
|
466 |
+
|
467 |
+
// For all other forms simply display google recaptcha as per normal
|
468 |
+
$aio_wp_security->captcha_obj->display_recaptcha_form();
|
469 |
+
} else {
|
470 |
+
// display plain maths captcha form
|
471 |
+
$aio_wp_security->captcha_obj->display_captcha_form();
|
472 |
+
}
|
473 |
+
|
474 |
+
}
|
475 |
+
|
476 |
+
function insert_honeypot_hidden_field(){
|
477 |
+
$honey_input = '<p style="display: none;"><label>'.__('Enter something special:','all-in-one-wp-security-and-firewall').'</label>';
|
478 |
+
$honey_input .= '<input name="aio_special_field" type="text" id="aio_special_field" class="aio_special_field" value="" /></p>';
|
479 |
+
echo $honey_input;
|
480 |
+
}
|
481 |
+
|
482 |
+
function process_comment_post( $comment )
|
483 |
+
{
|
484 |
+
global $aio_wp_security;
|
485 |
+
if (is_user_logged_in()) {
|
486 |
+
return $comment;
|
487 |
+
}
|
488 |
+
|
489 |
+
//Don't process captcha for comment replies inside admin menu
|
490 |
+
if (isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'replyto-comment' &&
|
491 |
+
(check_ajax_referer('replyto-comment', '_ajax_nonce', false) || check_ajax_referer('replyto-comment', '_ajax_nonce-replyto-comment', false))) {
|
492 |
+
return $comment;
|
493 |
+
}
|
494 |
+
|
495 |
+
//Don't do captcha for pingback/trackback
|
496 |
+
if ($comment['comment_type'] != '' && $comment['comment_type'] != 'comment') {
|
497 |
+
return $comment;
|
498 |
+
}
|
499 |
+
|
500 |
+
$verify_captcha = $aio_wp_security->captcha_obj->maybe_verify_captcha();
|
501 |
+
if($verify_captcha === false) {
|
502 |
+
//Wrong answer
|
503 |
+
wp_die( __('Error: You entered an incorrect CAPTCHA answer. Please go back and try again.', 'all-in-one-wp-security-and-firewall'));
|
504 |
+
} else {
|
505 |
+
return($comment);
|
506 |
+
}
|
507 |
+
}
|
508 |
+
|
509 |
+
function process_lost_password_form_post()
|
510 |
+
{
|
511 |
+
global $aio_wp_security;
|
512 |
+
|
513 |
+
$verify_captcha = $aio_wp_security->captcha_obj->maybe_verify_captcha();
|
514 |
+
if ( $verify_captcha === false ) {
|
515 |
+
add_filter('allow_password_reset', array(&$this, 'add_lostpassword_captcha_error_msg'));
|
516 |
+
}
|
517 |
+
}
|
518 |
+
|
519 |
+
function add_lostpassword_captcha_error_msg()
|
520 |
+
{
|
521 |
+
//Insert an error just before the password reset process kicks in
|
522 |
+
return new WP_Error('aiowps_captcha_error',__('<strong>ERROR</strong>: Your answer was incorrect - please try again.', 'all-in-one-wp-security-and-firewall'));
|
523 |
+
}
|
524 |
+
|
525 |
+
function check_404_event()
|
526 |
+
{
|
527 |
+
if(is_404()){
|
528 |
+
//This means a 404 event has occurred - let's log it!
|
529 |
+
AIOWPSecurity_Utility::event_logger('404');
|
530 |
+
}
|
531 |
+
|
532 |
+
}
|
533 |
+
|
534 |
+
function buddy_press_signup_validate_captcha($errors)
|
535 |
+
{
|
536 |
+
global $bp, $aio_wp_security;
|
537 |
+
//Check captcha if required
|
538 |
+
$verify_captcha = $aio_wp_security->captcha_obj->maybe_verify_captcha();
|
539 |
+
if($verify_captcha === false) {
|
540 |
+
// wrong answer was entered
|
541 |
+
$bp->signup->errors['aiowps-captcha-answer'] = __('Your CAPTCHA answer was incorrect - please try again.', 'all-in-one-wp-security-and-firewall');
|
542 |
+
}
|
543 |
+
return;
|
544 |
+
}
|
545 |
+
|
546 |
+
function aiowps_validate_woo_login_with_captcha( $errors, $username, $password ) {
|
547 |
+
global $aio_wp_security;
|
548 |
+
|
549 |
+
$locked = $aio_wp_security->user_login_obj->check_locked_user();
|
550 |
+
if($locked == null){
|
551 |
+
//user is not locked continue
|
552 |
+
} else {
|
553 |
+
$errors->add('authentication_failed', __('<strong>ERROR</strong>: You are not allowed to register because your IP address is currently locked!', 'all-in-one-wp-security-and-firewall'));
|
554 |
+
return $errors;
|
555 |
+
}
|
556 |
+
$verify_captcha = $aio_wp_security->captcha_obj->maybe_verify_captcha();
|
557 |
+
|
558 |
+
if($verify_captcha === false) {
|
559 |
+
// wrong answer was entered
|
560 |
+
$errors->add('authentication_failed', __('<strong>ERROR</strong>: Your answer was incorrect - please try again.', 'all-in-one-wp-security-and-firewall'));
|
561 |
+
}
|
562 |
+
return $errors;
|
563 |
+
|
564 |
+
}
|
565 |
+
|
566 |
+
/**
|
567 |
+
* Displays a notice message if the plugin was reactivated after being initially deactivated
|
568 |
+
* Gives users option of re-applying the aiowps rules which were deleted from the .htaccess after deactivation.
|
569 |
+
*/
|
570 |
+
function reapply_htaccess_rules_notice()
|
571 |
+
{
|
572 |
+
if (get_option('aiowps_temp_configs') !== FALSE){
|
573 |
+
echo '<div class="updated"><p>'.__('Would you like All In One WP Security & Firewall to re-insert the security rules in your .htaccess file which were cleared when you deactivated the plugin?', 'all-in-one-wp-security-and-firewall').' <a href="admin.php?page='.AIOWPSEC_MENU_SLUG_PREFIX.'&aiowps_reapply_htaccess=1" class="button-primary">Yes</a> <a href="admin.php?page='.AIOWPSEC_MENU_SLUG_PREFIX.'&aiowps_reapply_htaccess=2" class="button-primary">No</a></p></div>';
|
574 |
+
}
|
575 |
+
}
|
576 |
+
|
577 |
+
//This is a fix for cases when the password reset URL in the email was not decoding all html entities properly
|
578 |
+
function decode_reset_pw_msg($message, $key, $user_login, $user_data)
|
579 |
+
{
|
580 |
+
global $aio_wp_security;
|
581 |
+
$message = html_entity_decode($message);
|
582 |
+
return $message;
|
583 |
+
}
|
584 |
+
|
585 |
+
function modify_registration_page_messages($errors, $redirect_to)
|
586 |
+
{
|
587 |
+
if( isset($_GET['checkemail']) && 'registered' == $_GET['checkemail'] ){
|
588 |
+
if(is_wp_error($errors)){
|
589 |
+
$errors->remove('registered');
|
590 |
+
$pending_approval_msg = __('Your registration is pending approval.', 'all-in-one-wp-security-and-firewall');
|
591 |
+
$pending_approval_msg = apply_filters('aiowps_pending_registration_message', $pending_approval_msg);
|
592 |
+
$errors->add('registered', $pending_approval_msg, array('registered'=>'message'));
|
593 |
+
}
|
594 |
+
}
|
595 |
+
return $errors;
|
596 |
+
}
|
597 |
+
|
598 |
+
/*
|
599 |
+
* Re-wrote code which checks for REST API requests
|
600 |
+
* Below uses the "rest_api_init" action hook to check for REST requests.
|
601 |
+
* The code will block "unauthorized" requests whilst allowing genuine requests.
|
602 |
+
* (P. Petreski June 2018)
|
603 |
+
*/
|
604 |
+
function check_rest_api_requests($rest_server_object){
|
605 |
+
$rest_user = wp_get_current_user();
|
606 |
+
if(empty($rest_user->ID)){
|
607 |
+
$error_message = apply_filters('aiowps_rest_api_error_message', __('You are not authorized to perform this action.', 'disable-wp-rest-api'));
|
608 |
+
wp_die($error_message);
|
609 |
+
}
|
610 |
+
}
|
611 |
+
|
612 |
+
function add_recaptcha_script()
|
613 |
+
{
|
614 |
+
wp_enqueue_script( 'google-recaptcha', 'https://www.google.com/recaptcha/api.js', false );
|
615 |
+
}
|
616 |
+
}
|
classes/wp-security-installer.php
ADDED
@@ -0,0 +1,206 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if(!defined('ABSPATH')){
|
3 |
+
exit;//Exit if accessed directly
|
4 |
+
}
|
5 |
+
|
6 |
+
include_once(dirname(__FILE__) . '/wp-security-configure-settings.php');//Allows activating via wp-cli
|
7 |
+
|
8 |
+
class AIOWPSecurity_Installer
|
9 |
+
{
|
10 |
+
static function run_installer($networkwide='')
|
11 |
+
{
|
12 |
+
global $wpdb;
|
13 |
+
if (function_exists('is_multisite') && is_multisite() && $networkwide) {
|
14 |
+
// check if it is a network activation - if so, run the activation function for each blog id
|
15 |
+
$blogids = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs");
|
16 |
+
foreach ($blogids as $blog_id) {
|
17 |
+
switch_to_blog($blog_id);
|
18 |
+
AIOWPSecurity_Installer::create_db_tables();
|
19 |
+
AIOWPSecurity_Configure_Settings::add_option_values();
|
20 |
+
restore_current_blog();
|
21 |
+
}
|
22 |
+
AIOWPSecurity_Installer::create_db_backup_dir(); //Create a backup dir in the WP uploads directory
|
23 |
+
} else {
|
24 |
+
AIOWPSecurity_Installer::create_db_tables();
|
25 |
+
AIOWPSecurity_Configure_Settings::add_option_values();
|
26 |
+
AIOWPSecurity_Installer::create_db_backup_dir(); //Create a backup dir in the WP uploads directory
|
27 |
+
}
|
28 |
+
}
|
29 |
+
|
30 |
+
static function create_db_tables()
|
31 |
+
{
|
32 |
+
global $wpdb;
|
33 |
+
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
34 |
+
|
35 |
+
if (function_exists('is_multisite') && is_multisite()) {
|
36 |
+
/*
|
37 |
+
* FIX for multisite table creation case:
|
38 |
+
* Although each table name is defined in a constant inside the wp-security-core.php,
|
39 |
+
* we need to do this step for multisite case because we need to refresh the $wpdb->prefix value
|
40 |
+
* otherwise it will contain the original blog id and not the current id we need.
|
41 |
+
*
|
42 |
+
*/
|
43 |
+
$lockdown_tbl_name = $wpdb->prefix.'aiowps_login_lockdown';
|
44 |
+
$failed_login_tbl_name = $wpdb->prefix.'aiowps_failed_logins';
|
45 |
+
$user_login_activity_tbl_name = $wpdb->prefix.'aiowps_login_activity';
|
46 |
+
$aiowps_global_meta_tbl_name = $wpdb->prefix.'aiowps_global_meta';
|
47 |
+
$aiowps_event_tbl_name = $wpdb->prefix.'aiowps_events';
|
48 |
+
$perm_block_tbl_name = $wpdb->prefix.'aiowps_permanent_block';
|
49 |
+
} else {
|
50 |
+
$lockdown_tbl_name = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
51 |
+
$failed_login_tbl_name = AIOWPSEC_TBL_FAILED_LOGINS;
|
52 |
+
$user_login_activity_tbl_name = AIOWPSEC_TBL_USER_LOGIN_ACTIVITY;
|
53 |
+
$aiowps_global_meta_tbl_name = AIOWPSEC_TBL_GLOBAL_META_DATA;
|
54 |
+
$aiowps_event_tbl_name = AIOWPSEC_TBL_EVENTS;
|
55 |
+
$perm_block_tbl_name = AIOWPSEC_TBL_PERM_BLOCK;
|
56 |
+
}
|
57 |
+
|
58 |
+
$charset_collate = '';
|
59 |
+
if (!empty($wpdb->charset)) {
|
60 |
+
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
|
61 |
+
} else {
|
62 |
+
$charset_collate = "DEFAULT CHARSET=utf8";
|
63 |
+
}
|
64 |
+
if (!empty($wpdb->collate)) {
|
65 |
+
$charset_collate .= " COLLATE $wpdb->collate";
|
66 |
+
}
|
67 |
+
|
68 |
+
$ld_tbl_sql = "CREATE TABLE " . $lockdown_tbl_name . " (
|
69 |
+
id bigint(20) NOT NULL AUTO_INCREMENT,
|
70 |
+
user_id bigint(20) NOT NULL,
|
71 |
+
user_login VARCHAR(150) NOT NULL,
|
72 |
+
lockdown_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
73 |
+
release_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
74 |
+
failed_login_ip varchar(100) NOT NULL DEFAULT '',
|
75 |
+
lock_reason varchar(128) NOT NULL DEFAULT '',
|
76 |
+
unlock_key varchar(128) NOT NULL DEFAULT '',
|
77 |
+
PRIMARY KEY (id)
|
78 |
+
)" . $charset_collate . ";";
|
79 |
+
dbDelta($ld_tbl_sql);
|
80 |
+
|
81 |
+
$fl_tbl_sql = "CREATE TABLE " . $failed_login_tbl_name . " (
|
82 |
+
id bigint(20) NOT NULL AUTO_INCREMENT,
|
83 |
+
user_id bigint(20) NOT NULL,
|
84 |
+
user_login VARCHAR(150) NOT NULL,
|
85 |
+
failed_login_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
86 |
+
login_attempt_ip varchar(100) NOT NULL DEFAULT '',
|
87 |
+
PRIMARY KEY (id)
|
88 |
+
)" . $charset_collate . ";";
|
89 |
+
dbDelta($fl_tbl_sql);
|
90 |
+
|
91 |
+
$ula_tbl_sql = "CREATE TABLE " . $user_login_activity_tbl_name . " (
|
92 |
+
id bigint(20) NOT NULL AUTO_INCREMENT,
|
93 |
+
user_id bigint(20) NOT NULL,
|
94 |
+
user_login VARCHAR(150) NOT NULL,
|
95 |
+
login_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
96 |
+
logout_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
97 |
+
login_ip varchar(100) NOT NULL DEFAULT '',
|
98 |
+
login_country varchar(150) NOT NULL DEFAULT '',
|
99 |
+
browser_type varchar(150) NOT NULL DEFAULT '',
|
100 |
+
PRIMARY KEY (id)
|
101 |
+
)" . $charset_collate . ";";
|
102 |
+
dbDelta($ula_tbl_sql);
|
103 |
+
|
104 |
+
$gm_tbl_sql = "CREATE TABLE " . $aiowps_global_meta_tbl_name . " (
|
105 |
+
meta_id bigint(20) NOT NULL auto_increment,
|
106 |
+
date_time datetime NOT NULL default '0000-00-00 00:00:00',
|
107 |
+
meta_key1 varchar(255) NOT NULL,
|
108 |
+
meta_key2 varchar(255) NOT NULL,
|
109 |
+
meta_key3 varchar(255) NOT NULL,
|
110 |
+
meta_key4 varchar(255) NOT NULL,
|
111 |
+
meta_key5 varchar(255) NOT NULL,
|
112 |
+
meta_value1 varchar(255) NOT NULL,
|
113 |
+
meta_value2 text NOT NULL,
|
114 |
+
meta_value3 text NOT NULL,
|
115 |
+
meta_value4 longtext NOT NULL,
|
116 |
+
meta_value5 longtext NOT NULL,
|
117 |
+
PRIMARY KEY (meta_id)
|
118 |
+
)" . $charset_collate . ";";
|
119 |
+
dbDelta($gm_tbl_sql);
|
120 |
+
|
121 |
+
$evt_tbl_sql = "CREATE TABLE " . $aiowps_event_tbl_name . " (
|
122 |
+
id bigint(20) NOT NULL AUTO_INCREMENT,
|
123 |
+
event_type VARCHAR(150) NOT NULL DEFAULT '',
|
124 |
+
username VARCHAR(150),
|
125 |
+
user_id bigint(20),
|
126 |
+
event_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
127 |
+
ip_or_host varchar(100),
|
128 |
+
referer_info varchar(255),
|
129 |
+
url varchar(255),
|
130 |
+
country_code varchar(50),
|
131 |
+
event_data longtext,
|
132 |
+
PRIMARY KEY (id)
|
133 |
+
)" . $charset_collate . ";";
|
134 |
+
dbDelta($evt_tbl_sql);
|
135 |
+
|
136 |
+
$pb_tbl_sql = "CREATE TABLE " . $perm_block_tbl_name . " (
|
137 |
+
id bigint(20) NOT NULL AUTO_INCREMENT,
|
138 |
+
blocked_ip varchar(100) NOT NULL DEFAULT '',
|
139 |
+
block_reason varchar(128) NOT NULL DEFAULT '',
|
140 |
+
country_origin varchar(50) NOT NULL DEFAULT '',
|
141 |
+
blocked_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
142 |
+
unblock tinyint(1) NOT NULL DEFAULT '0',
|
143 |
+
PRIMARY KEY (id)
|
144 |
+
)" . $charset_collate . ";";
|
145 |
+
dbDelta($pb_tbl_sql);
|
146 |
+
|
147 |
+
update_option("aiowpsec_db_version", AIO_WP_SECURITY_DB_VERSION);
|
148 |
+
}
|
149 |
+
|
150 |
+
static function create_db_backup_dir()
|
151 |
+
{
|
152 |
+
global $aio_wp_security;
|
153 |
+
//Create our folder in the "wp-content" directory
|
154 |
+
$aiowps_dir = WP_CONTENT_DIR . '/' . AIO_WP_SECURITY_BACKUPS_DIR_NAME;
|
155 |
+
if (!is_dir($aiowps_dir)) {
|
156 |
+
mkdir($aiowps_dir, 0755, true);
|
157 |
+
//Let's also create an empty index.html file in this folder
|
158 |
+
$index_file = $aiowps_dir . '/index.html';
|
159 |
+
$handle = fopen($index_file, 'w'); //or die('Cannot open file: '.$index_file);
|
160 |
+
fclose($handle);
|
161 |
+
}
|
162 |
+
$server_type = AIOWPSecurity_Utility::get_server_type();
|
163 |
+
//Only create .htaccess if server is the right type
|
164 |
+
if ($server_type == 'apache' || $server_type == 'litespeed') {
|
165 |
+
$file = $aiowps_dir . '/.htaccess';
|
166 |
+
if (!file_exists($file)) {
|
167 |
+
//Create an .htacces file
|
168 |
+
//Write some rules which will only allow people originating from wp admin page to download the DB backup
|
169 |
+
$rules = '';
|
170 |
+
$rules .= 'order deny,allow' . PHP_EOL;
|
171 |
+
$rules .= 'deny from all' . PHP_EOL;
|
172 |
+
$write_result = file_put_contents($file, $rules);
|
173 |
+
if ($write_result === false) {
|
174 |
+
$aio_wp_security->debug_logger->log_debug("Creation of .htaccess file in " . AIO_WP_SECURITY_BACKUPS_DIR_NAME . " directory failed!", 4);
|
175 |
+
}
|
176 |
+
}
|
177 |
+
}
|
178 |
+
}
|
179 |
+
|
180 |
+
static function reactivation_tasks()
|
181 |
+
{
|
182 |
+
global $aio_wp_security;
|
183 |
+
$temp_cfgs = get_option('aiowps_temp_configs');
|
184 |
+
if ($temp_cfgs !== FALSE) {
|
185 |
+
//Case where previously installed plugin was reactivated
|
186 |
+
//Let's copy the original configs back to the options table
|
187 |
+
$updated = update_option('aio_wp_security_configs', $temp_cfgs);
|
188 |
+
if (!$updated) {
|
189 |
+
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_Installer::run_installer() - Update of option settings failed upon plugin activation!", 4);
|
190 |
+
}
|
191 |
+
$aio_wp_security->configs->configs = $temp_cfgs; //copy the original configs to memory
|
192 |
+
//Now let's write any rules to the .htaccess file if necessary
|
193 |
+
$res = AIOWPSecurity_Utility_Htaccess::write_to_htaccess();
|
194 |
+
|
195 |
+
if ( !$res ) {
|
196 |
+
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_Deactivation::run_deactivation_tasks() - Could not write to the .htaccess file. Please check the file permissions.", 4);
|
197 |
+
return false;
|
198 |
+
}
|
199 |
+
delete_option('aiowps_temp_configs');
|
200 |
+
return true;
|
201 |
+
} else {
|
202 |
+
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_Deactivation::run_deactivation_tasks() - Original config settings not found!", 4);
|
203 |
+
return false;
|
204 |
+
}
|
205 |
+
}
|
206 |
+
}
|
classes/wp-security-process-renamed-login-page.php
ADDED
@@ -0,0 +1,243 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if(!defined('ABSPATH')){
|
3 |
+
exit;//Exit if accessed directly
|
4 |
+
}
|
5 |
+
|
6 |
+
class AIOWPSecurity_Process_Renamed_Login_Page
|
7 |
+
{
|
8 |
+
|
9 |
+
function __construct()
|
10 |
+
{
|
11 |
+
add_action('login_init', array(&$this, 'aiowps_login_init'));
|
12 |
+
add_filter('site_url', array(&$this, 'aiowps_site_url'), 10, 2);
|
13 |
+
add_filter('network_site_url', array(&$this, 'aiowps_site_url'), 10, 2);
|
14 |
+
add_filter('wp_redirect', array(&$this, 'aiowps_wp_redirect'), 10, 2);
|
15 |
+
add_filter('register', array(&$this, 'register_link'));
|
16 |
+
add_filter('user_request_action_email_content', array(&$this, 'aiowps_user_request_email_content'), 10, 2);
|
17 |
+
remove_action('template_redirect', 'wp_redirect_admin_locations', 1000); //To prevent redirect to login page when people type "login" at end of home URL
|
18 |
+
|
19 |
+
}
|
20 |
+
|
21 |
+
function aiowps_login_init()
|
22 |
+
{
|
23 |
+
if (strpos($_SERVER['REQUEST_URI'], 'wp-login') !== false){
|
24 |
+
$referer = wp_get_referer();
|
25 |
+
if($referer && strpos($referer, 'wp-activate.php') !== false){
|
26 |
+
$parsed_referer = parse_url($referer);
|
27 |
+
if($parsed_referer && !empty($parsed_referer['query'])){
|
28 |
+
parse_str($parsed_referer['query'], $referer);
|
29 |
+
if (!empty($parsed_referer['key'])){
|
30 |
+
$result = wpmu_activate_signup($parsed_referer['key']); //MS site creation
|
31 |
+
if($result && is_wp_error($result) && ($result->get_error_code() === 'already_active' || $result->get_error_code() === 'blog_taken')){
|
32 |
+
$aiowps_new_login_url = AIOWPSecurity_Process_Renamed_Login_Page::new_login_url();
|
33 |
+
wp_safe_redirect($aiowps_new_login_url . (!empty($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : ''));
|
34 |
+
die;
|
35 |
+
}
|
36 |
+
}
|
37 |
+
}
|
38 |
+
}
|
39 |
+
AIOWPSecurity_Process_Renamed_Login_Page::aiowps_set_404();
|
40 |
+
}
|
41 |
+
|
42 |
+
}
|
43 |
+
|
44 |
+
function aiowps_site_url($url, $path)
|
45 |
+
{
|
46 |
+
return $this->aiowps_filter_wp_login_file($url);
|
47 |
+
}
|
48 |
+
|
49 |
+
function aiowps_wp_redirect($location, $status)
|
50 |
+
{
|
51 |
+
return $this->aiowps_filter_wp_login_file($location);
|
52 |
+
}
|
53 |
+
|
54 |
+
//Filter register link on the login page
|
55 |
+
function register_link($registration_url)
|
56 |
+
{
|
57 |
+
return $this->aiowps_filter_wp_login_file($registration_url);
|
58 |
+
}
|
59 |
+
|
60 |
+
// Filter confirm link so we hide the secret login slug in the export_personal_data email
|
61 |
+
function aiowps_user_request_email_content($email_text, $email_data)
|
62 |
+
{
|
63 |
+
global $aio_wp_security;
|
64 |
+
if(isset($email_data['request']) && isset($email_data['request']->action_name)) {
|
65 |
+
if($email_data['request']->action_name == 'export_personal_data') {
|
66 |
+
$confirm_url = $email_data['confirm_url'];
|
67 |
+
$login_slug = $aio_wp_security->configs->get_value('aiowps_login_page_slug');
|
68 |
+
if(get_option('permalink_structure')) {
|
69 |
+
$new_confirm_url = str_replace( $login_slug, 'wp-login.php', $confirm_url );
|
70 |
+
} else {
|
71 |
+
$search_pattern = '?'.$login_slug.'&action';
|
72 |
+
$new_confirm_url = str_replace( $search_pattern, '/wp-login.php/?action', $confirm_url );
|
73 |
+
}
|
74 |
+
|
75 |
+
$email_text_modified = str_replace( '###CONFIRM_URL###', esc_url_raw( $new_confirm_url ), $email_text );
|
76 |
+
return $email_text_modified;
|
77 |
+
}
|
78 |
+
}
|
79 |
+
return $email_text;
|
80 |
+
}
|
81 |
+
|
82 |
+
//Filter all login url strings on the login page
|
83 |
+
function aiowps_filter_wp_login_file($url)
|
84 |
+
{
|
85 |
+
if (strpos($url, 'wp-login.php') !== false){
|
86 |
+
$args = explode( '?', $url );
|
87 |
+
if (isset($args[1])){
|
88 |
+
if (strpos($args[1], 'action=postpass') !== FALSE){
|
89 |
+
return $url; //Don't reveal the secret URL in the post password action url
|
90 |
+
}
|
91 |
+
parse_str($args[1], $args);
|
92 |
+
$url = esc_url(add_query_arg($args, AIOWPSecurity_Process_Renamed_Login_Page::new_login_url()));
|
93 |
+
$url = html_entity_decode($url);
|
94 |
+
}else{
|
95 |
+
$url = AIOWPSecurity_Process_Renamed_Login_Page::new_login_url();
|
96 |
+
}
|
97 |
+
}
|
98 |
+
return $url;
|
99 |
+
}
|
100 |
+
|
101 |
+
static function renamed_login_init_tasks()
|
102 |
+
{
|
103 |
+
global $aio_wp_security;
|
104 |
+
|
105 |
+
//The following will process the native wordpress post password protection form
|
106 |
+
//Normally this is done by wp-login.php file but we cannot use that since the login page has been renamed
|
107 |
+
$action = isset($_GET['action'])?strip_tags($_GET['action']):'';
|
108 |
+
if(isset($_POST['post_password']) && $action == 'postpass'){
|
109 |
+
require_once ABSPATH . 'wp-includes/class-phpass.php';
|
110 |
+
$hasher = new PasswordHash( 8, true );
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Filter the life span of the post password cookie.
|
114 |
+
*
|
115 |
+
* By default, the cookie expires 10 days from creation. To turn this
|
116 |
+
* into a session cookie, return 0.
|
117 |
+
*
|
118 |
+
* @since 3.7.0
|
119 |
+
*
|
120 |
+
* @param int $expires The expiry time, as passed to setcookie().
|
121 |
+
*/
|
122 |
+
$expire = apply_filters( 'post_password_expires', time() + 10 * DAY_IN_SECONDS );
|
123 |
+
setcookie( 'wp-postpass_' . COOKIEHASH, $hasher->HashPassword( wp_unslash( $_POST['post_password'] ) ), $expire, COOKIEPATH );
|
124 |
+
|
125 |
+
wp_safe_redirect( wp_get_referer() );
|
126 |
+
exit();
|
127 |
+
}
|
128 |
+
|
129 |
+
//case where someone attempting to reach wp-admin
|
130 |
+
if (is_admin() && !is_user_logged_in() && !defined('DOING_AJAX') && basename( $_SERVER["SCRIPT_FILENAME"] ) !== 'admin-post.php'){
|
131 |
+
//Fix to prevent fatal error caused by some themes and Yoast SEO
|
132 |
+
do_action('aiowps_before_wp_die_renamed_login');
|
133 |
+
wp_die( __( 'Not available.', 'all-in-one-wp-security-and-firewall' ), 403 );
|
134 |
+
}
|
135 |
+
|
136 |
+
//case where someone attempting to reach wp-login
|
137 |
+
if(isset($_SERVER['REQUEST_URI']) && strpos( $_SERVER['REQUEST_URI'], 'wp-login.php' ) && !is_user_logged_in()){
|
138 |
+
|
139 |
+
// Handle export personal data request for rename login case
|
140 |
+
if(isset($_GET['request_id'])) {
|
141 |
+
$request_id = (int) $_GET['request_id'];
|
142 |
+
$result = '';
|
143 |
+
if ( isset( $_GET['confirm_key'] ) ) {
|
144 |
+
$key = sanitize_text_field( wp_unslash( $_GET['confirm_key'] ) );
|
145 |
+
$result = wp_validate_user_request_key( $request_id, $key );
|
146 |
+
} else {
|
147 |
+
$result = new WP_Error( 'invalid_key', __( 'Invalid key' ) );
|
148 |
+
}
|
149 |
+
|
150 |
+
if ( is_wp_error( $result ) ) {
|
151 |
+
wp_die( $result );
|
152 |
+
}else if(!empty($result)) {
|
153 |
+
_wp_privacy_account_request_confirmed($request_id);
|
154 |
+
$message = _wp_privacy_account_request_confirmed_message( $request_id );
|
155 |
+
login_header( __( 'User action confirmed.' ), $message );
|
156 |
+
login_footer();
|
157 |
+
exit;
|
158 |
+
}
|
159 |
+
}
|
160 |
+
|
161 |
+
//Check if the maintenance (lockout) mode is active - if so prevent access to site by not displaying 404 page!
|
162 |
+
if($aio_wp_security->configs->get_value('aiowps_site_lockout') == '1'){
|
163 |
+
AIOWPSecurity_WP_Loaded_Tasks::site_lockout_tasks();
|
164 |
+
}else{
|
165 |
+
AIOWPSecurity_Process_Renamed_Login_Page::aiowps_set_404();
|
166 |
+
}
|
167 |
+
}
|
168 |
+
|
169 |
+
//case where someone attempting to reach the standard register or signup pages
|
170 |
+
if(isset( $_SERVER['REQUEST_URI'] ) && strpos( $_SERVER['REQUEST_URI'], 'wp-register.php' ) ||
|
171 |
+
isset( $_SERVER['REQUEST_URI'] ) && strpos( $_SERVER['REQUEST_URI'], 'wp-signup.php' )){
|
172 |
+
//Check if the maintenance (lockout) mode is active - if so prevent access to site by not displaying 404 page!
|
173 |
+
if($aio_wp_security->configs->get_value('aiowps_site_lockout') == '1'){
|
174 |
+
AIOWPSecurity_WP_Loaded_Tasks::site_lockout_tasks();
|
175 |
+
}else{
|
176 |
+
AIOWPSecurity_Process_Renamed_Login_Page::aiowps_set_404();
|
177 |
+
}
|
178 |
+
}
|
179 |
+
|
180 |
+
$parsed_url = parse_url($_SERVER['REQUEST_URI']);
|
181 |
+
|
182 |
+
$login_slug = $aio_wp_security->configs->get_value('aiowps_login_page_slug');
|
183 |
+
$home_url_with_slug = home_url($login_slug, 'relative');
|
184 |
+
|
185 |
+
/*
|
186 |
+
* Compatibility fix for WPML plugin
|
187 |
+
*/
|
188 |
+
if (function_exists('icl_object_id') && strpos($home_url_with_slug,$login_slug)){
|
189 |
+
$home_url_with_slug = home_url($login_slug);
|
190 |
+
function qtranxf_init_language() {}
|
191 |
+
}
|
192 |
+
|
193 |
+
/*
|
194 |
+
* *** Compatibility fix for qTranslate-X plugin ***
|
195 |
+
* qTranslate-X plugin modifies the result for the following command by adding the protocol and host to the url path:
|
196 |
+
* home_url($login_slug, 'relative');
|
197 |
+
* Therefore we will remove the protocol and host for the following cases:
|
198 |
+
* qTranslate-X is active AND the URL being accessed contains the secret slug
|
199 |
+
*/
|
200 |
+
if (function_exists('qtranxf_init_language') && strpos($home_url_with_slug,$login_slug)){
|
201 |
+
$parsed_home_url_with_slug = parse_url($home_url_with_slug);
|
202 |
+
$home_url_with_slug = $parsed_home_url_with_slug['path']; //this will return just the path minus the protocol and host
|
203 |
+
}
|
204 |
+
|
205 |
+
if(untrailingslashit($parsed_url['path']) === $home_url_with_slug
|
206 |
+
|| (!get_option('permalink_structure') && isset($_GET[$login_slug]))){
|
207 |
+
if(empty($action) && is_user_logged_in()){
|
208 |
+
//if user is already logged in but tries to access the renamed login page, send them to the dashboard
|
209 |
+
AIOWPSecurity_Utility::redirect_to_url(AIOWPSEC_WP_URL."/wp-admin");
|
210 |
+
}else{
|
211 |
+
status_header( 200 );
|
212 |
+
require_once(AIO_WP_SECURITY_PATH . '/other-includes/wp-security-rename-login-feature.php' );
|
213 |
+
die;
|
214 |
+
}
|
215 |
+
}
|
216 |
+
}
|
217 |
+
|
218 |
+
static function new_login_url()
|
219 |
+
{
|
220 |
+
global $aio_wp_security;
|
221 |
+
$login_slug = $aio_wp_security->configs->get_value('aiowps_login_page_slug');
|
222 |
+
if(get_option('permalink_structure')){
|
223 |
+
return trailingslashit(trailingslashit(home_url()) . $login_slug);
|
224 |
+
}else{
|
225 |
+
return trailingslashit(home_url()) . '?' . $login_slug;
|
226 |
+
}
|
227 |
+
}
|
228 |
+
|
229 |
+
static function aiowps_set_404()
|
230 |
+
{
|
231 |
+
global $wp_query;
|
232 |
+
do_action('aiopws_before_set_404'); //This hook is for themes which produce a fatal error when the rename login feature is enabled and someone visits "wp-admin" slug directly
|
233 |
+
|
234 |
+
status_header(404);
|
235 |
+
$wp_query->set_404();
|
236 |
+
if ((($template = get_404_template()) || ($template = get_index_template()))
|
237 |
+
&& ($template = apply_filters('template_include', $template))){
|
238 |
+
include($template);
|
239 |
+
}
|
240 |
+
die;
|
241 |
+
}
|
242 |
+
|
243 |
+
}
|
classes/wp-security-user-login.php
ADDED
@@ -0,0 +1,607 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if(!defined('ABSPATH')){
|
3 |
+
exit;//Exit if accessed directly
|
4 |
+
}
|
5 |
+
|
6 |
+
class AIOWPSecurity_User_Login
|
7 |
+
{
|
8 |
+
/**
|
9 |
+
* This will store a URI query string key for passing messages to the login form
|
10 |
+
* @var string
|
11 |
+
*/
|
12 |
+
var $key_login_msg;
|
13 |
+
function __construct()
|
14 |
+
{
|
15 |
+
$this->key_login_msg = 'aiowps_login_msg_id';
|
16 |
+
// As a first authentication step, check if user's IP is locked.
|
17 |
+
add_filter('authenticate', array($this, 'block_ip_if_locked'), 1, 1);
|
18 |
+
// Check whether user needs to be manually approved after default WordPress authenticate hooks (with priority 20).
|
19 |
+
add_filter('authenticate', array($this, 'check_manual_registration_approval'), 30, 1);
|
20 |
+
// Check login captcha
|
21 |
+
add_filter('authenticate', array($this, 'check_captcha'), 1, 1);
|
22 |
+
// As a last authentication step, perform post authentication steps
|
23 |
+
add_filter('authenticate', array($this, 'post_authenticate'), 100, 3);
|
24 |
+
add_action('aiowps_force_logout_check', array($this, 'aiowps_force_logout_action_handler'));
|
25 |
+
add_action('clear_auth_cookie', array($this, 'wp_logout_action_handler'));
|
26 |
+
add_filter('login_message', array($this, 'aiowps_login_message')); //WP filter to add or modify messages on the login page
|
27 |
+
}
|
28 |
+
/**
|
29 |
+
* Terminate the execution via wp_die with 503 status code, if current
|
30 |
+
* user's IP is currently locked.
|
31 |
+
*
|
32 |
+
* @global AIO_WP_Security $aio_wp_security
|
33 |
+
* @param WP_Error|WP_User $user
|
34 |
+
* @return WP_User
|
35 |
+
*/
|
36 |
+
function block_ip_if_locked($user)
|
37 |
+
{
|
38 |
+
global $aio_wp_security;
|
39 |
+
$user_locked = $this->check_locked_user();
|
40 |
+
if ( $user_locked != NULL ) {
|
41 |
+
$aio_wp_security->debug_logger->log_debug("Login attempt from blocked IP range - ".$user_locked['failed_login_ip'],2);
|
42 |
+
// Allow the error message to be filtered.
|
43 |
+
$error_msg = apply_filters( 'aiowps_ip_blocked_error_msg', __('<strong>ERROR</strong>: Access from your IP address has been blocked for security reasons. Please contact the administrator.', 'all-in-one-wp-security-and-firewall') );
|
44 |
+
// If unlock requests are allowed, add the "Request Unlock" button to the message.
|
45 |
+
$unlock_form = '';
|
46 |
+
if( $aio_wp_security->configs->get_value('aiowps_allow_unlock_requests') == '1' )
|
47 |
+
{
|
48 |
+
$unlock_form = $this->get_unlock_request_form();
|
49 |
+
$error_msg .= $unlock_form;
|
50 |
+
}
|
51 |
+
$error_msg = apply_filters('aiowps_ip_blocked_output_page', $error_msg, $unlock_form); //filter the complete output of the locked page
|
52 |
+
wp_die($error_msg, __('Service Temporarily Unavailable', 'all-in-one-wp-security-and-firewall'), 503);
|
53 |
+
} else {
|
54 |
+
return $user;
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* Check login captcha (if enabled).
|
60 |
+
* @global AIO_WP_Security $aio_wp_security
|
61 |
+
* @param WP_Error|WP_User $user
|
62 |
+
* @return WP_Error|WP_User
|
63 |
+
*/
|
64 |
+
function check_captcha($user)
|
65 |
+
{
|
66 |
+
global $aio_wp_security;
|
67 |
+
if ( is_wp_error($user) ) {
|
68 |
+
// Authentication has failed already at some earlier step.
|
69 |
+
return $user;
|
70 |
+
}
|
71 |
+
|
72 |
+
if ( ! (isset($_POST['log']) && isset($_POST['pwd'])) ) {
|
73 |
+
// XML-RPC authentication (not via wp-login.php), nothing to do here.
|
74 |
+
return $user;
|
75 |
+
}
|
76 |
+
|
77 |
+
if ( $aio_wp_security->configs->get_value('aiowps_enable_login_captcha') != '1' ) {
|
78 |
+
// Captcha not enabled, nothing to do here.
|
79 |
+
return $user;
|
80 |
+
}
|
81 |
+
$captcha_error = new WP_Error('authentication_failed', __('<strong>ERROR</strong>: Your answer was incorrect - please try again.', 'all-in-one-wp-security-and-firewall'));
|
82 |
+
$verify_captcha = $aio_wp_security->captcha_obj->maybe_verify_captcha();
|
83 |
+
if ( $verify_captcha === false ) {
|
84 |
+
return $captcha_error;
|
85 |
+
}
|
86 |
+
return $user;
|
87 |
+
}
|
88 |
+
/**
|
89 |
+
* Check, whether $user needs to be manually approved by site admin yet.
|
90 |
+
* @global AIO_WP_Security $aio_wp_security
|
91 |
+
* @param WP_Error|WP_User $user
|
92 |
+
* @param string $username
|
93 |
+
* @param string $password
|
94 |
+
* @return WP_Error|WP_User
|
95 |
+
*/
|
96 |
+
function check_manual_registration_approval($user)
|
97 |
+
{
|
98 |
+
global $aio_wp_security;
|
99 |
+
if ( !($user instanceof WP_User) ) {
|
100 |
+
// Not a WP_User - nothing to do here.
|
101 |
+
return $user;
|
102 |
+
}
|
103 |
+
//Check if auto pending new account status feature is enabled
|
104 |
+
if ($aio_wp_security->configs->get_value('aiowps_enable_manual_registration_approval') == '1')
|
105 |
+
{
|
106 |
+
$aiowps_account_status = get_user_meta($user->ID, 'aiowps_account_status', TRUE);
|
107 |
+
if ($aiowps_account_status == 'pending') {
|
108 |
+
// Account needs to be activated yet
|
109 |
+
return new WP_Error('account_pending', __('<strong>ACCOUNT PENDING</strong>: Your account is currently not active. An administrator needs to activate your account before you can login.', 'all-in-one-wp-security-and-firewall'));
|
110 |
+
}
|
111 |
+
}
|
112 |
+
return $user;
|
113 |
+
}
|
114 |
+
/**
|
115 |
+
* Handle post authentication steps (in case of failed login):
|
116 |
+
* - increment number of failed logins for $username
|
117 |
+
* - (optionally) lock the user
|
118 |
+
* - (optionally) display a generic error message
|
119 |
+
* @global AIO_WP_Security $aio_wp_security
|
120 |
+
* @param WP_Error|WP_User $user
|
121 |
+
* @param string $username
|
122 |
+
* @param string $password
|
123 |
+
* @return WP_Error|WP_User
|
124 |
+
*/
|
125 |
+
function post_authenticate($user, $username, $password)
|
126 |
+
{
|
127 |
+
global $aio_wp_security;
|
128 |
+
if ( !is_wp_error($user) ) {
|
129 |
+
// Authentication has been successful, there's nothing to do here.
|
130 |
+
return $user;
|
131 |
+
}
|
132 |
+
if ( empty($username) || empty($password) ) {
|
133 |
+
// Neither log nor block login attempts with empty username or password.
|
134 |
+
return $user;
|
135 |
+
}
|
136 |
+
if ( $user->get_error_code() === 'account_pending' ) {
|
137 |
+
// Neither log nor block users attempting to log in before their registration is approved.
|
138 |
+
return $user;
|
139 |
+
}
|
140 |
+
// Login failed for non-trivial reason
|
141 |
+
$this->increment_failed_logins($username);
|
142 |
+
if ( $aio_wp_security->configs->get_value('aiowps_enable_login_lockdown') == '1' )
|
143 |
+
{
|
144 |
+
$is_whitelisted = false;
|
145 |
+
//check if lockdown whitelist enabled
|
146 |
+
if ( $aio_wp_security->configs->get_value('aiowps_lockdown_enable_whitelisting') == '1' ){
|
147 |
+
$ip = AIOWPSecurity_Utility_IP::get_user_ip_address(); //Get the IP address of user
|
148 |
+
$whitelisted_ips = $aio_wp_security->configs->get_value('aiowps_lockdown_allowed_ip_addresses');
|
149 |
+
$is_whitelisted = AIOWPSecurity_Utility_IP::is_ip_whitelisted($ip, $whitelisted_ips);
|
150 |
+
}
|
151 |
+
|
152 |
+
if($is_whitelisted === false){
|
153 |
+
// Too many failed logins from user's IP?
|
154 |
+
$login_attempts_permitted = absint($aio_wp_security->configs->get_value('aiowps_max_login_attempts'));
|
155 |
+
$too_many_failed_logins = $login_attempts_permitted <= $this->get_login_fail_count();
|
156 |
+
// Is an invalid username or email the reason for login error?
|
157 |
+
$invalid_username = ($user->get_error_code() === 'invalid_username' || $user->get_error_code() == 'invalid_email');
|
158 |
+
// Should an invalid username be immediately locked?
|
159 |
+
$invalid_username_lockdown = $aio_wp_security->configs->get_value('aiowps_enable_invalid_username_lockdown') == '1';
|
160 |
+
$lock_invalid_username = $invalid_username && $invalid_username_lockdown;
|
161 |
+
// Should an invalid username be blocked as per blacklist?
|
162 |
+
$instant_lockout_users_list = $aio_wp_security->configs->get_value('aiowps_instantly_lockout_specific_usernames');
|
163 |
+
if ( !is_array($instant_lockout_users_list) ) {
|
164 |
+
$instant_lockout_users_list = array();
|
165 |
+
}
|
166 |
+
$username_blacklisted = $invalid_username && in_array($username, $instant_lockout_users_list);
|
167 |
+
if ( $too_many_failed_logins || $lock_invalid_username || $username_blacklisted )
|
168 |
+
{
|
169 |
+
$this->lock_the_user($username, 'login_fail');
|
170 |
+
}
|
171 |
+
}
|
172 |
+
}
|
173 |
+
|
174 |
+
if ( $aio_wp_security->configs->get_value('aiowps_set_generic_login_msg') == '1' )
|
175 |
+
{
|
176 |
+
// Return generic error message if configured
|
177 |
+
return new WP_Error('authentication_failed', __('<strong>ERROR</strong>: Invalid login credentials.', 'all-in-one-wp-security-and-firewall'));
|
178 |
+
}
|
179 |
+
return $user;
|
180 |
+
}
|
181 |
+
/*
|
182 |
+
* This function queries the aiowps_login_lockdown table.
|
183 |
+
* If the release_date has not expired AND the current visitor IP addr matches
|
184 |
+
* it will return a record
|
185 |
+
*/
|
186 |
+
function check_locked_user()
|
187 |
+
{
|
188 |
+
global $wpdb;
|
189 |
+
$login_lockdown_table = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
190 |
+
$ip = AIOWPSecurity_Utility_IP::get_user_ip_address(); //Get the IP address of user
|
191 |
+
if(empty($ip)) return false;
|
192 |
+
$now = current_time( 'mysql' );
|
193 |
+
$locked_user = $wpdb->get_row("SELECT * FROM $login_lockdown_table " .
|
194 |
+
"WHERE release_date > '".$now."' AND " .
|
195 |
+
"failed_login_ip = '" . esc_sql($ip) . "'", ARRAY_A);
|
196 |
+
return $locked_user;
|
197 |
+
}
|
198 |
+
/*
|
199 |
+
* This function queries the aiowps_failed_logins table and returns the number of failures for current IP range within allowed failure period
|
200 |
+
*/
|
201 |
+
function get_login_fail_count()
|
202 |
+
{
|
203 |
+
global $wpdb, $aio_wp_security;
|
204 |
+
$failed_logins_table = AIOWPSEC_TBL_FAILED_LOGINS;
|
205 |
+
$login_retry_interval = $aio_wp_security->configs->get_value('aiowps_retry_time_period');
|
206 |
+
$now = current_time( 'mysql' );
|
207 |
+
$ip = AIOWPSecurity_Utility_IP::get_user_ip_address(); //Get the IP address of user
|
208 |
+
if(empty($ip)) return false;
|
209 |
+
$login_failures = $wpdb->get_var("SELECT COUNT(ID) FROM $failed_logins_table " .
|
210 |
+
"WHERE failed_login_date + INTERVAL " .
|
211 |
+
$login_retry_interval . " MINUTE > '" . esc_sql($now) . "' AND " .
|
212 |
+
"login_attempt_ip = '" . esc_sql($ip) . "'");
|
213 |
+
return $login_failures;
|
214 |
+
}
|
215 |
+
/**
|
216 |
+
* Adds an entry to the `aiowps_login_lockdown` table.
|
217 |
+
* @param string $username User's username or email
|
218 |
+
* @param string $lock_reason
|
219 |
+
*/
|
220 |
+
function lock_the_user($username, $lock_reason='login_fail')
|
221 |
+
{
|
222 |
+
global $wpdb, $aio_wp_security;
|
223 |
+
$login_lockdown_table = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
224 |
+
$lockout_time_length = $aio_wp_security->configs->get_value('aiowps_lockout_time_length');
|
225 |
+
$ip = AIOWPSecurity_Utility_IP::get_user_ip_address(); //Get the IP address of user
|
226 |
+
if(empty($ip)) return;
|
227 |
+
$ip_range = AIOWPSecurity_Utility_IP::get_sanitized_ip_range($ip); //Get the IP range of the current user
|
228 |
+
$user = is_email($username) ? get_user_by('email', $username) : get_user_by('login', $username); //Returns WP_User object if exists
|
229 |
+
$ip_range = apply_filters('aiowps_before_lockdown', $ip_range);
|
230 |
+
if ($user)
|
231 |
+
{
|
232 |
+
//If the login attempt was made using a valid user set variables for DB storage later on
|
233 |
+
$user_id = $user->ID;
|
234 |
+
} else {
|
235 |
+
//If the login attempt was made using a non-existent user then let's set user_id to blank and record the attempted user login name for DB storage later on
|
236 |
+
$user_id = 0;
|
237 |
+
}
|
238 |
+
$ip_range_str = esc_sql($ip_range).'.*';
|
239 |
+
|
240 |
+
$lock_time = current_time( 'mysql' );
|
241 |
+
$lock_minutes = $lockout_time_length;
|
242 |
+
$newtimestamp = strtotime($lock_time.' + '.$lock_minutes.' minute');
|
243 |
+
$release_time = date('Y-m-d H:i:s', $newtimestamp);
|
244 |
+
$data = array('user_id' => $user_id, 'user_login' => $username, 'lockdown_date' => $lock_time, 'release_date' => $release_time, 'failed_login_IP' => $ip, 'lock_reason' => $lock_reason);
|
245 |
+
$format = array('%d', '%s', '%s', '%s', '%s', '%s');
|
246 |
+
$result = $wpdb->insert($login_lockdown_table, $data, $format);
|
247 |
+
|
248 |
+
if ($result === FALSE)
|
249 |
+
{
|
250 |
+
$aio_wp_security->debug_logger->log_debug("Error inserting record into ".$login_lockdown_table,4);//Log the highly unlikely event of DB error
|
251 |
+
}
|
252 |
+
else
|
253 |
+
{
|
254 |
+
do_action('aiowps_lockdown_event', $ip_range, $username);
|
255 |
+
$this->send_ip_lock_notification_email($username, $ip_range, $ip);
|
256 |
+
$aio_wp_security->debug_logger->log_debug("The following IP address range has been locked out for exceeding the maximum login attempts: ".$ip_range,2);//Log the lockdown event
|
257 |
+
}
|
258 |
+
}
|
259 |
+
/**
|
260 |
+
* Adds an entry to the `aiowps_failed_logins` table.
|
261 |
+
* @param string $username User's username or email
|
262 |
+
*/
|
263 |
+
function increment_failed_logins($username)
|
264 |
+
{
|
265 |
+
global $wpdb, $aio_wp_security;
|
266 |
+
$login_fails_table = AIOWPSEC_TBL_FAILED_LOGINS;
|
267 |
+
$ip = AIOWPSecurity_Utility_IP::get_user_ip_address(); //Get the IP address of user
|
268 |
+
if(empty($ip)) return;
|
269 |
+
$user = is_email($username) ? get_user_by('email', $username) : get_user_by('login', $username); //Returns WP_User object if it exists
|
270 |
+
if ($user)
|
271 |
+
{
|
272 |
+
//If the login attempt was made using a valid user set variables for DB storage later on
|
273 |
+
$user_id = $user->ID;
|
274 |
+
} else {
|
275 |
+
//If the login attempt was made using a non-existent user then let's set user_id to blank and record the attempted user login name for DB storage later on
|
276 |
+
$user_id = 0;
|
277 |
+
}
|
278 |
+
$ip_str = esc_sql($ip);
|
279 |
+
$now = current_time( 'mysql' );
|
280 |
+
$data = array('user_id' => $user_id, 'user_login' => $username, 'failed_login_date' => $now, 'login_attempt_ip' => $ip_str);
|
281 |
+
$format = array('%d', '%s', '%s', '%s');
|
282 |
+
$result = $wpdb->insert($login_fails_table, $data, $format);
|
283 |
+
if ($result === FALSE)
|
284 |
+
{
|
285 |
+
$aio_wp_security->debug_logger->log_debug("Error inserting record into ".$login_fails_table,4);//Log the highly unlikely event of DB error
|
286 |
+
}
|
287 |
+
}
|
288 |
+
/**
|
289 |
+
* @param string $username User's username or email
|
290 |
+
*/
|
291 |
+
function send_ip_lock_notification_email($username, $ip_range, $ip)
|
292 |
+
{
|
293 |
+
global $aio_wp_security;
|
294 |
+
$email_notification_enabled = $aio_wp_security->configs->get_value('aiowps_enable_email_notify');
|
295 |
+
if ($email_notification_enabled == 1)
|
296 |
+
{
|
297 |
+
$to_email_address = $aio_wp_security->configs->get_value('aiowps_email_address');
|
298 |
+
$subject = '['.get_option('home').'] '. __('Site Lockout Notification','all-in-one-wp-security-and-firewall');
|
299 |
+
$email_msg = __('A lockdown event has occurred due to too many failed login attempts or invalid username:','all-in-one-wp-security-and-firewall')."\n";
|
300 |
+
$email_msg .= __('Username:', 'all-in-one-wp-security-and-firewall') . ' ' . $username . "\n";
|
301 |
+
$email_msg .= __('IP Address:', 'all-in-one-wp-security-and-firewall') . ' ' . $ip . "\n\n";
|
302 |
+
$email_msg .= __('IP Range:', 'all-in-one-wp-security-and-firewall') . ' ' . $ip_range . '.*' . "\n\n";
|
303 |
+
$email_msg .= __("Log into your site's WordPress administration panel to see the duration of the lockout or to unlock the user.",'all-in-one-wp-security-and-firewall') . "\n";
|
304 |
+
$site_title = get_bloginfo( 'name' );
|
305 |
+
$from_name = empty($site_title)?'WordPress':$site_title;
|
306 |
+
$email_header = 'From: '.$from_name.' <'.get_bloginfo('admin_email').'>' . "\r\n\\";
|
307 |
+
$sendMail = wp_mail($to_email_address, $subject, $email_msg, $email_header);
|
308 |
+
if(FALSE === $sendMail){
|
309 |
+
$aio_wp_security->debug_logger->log_debug("Lockout notification email failed to send to ".$to_email_address." for IP ".$ip,4);
|
310 |
+
}
|
311 |
+
}
|
312 |
+
}
|
313 |
+
|
314 |
+
/**
|
315 |
+
* Generates and returns an unlock request link which will be used to send to the user.
|
316 |
+
*
|
317 |
+
* @global type $wpdb
|
318 |
+
* @global AIO_WP_Security $aio_wp_security
|
319 |
+
* @param type $ip_range
|
320 |
+
* @return string or FALSE on failure
|
321 |
+
*/
|
322 |
+
static function generate_unlock_request_link($ip_range)
|
323 |
+
{
|
324 |
+
//Get the locked user row from lockdown table
|
325 |
+
global $wpdb, $aio_wp_security;
|
326 |
+
$unlock_link = '';
|
327 |
+
$lockdown_table_name = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
328 |
+
$secret_rand_key = (md5(uniqid(rand(), true)));
|
329 |
+
$sql = $wpdb->prepare("UPDATE $lockdown_table_name SET unlock_key = '$secret_rand_key' WHERE release_date > now() AND failed_login_ip LIKE %s","%".esc_sql($ip_range)."%");
|
330 |
+
$res = $wpdb->query($sql);
|
331 |
+
if($res == NULL){
|
332 |
+
$aio_wp_security->debug_logger->log_debug("No locked user found with IP range ".$ip_range,4);
|
333 |
+
return false;
|
334 |
+
}else{
|
335 |
+
//Check if unlock requestor submitted from a woocommerce account login page
|
336 |
+
if(isset($_POST['aiowps-woo-login'])){
|
337 |
+
$date_time = current_time( 'mysql' );
|
338 |
+
$data = array('date_time' => $date_time, 'meta_key1' => 'woo_unlock_request_key', 'meta_value1' => $secret_rand_key);
|
339 |
+
$result = $wpdb->insert(AIOWPSEC_TBL_GLOBAL_META_DATA, $data);
|
340 |
+
if ($result === false){
|
341 |
+
$aio_wp_security->debug_logger->log_debug("generate_unlock_request_link() - Error inserting woo_unlock_request_key to AIOWPSEC_TBL_GLOBAL_META_DATA table for secret key ".$secret_rand_key,4);
|
342 |
+
}
|
343 |
+
}
|
344 |
+
$query_param = array('aiowps_auth_key'=>$secret_rand_key);
|
345 |
+
$wp_site_url = AIOWPSEC_WP_URL;
|
346 |
+
$unlock_link = esc_url(add_query_arg($query_param, $wp_site_url));
|
347 |
+
}
|
348 |
+
return $unlock_link;
|
349 |
+
}
|
350 |
+
/*
|
351 |
+
* This function will process an unlock request when someone clicks on the special URL
|
352 |
+
* It will check if the special random code matches that in lockdown table for the relevant user
|
353 |
+
* If so, it will unlock the user
|
354 |
+
*/
|
355 |
+
static function process_unlock_request($unlock_key)
|
356 |
+
{
|
357 |
+
global $wpdb, $aio_wp_security;
|
358 |
+
$lockdown_table_name = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
359 |
+
|
360 |
+
$unlock_command = $wpdb->prepare( "UPDATE ".$lockdown_table_name." SET release_date = now() WHERE unlock_key = %s", $unlock_key );
|
361 |
+
$result = $wpdb->query($unlock_command);
|
362 |
+
if($result === false)
|
363 |
+
{
|
364 |
+
$aio_wp_security->debug_logger->log_debug("Error unlocking user with unlock_key ".$unlock_key,4);
|
365 |
+
}
|
366 |
+
else
|
367 |
+
{
|
368 |
+
//Now check if this unlock operation is for a woocommerce login
|
369 |
+
$aiowps_global_meta_tbl_name = AIOWPSEC_TBL_GLOBAL_META_DATA;
|
370 |
+
$sql = $wpdb->prepare("SELECT * FROM $aiowps_global_meta_tbl_name WHERE meta_key1=%s AND meta_value1=%s", 'woo_unlock_request_key', $unlock_key);
|
371 |
+
$woo_result = $wpdb->get_row($sql, OBJECT);
|
372 |
+
if(empty($woo_result)){
|
373 |
+
$woo_unlock = false;
|
374 |
+
}else{
|
375 |
+
$woo_unlock = true;
|
376 |
+
}
|
377 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_rename_login_page')=='1'){
|
378 |
+
if (get_option('permalink_structure')){
|
379 |
+
$home_url = trailingslashit(home_url());
|
380 |
+
}else{
|
381 |
+
$home_url = trailingslashit(home_url()) . '?';
|
382 |
+
}
|
383 |
+
if ( $woo_unlock ){
|
384 |
+
$login_url = wc_get_page_permalink( 'myaccount' ); //redirect to woo login page if applicable
|
385 |
+
//Now let's cleanup after ourselves and delete the woo-related row in the AIOWPSEC_TBL_GLOBAL_META_DATA table
|
386 |
+
$delete = $wpdb->delete( $aiowps_global_meta_tbl_name, array( 'meta_key1' => 'woo_unlock_request_key', 'meta_value1' => $unlock_key ) );
|
387 |
+
if($delete === false){
|
388 |
+
$aio_wp_security->debug_logger->log_debug("process_unlock_request(): Error deleting row from AIOWPSEC_TBL_GLOBAL_META_DATA for meta_key1=woo_unlock_request_key and meta_value1=".$unlock_key,4);
|
389 |
+
}
|
390 |
+
}else{
|
391 |
+
$login_url = $home_url.$aio_wp_security->configs->get_value('aiowps_login_page_slug');
|
392 |
+
}
|
393 |
+
|
394 |
+
AIOWPSecurity_Utility::redirect_to_url($login_url);
|
395 |
+
}else{
|
396 |
+
AIOWPSecurity_Utility::redirect_to_url(wp_login_url());
|
397 |
+
}
|
398 |
+
}
|
399 |
+
}
|
400 |
+
|
401 |
+
/*
|
402 |
+
* This function sends an unlock request email to a locked out user
|
403 |
+
*/
|
404 |
+
static function send_unlock_request_email($email, $unlock_link)
|
405 |
+
{
|
406 |
+
global $aio_wp_security;
|
407 |
+
$subject = '['.get_option('siteurl').'] '. __('Unlock Request Notification','all-in-one-wp-security-and-firewall');
|
408 |
+
$email_msg
|
409 |
+
= sprintf(__('You have requested for the account with email address %s to be unlocked. Please click the link below to unlock your account:','all-in-one-wp-security-and-firewall'), $email) . "\n"
|
410 |
+
. sprintf(__('Unlock link: %s', 'all-in-one-wp-security-and-firewall'), $unlock_link) . "\n\n"
|
411 |
+
. __('After clicking the above link you will be able to login to the WordPress administration panel.', 'all-in-one-wp-security-and-firewall') . "\n"
|
412 |
+
;
|
413 |
+
$site_title = get_bloginfo( 'name' );
|
414 |
+
$from_name = empty($site_title)?'WordPress':$site_title;
|
415 |
+
$email_header = 'From: '.$from_name.' <'.get_bloginfo('admin_email').'>' . "\r\n\\";
|
416 |
+
$sendMail = wp_mail($email, $subject, $email_msg, $email_header);
|
417 |
+
if ( false === $sendMail ) {
|
418 |
+
$aio_wp_security->debug_logger->log_debug("Unlock Request Notification email failed to send to " . $email, 4);
|
419 |
+
}
|
420 |
+
}
|
421 |
+
|
422 |
+
/*
|
423 |
+
* This function will check the settings and log the user after the configured time period
|
424 |
+
*/
|
425 |
+
function aiowps_force_logout_action_handler()
|
426 |
+
{
|
427 |
+
global $aio_wp_security;
|
428 |
+
//$aio_wp_security->debug_logger->log_debug("Force Logout - Checking if any user need to be logged out...");
|
429 |
+
if($aio_wp_security->configs->get_value('aiowps_enable_forced_logout')=='1') //if this feature is enabled then do something
|
430 |
+
{
|
431 |
+
if(is_user_logged_in())
|
432 |
+
{
|
433 |
+
$current_user = wp_get_current_user();
|
434 |
+
$user_id = $current_user->ID;
|
435 |
+
$current_time = current_time( 'mysql' );
|
436 |
+
$login_time = $this->get_wp_user_last_login_time($user_id);
|
437 |
+
$diff = strtotime($current_time) - strtotime($login_time);
|
438 |
+
$logout_time_interval_value = $aio_wp_security->configs->get_value('aiowps_logout_time_period');
|
439 |
+
$logout_time_interval_val_seconds = $logout_time_interval_value * 60;
|
440 |
+
if($diff > $logout_time_interval_val_seconds)
|
441 |
+
{
|
442 |
+
$aio_wp_security->debug_logger->log_debug("Force Logout - This user logged in more than (".$logout_time_interval_value.") minutes ago. Doing a force log out for the user with username: ".$current_user->user_login);
|
443 |
+
$this->wp_logout_action_handler(); //this will register the logout time/date in the logout_date column
|
444 |
+
|
445 |
+
$curr_page_url = AIOWPSecurity_Utility::get_current_page_url();
|
446 |
+
$after_logout_payload = array('redirect_to'=>$curr_page_url, 'msg'=>$this->key_login_msg.'=session_expired');
|
447 |
+
//Save some of the logout redirect data to a transient
|
448 |
+
AIOWPSecurity_Utility::is_multisite_install() ? set_site_transient('aiowps_logout_payload', $after_logout_payload, 30 * 60) : set_transient('aiowps_logout_payload', $after_logout_payload, 30 * 60);
|
449 |
+
$logout_url = AIOWPSEC_WP_URL.'?aiowpsec_do_log_out=1';
|
450 |
+
$logout_url = AIOWPSecurity_Utility::add_query_data_to_url($logout_url, 'al_additional_data', '1');
|
451 |
+
AIOWPSecurity_Utility::redirect_to_url($logout_url);
|
452 |
+
}
|
453 |
+
}
|
454 |
+
}
|
455 |
+
}
|
456 |
+
|
457 |
+
function get_wp_user_last_login_time($user_id)
|
458 |
+
{
|
459 |
+
$last_login = get_user_meta($user_id, 'last_login_time', true);
|
460 |
+
return $last_login;
|
461 |
+
}
|
462 |
+
static function wp_login_action_handler($user_login, $user='')
|
463 |
+
{
|
464 |
+
global $wpdb, $aio_wp_security;
|
465 |
+
$login_activity_table = AIOWPSEC_TBL_USER_LOGIN_ACTIVITY;
|
466 |
+
|
467 |
+
if ($user == ''){
|
468 |
+
//Try and get user object
|
469 |
+
$user = get_user_by('login', $user_login); //This should return WP_User obj
|
470 |
+
if (!$user){
|
471 |
+
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_User_Login::wp_login_action_handler: Unable to get WP_User object for login ".$user_login,4);
|
472 |
+
return;
|
473 |
+
}
|
474 |
+
}
|
475 |
+
$login_date_time = current_time( 'mysql' );
|
476 |
+
update_user_meta($user->ID, 'last_login_time', $login_date_time); //store last login time in meta table
|
477 |
+
$curr_ip_address = AIOWPSecurity_Utility_IP::get_user_ip_address();
|
478 |
+
$insert = "INSERT INTO " . $login_activity_table . " (user_id, user_login, login_date, login_ip) " .
|
479 |
+
"VALUES ('" . $user->ID . "', '" . $user_login . "', '" . $login_date_time . "', '" . $curr_ip_address . "')";
|
480 |
+
$result = $wpdb->query($insert);
|
481 |
+
if ($result === FALSE)
|
482 |
+
{
|
483 |
+
$aio_wp_security->debug_logger->log_debug("Error inserting record into ".$login_activity_table,4);//Log the highly unlikely event of DB error
|
484 |
+
}
|
485 |
+
|
486 |
+
}
|
487 |
+
/**
|
488 |
+
* The handler for logout events, ie, uses the WP "clear_auth_cookies" action.
|
489 |
+
|
490 |
+
* Modifies the login activity record for the current user by registering the logout time/date in the logout_date column.
|
491 |
+
* (NOTE: Because of the way we are doing a force logout, the "clear_auth_cookies" hook does not fire.
|
492 |
+
* upon auto logout. The current workaround is to call this function directly from the aiowps_force_logout_action_handler() when
|
493 |
+
* an auto logout occurs due to the "force logout" feature).
|
494 |
+
*
|
495 |
+
*/
|
496 |
+
function wp_logout_action_handler()
|
497 |
+
{
|
498 |
+
global $wpdb, $aio_wp_security;
|
499 |
+
$current_user = wp_get_current_user();
|
500 |
+
$ip_addr = AIOWPSecurity_Utility_IP::get_user_ip_address();
|
501 |
+
$user_id = $current_user->ID;
|
502 |
+
//Clean up transients table
|
503 |
+
$this->update_user_online_transient($user_id, $ip_addr);
|
504 |
+
$login_activity_table = AIOWPSEC_TBL_USER_LOGIN_ACTIVITY;
|
505 |
+
$logout_date_time = current_time( 'mysql' );
|
506 |
+
$data = array('logout_date' => $logout_date_time);
|
507 |
+
$where = array('user_id' => $user_id,
|
508 |
+
'login_ip' => $ip_addr,
|
509 |
+
'logout_date' => '0000-00-00 00:00:00');
|
510 |
+
$result = $wpdb->update($login_activity_table, $data, $where);
|
511 |
+
if ($result === FALSE)
|
512 |
+
{
|
513 |
+
$aio_wp_security->debug_logger->log_debug("Error inserting record into ".$login_activity_table,4);//Log the highly unlikely event of DB error
|
514 |
+
}
|
515 |
+
}
|
516 |
+
/**
|
517 |
+
* This will clean up the "users_online" transient entry for the current user.
|
518 |
+
*
|
519 |
+
*/
|
520 |
+
function update_user_online_transient($user_id, $ip_addr)
|
521 |
+
{
|
522 |
+
global $aio_wp_security;
|
523 |
+
$logged_in_users = (AIOWPSecurity_Utility::is_multisite_install() ? get_site_transient('users_online') : get_transient('users_online'));
|
524 |
+
//$logged_in_users = get_transient('users_online');
|
525 |
+
if ($logged_in_users === false || $logged_in_users == NULL)
|
526 |
+
{
|
527 |
+
return;
|
528 |
+
}
|
529 |
+
$j = 0;
|
530 |
+
foreach ($logged_in_users as $value)
|
531 |
+
{
|
532 |
+
if ($value['user_id'] == $user_id && strcmp($value['ip_address'], $ip_addr) == 0)
|
533 |
+
{
|
534 |
+
unset($logged_in_users[$j]);
|
535 |
+
break;
|
536 |
+
}
|
537 |
+
$j++;
|
538 |
+
}
|
539 |
+
//Save the transient
|
540 |
+
AIOWPSecurity_Utility::is_multisite_install() ? set_site_transient('users_online', $logged_in_users, 30 * 60) : set_transient('users_online', $logged_in_users, 30 * 60);
|
541 |
+
//set_transient('users_online', $logged_in_users, 30 * 60); //Set transient with the data obtained above and also set the expiry to 30min
|
542 |
+
return;
|
543 |
+
}
|
544 |
+
|
545 |
+
/**
|
546 |
+
* The handler for the WP "login_message" filter
|
547 |
+
* Adds custom messages to the other messages that appear above the login form.
|
548 |
+
*
|
549 |
+
* NOTE: This method is automatically called by WordPress for displaying
|
550 |
+
* text above the login form.
|
551 |
+
*
|
552 |
+
* @param string $message the output from earlier login_message filters
|
553 |
+
* @return string
|
554 |
+
*
|
555 |
+
*/
|
556 |
+
function aiowps_login_message($message = '')
|
557 |
+
{
|
558 |
+
global $aio_wp_security;
|
559 |
+
$msg = '';
|
560 |
+
if(isset($_GET[$this->key_login_msg]) && !empty($_GET[$this->key_login_msg]))
|
561 |
+
{
|
562 |
+
$logout_msg = strip_tags($_GET[$this->key_login_msg]);
|
563 |
+
}
|
564 |
+
if (!empty($logout_msg))
|
565 |
+
{
|
566 |
+
switch ($logout_msg) {
|
567 |
+
case 'session_expired':
|
568 |
+
$msg = sprintf(__('Your session has expired because it has been over %d minutes since your last login.', 'all-in-one-wp-security-and-firewall'), $aio_wp_security->configs->get_value('aiowps_logout_time_period'));
|
569 |
+
$msg .= ' ' . __('Please log back in to continue.', 'all-in-one-wp-security-and-firewall');
|
570 |
+
break;
|
571 |
+
case 'admin_user_changed':
|
572 |
+
$msg = __('You were logged out because you just changed the "admin" username.', 'all-in-one-wp-security-and-firewall');
|
573 |
+
$msg .= ' ' . __('Please log back in to continue.', 'all-in-one-wp-security-and-firewall');
|
574 |
+
break;
|
575 |
+
default:
|
576 |
+
}
|
577 |
+
}
|
578 |
+
if (!empty($msg))
|
579 |
+
{
|
580 |
+
$msg = htmlspecialchars($msg, ENT_QUOTES, 'UTF-8');
|
581 |
+
$message .= '<p class="login message">'. $msg . '</p>';
|
582 |
+
}
|
583 |
+
return $message;
|
584 |
+
}
|
585 |
+
/**
|
586 |
+
* This function will generate an unlock request form to be inserted inside
|
587 |
+
* error message when user gets locked out.
|
588 |
+
*
|
589 |
+
* @return string
|
590 |
+
*/
|
591 |
+
function get_unlock_request_form()
|
592 |
+
{
|
593 |
+
global $aio_wp_security;
|
594 |
+
$unlock_request_form = '';
|
595 |
+
//Let's encode some hidden data and make a form
|
596 |
+
$unlock_secret_string = $aio_wp_security->configs->get_value('aiowps_unlock_request_secret_key');
|
597 |
+
$current_time = time();
|
598 |
+
$enc_result = base64_encode($current_time.$unlock_secret_string);
|
599 |
+
$unlock_request_form .= '<form method="post" action=""><div style="padding-bottom:10px;"><input type="hidden" name="aiowps-unlock-string-info" id="aiowps-unlock-string-info" value="'.$enc_result.'" />';
|
600 |
+
$unlock_request_form .= '<input type="hidden" name="aiowps-unlock-temp-string" id="aiowps-unlock-temp-string" value="'.$current_time.'" />';
|
601 |
+
if(isset($_POST['woocommerce-login-nonce'])){
|
602 |
+
$unlock_request_form .= '<input type="hidden" name="aiowps-woo-login" id="aiowps-woo-login" value="1" />';
|
603 |
+
}
|
604 |
+
$unlock_request_form .= '<button type="submit" name="aiowps_unlock_request" id="aiowps_unlock_request" class="button">'.__('Request Unlock', 'all-in-one-wp-security-and-firewall').'</button></div></form>';
|
605 |
+
return $unlock_request_form;
|
606 |
+
}
|
607 |
+
}
|
{tags/4.3.7.1/trunk/classes → classes}/wp-security-user-registration.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/classes → classes}/wp-security-utility-file.php
RENAMED
File without changes
|
{trunk/classes → classes}/wp-security-utility-htaccess.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/classes → classes}/wp-security-utility-ip-address.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/classes → classes}/wp-security-utility.php
RENAMED
File without changes
|
classes/wp-security-wp-footer-content.php
ADDED
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if(!defined('ABSPATH')){
|
3 |
+
exit;//Exit if accessed directly
|
4 |
+
}
|
5 |
+
|
6 |
+
class AIOWPSecurity_WP_Footer_Content {
|
7 |
+
|
8 |
+
function __construct() {
|
9 |
+
//Add content that need to be outputted in the footer area.
|
10 |
+
|
11 |
+
global $aio_wp_security;
|
12 |
+
if($aio_wp_security->configs->get_value('aiowps_default_recaptcha')) {
|
13 |
+
$this->print_google_recaptcha_api();
|
14 |
+
}
|
15 |
+
|
16 |
+
// Activate the copy protection feature for non-admin users
|
17 |
+
$copy_protection_active = $aio_wp_security->configs->get_value('aiowps_copy_protection') == '1';
|
18 |
+
if ( $copy_protection_active && !current_user_can(AIOWPSEC_MANAGEMENT_PERMISSION) ) {
|
19 |
+
$this->output_copy_protection_code();
|
20 |
+
}
|
21 |
+
|
22 |
+
//TODO - add other footer output content here
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* For Woocommerce my account page - display two separate Google reCaptcha forms "explicitly"
|
27 |
+
* @global type $aio_wp_security
|
28 |
+
*/
|
29 |
+
function print_google_recaptcha_api() {
|
30 |
+
global $aio_wp_security;
|
31 |
+
$site_key = esc_html( $aio_wp_security->configs->get_value('aiowps_recaptcha_site_key') );
|
32 |
+
?>
|
33 |
+
<script type="text/javascript">
|
34 |
+
var verifyCallback = function(response) {
|
35 |
+
alert(response);
|
36 |
+
};
|
37 |
+
var onloadCallback = function() {
|
38 |
+
if ( jQuery('#woo_recaptcha_1').length ) {
|
39 |
+
grecaptcha.render('woo_recaptcha_1', {
|
40 |
+
'sitekey' : '<?php echo $site_key; ?>',
|
41 |
+
});
|
42 |
+
}
|
43 |
+
if ( jQuery('#woo_recaptcha_2').length ) {
|
44 |
+
grecaptcha.render('woo_recaptcha_2', {
|
45 |
+
'sitekey' : '<?php echo $site_key; ?>',
|
46 |
+
});
|
47 |
+
}
|
48 |
+
};
|
49 |
+
</script>
|
50 |
+
<script src='https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit' async defer></script>
|
51 |
+
<?php
|
52 |
+
}
|
53 |
+
|
54 |
+
function output_copy_protection_code() {
|
55 |
+
?>
|
56 |
+
<meta http-equiv="imagetoolbar" content="no"><!-- disable image toolbar (if any) -->
|
57 |
+
<script type="text/javascript">
|
58 |
+
/*<![CDATA[*/
|
59 |
+
document.oncontextmenu = function() {
|
60 |
+
return false;
|
61 |
+
};
|
62 |
+
document.onselectstart = function() {
|
63 |
+
if (event.srcElement.type != "text" && event.srcElement.type != "textarea" && event.srcElement.type != "password") {
|
64 |
+
return false;
|
65 |
+
}
|
66 |
+
else {
|
67 |
+
return true;
|
68 |
+
}
|
69 |
+
};
|
70 |
+
if (window.sidebar) {
|
71 |
+
document.onmousedown = function(e) {
|
72 |
+
var obj = e.target;
|
73 |
+
if (obj.tagName.toUpperCase() == 'SELECT'
|
74 |
+
|| obj.tagName.toUpperCase() == "INPUT"
|
75 |
+
|| obj.tagName.toUpperCase() == "TEXTAREA"
|
76 |
+
|| obj.tagName.toUpperCase() == "PASSWORD") {
|
77 |
+
return true;
|
78 |
+
}
|
79 |
+
else {
|
80 |
+
return false;
|
81 |
+
}
|
82 |
+
};
|
83 |
+
}
|
84 |
+
document.ondragstart = function() {
|
85 |
+
return false;
|
86 |
+
};
|
87 |
+
/*]]>*/
|
88 |
+
</script>
|
89 |
+
<?php
|
90 |
+
}
|
91 |
+
|
92 |
+
}
|
93 |
+
//End of class
|
{tags/4.3.7.1/trunk/classes → classes}/wp-security-wp-loaded-tasks.php
RENAMED
File without changes
|
{tags/2.0/css → css}/index.html
RENAMED
File without changes
|
{tags/4.0.8/css → css}/wp-security-admin-styles.css
RENAMED
File without changes
|
{tags/1.8/css → css}/wp-security-site-lockout-page.css
RENAMED
File without changes
|
{tags/1.7/images → images}/arrow.png
RENAMED
File without changes
|
{tags/1.0/images → images}/error.png
RENAMED
File without changes
|
{tags/1.0/images → images}/feature-difficulty-badge-bg.png
RENAMED
File without changes
|
{tags/1.0/images → images}/feature-points-badge-bg.png
RENAMED
File without changes
|
{tags/1.7/images → images}/form_bg.png
RENAMED
File without changes
|
{tags/2.0/images → images}/index.html
RENAMED
File without changes
|
{tags/1.0/images → images}/info-icon.png
RENAMED
File without changes
|
{tags/1.0/images → images}/loading.gif
RENAMED
File without changes
|
{tags/1.0/images → images}/plugin-icon.png
RENAMED
File without changes
|
{tags/1.0/images → images}/plugin-icon2.png
RENAMED
File without changes
|
{tags/1.0/images → images}/shield-info-icon-36.png
RENAMED
File without changes
|
{tags/1.0/images → images}/shield-security-icon-36.png
RENAMED
File without changes
|
{tags/1.0/images → images}/success.png
RENAMED
File without changes
|
tags/2.0/index.html → index.html
RENAMED
File without changes
|
{tags/2.0/js → js}/index.html
RENAMED
File without changes
|
{tags/3.7.5/js → js}/masonry.pkgd.min.js
RENAMED
File without changes
|
{tags/1.7/js → js}/password-strength-tool.js
RENAMED
File without changes
|
{tags/4.1.0/js → js}/wp-security-admin-script.js
RENAMED
File without changes
|
{tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-de_DE.mo
RENAMED
File without changes
|
{tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-de_DE.po
RENAMED
File without changes
|
{tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-es_ES.mo
RENAMED
File without changes
|
{tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-es_ES.po
RENAMED
File without changes
|
{tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-fa_IR.mo
RENAMED
File without changes
|
{tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-fa_IR.po
RENAMED
File without changes
|
{tags/4.1.0/languages → languages}/all-in-one-wp-security-and-firewall-fr_FR.mo
RENAMED
File without changes
|
{tags/4.1.4/languages → languages}/all-in-one-wp-security-and-firewall-fr_FR.po
RENAMED
File without changes
|
{tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-hu_HU.mo
RENAMED
File without changes
|
{tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-hu_HU.po
RENAMED
File without changes
|
{tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-it_IT.mo
RENAMED
File without changes
|
{tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-it_IT.po
RENAMED
File without changes
|
languages/all-in-one-wp-security-and-firewall-nl_NL.mo
ADDED
Binary file
|
languages/all-in-one-wp-security-and-firewall-nl_NL.po
ADDED
@@ -0,0 +1,4786 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: All In One WP Security vv3.7.2\n"
|
4 |
+
"Report-Msgid-Bugs-To: \n"
|
5 |
+
"POT-Creation-Date: \n"
|
6 |
+
"PO-Revision-Date: 2018-12-16 16:01+0100\n"
|
7 |
+
"Last-Translator: CBO\n"
|
8 |
+
"Language-Team: \n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
13 |
+
"X-Generator: Poedit 2.2\n"
|
14 |
+
"X-Poedit-SourceCharset: utf-8\n"
|
15 |
+
"X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
|
16 |
+
"X-Poedit-Basepath: ..\n"
|
17 |
+
"X-Textdomain-Support: yes\n"
|
18 |
+
"Language: nl_NL\n"
|
19 |
+
"X-Poedit-SearchPath-0: .\n"
|
20 |
+
|
21 |
+
# @ default
|
22 |
+
#: admin/general/wp-security-list-table.php:178
|
23 |
+
msgid "No items found."
|
24 |
+
msgstr "Geen items gevonden."
|
25 |
+
|
26 |
+
# @ default
|
27 |
+
#: admin/general/wp-security-list-table.php:281
|
28 |
+
msgid "Bulk Actions"
|
29 |
+
msgstr "Bulkacties"
|
30 |
+
|
31 |
+
# @ default
|
32 |
+
#: admin/general/wp-security-list-table.php:291
|
33 |
+
msgid "Apply"
|
34 |
+
msgstr "Toepassen"
|
35 |
+
|
36 |
+
# @ default
|
37 |
+
#: admin/general/wp-security-list-table.php:365
|
38 |
+
msgid "Show all dates"
|
39 |
+
msgstr "Toon alle data"
|
40 |
+
|
41 |
+
# @ default
|
42 |
+
#. translators: 1: month name, 2: 4-digit year
|
43 |
+
#: admin/general/wp-security-list-table.php:378
|
44 |
+
#, php-format
|
45 |
+
msgid "%1$s %2$d"
|
46 |
+
msgstr "%1$s %2$d"
|
47 |
+
|
48 |
+
# @ default
|
49 |
+
#: admin/general/wp-security-list-table.php:394
|
50 |
+
msgid "List View"
|
51 |
+
msgstr "Lijst weergave"
|
52 |
+
|
53 |
+
# @ default
|
54 |
+
#: admin/general/wp-security-list-table.php:395
|
55 |
+
msgid "Excerpt View"
|
56 |
+
msgstr "Uittreksel weergave"
|
57 |
+
|
58 |
+
# @ default
|
59 |
+
#: admin/general/wp-security-list-table.php:421
|
60 |
+
#, php-format
|
61 |
+
msgid "%s pending"
|
62 |
+
msgstr "%s in afwachting"
|
63 |
+
|
64 |
+
# @ default
|
65 |
+
#: admin/general/wp-security-list-table.php:477
|
66 |
+
#: admin/general/wp-security-list-table.php:881
|
67 |
+
#, php-format
|
68 |
+
msgid "1 item"
|
69 |
+
msgid_plural "%s items"
|
70 |
+
msgstr[0] "1 item"
|
71 |
+
msgstr[1] "%s items"
|
72 |
+
|
73 |
+
# @ default
|
74 |
+
#: admin/general/wp-security-list-table.php:495
|
75 |
+
msgid "Go to the first page"
|
76 |
+
msgstr "Ga naar de eerste pagina"
|
77 |
+
|
78 |
+
# @ default
|
79 |
+
#: admin/general/wp-security-list-table.php:502
|
80 |
+
msgid "Go to the previous page"
|
81 |
+
msgstr "Ga naar de vorige pagina"
|
82 |
+
|
83 |
+
# @ default
|
84 |
+
#: admin/general/wp-security-list-table.php:511
|
85 |
+
msgid "Current page"
|
86 |
+
msgstr "Huidige pagina"
|
87 |
+
|
88 |
+
# @ default
|
89 |
+
#: admin/general/wp-security-list-table.php:517
|
90 |
+
#, php-format
|
91 |
+
msgctxt "paging"
|
92 |
+
msgid "%1$s of %2$s"
|
93 |
+
msgstr "%1$s of %2$s"
|
94 |
+
|
95 |
+
# @ default
|
96 |
+
#: admin/general/wp-security-list-table.php:521
|
97 |
+
msgid "Go to the next page"
|
98 |
+
msgstr "Ga naar de volgende pagina"
|
99 |
+
|
100 |
+
# @ default
|
101 |
+
#: admin/general/wp-security-list-table.php:528
|
102 |
+
msgid "Go to the last page"
|
103 |
+
msgstr "Ga naar de laatste pagina"
|
104 |
+
|
105 |
+
# @ default
|
106 |
+
#: admin/general/wp-security-list-table.php:653
|
107 |
+
msgid "Select All"
|
108 |
+
msgstr "Alles selecteren"
|
109 |
+
|
110 |
+
# @ all-in-one-wp-security-and-firewall
|
111 |
+
#: admin/wp-security-admin-init.php:157
|
112 |
+
msgid "WP Security"
|
113 |
+
msgstr "WP beveiliging"
|
114 |
+
|
115 |
+
# @ all-in-one-wp-security-and-firewall
|
116 |
+
#: admin/wp-security-admin-init.php:158 admin/wp-security-dashboard-menu.php:23
|
117 |
+
msgid "Dashboard"
|
118 |
+
msgstr "Dashboard"
|
119 |
+
|
120 |
+
# @ all-in-one-wp-security-and-firewall
|
121 |
+
#: admin/wp-security-admin-init.php:159
|
122 |
+
msgid "Settings"
|
123 |
+
msgstr "Instellingen"
|
124 |
+
|
125 |
+
# @ all-in-one-wp-security-and-firewall
|
126 |
+
#: admin/wp-security-admin-init.php:160
|
127 |
+
msgid "User Accounts"
|
128 |
+
msgstr "Gebruiker account"
|
129 |
+
|
130 |
+
# @ all-in-one-wp-security-and-firewall
|
131 |
+
#: admin/wp-security-admin-init.php:161
|
132 |
+
msgid "User Login"
|
133 |
+
msgstr "Gebruiker login"
|
134 |
+
|
135 |
+
# @ all-in-one-wp-security-and-firewall
|
136 |
+
#: admin/wp-security-admin-init.php:162
|
137 |
+
msgid "User Registration"
|
138 |
+
msgstr "Gebruiker registratie"
|
139 |
+
|
140 |
+
# @ all-in-one-wp-security-and-firewall
|
141 |
+
#: admin/wp-security-admin-init.php:163
|
142 |
+
msgid "Database Security"
|
143 |
+
msgstr "Database beveiliging"
|
144 |
+
|
145 |
+
# @ all-in-one-wp-security-and-firewall
|
146 |
+
#: admin/wp-security-admin-init.php:167
|
147 |
+
msgid "Filesystem Security"
|
148 |
+
msgstr "Bestanden beveiliging"
|
149 |
+
|
150 |
+
# @ all-in-one-wp-security-and-firewall
|
151 |
+
#: admin/wp-security-admin-init.php:169
|
152 |
+
msgid "WHOIS Lookup"
|
153 |
+
msgstr "WHOIS opzoeken"
|
154 |
+
|
155 |
+
# @ all-in-one-wp-security-and-firewall
|
156 |
+
#: admin/wp-security-admin-init.php:173
|
157 |
+
msgid "Blacklist Manager"
|
158 |
+
msgstr "Blacklist manager"
|
159 |
+
|
160 |
+
# @ all-in-one-wp-security-and-firewall
|
161 |
+
#: admin/wp-security-admin-init.php:178
|
162 |
+
msgid "Firewall"
|
163 |
+
msgstr "Firewall"
|
164 |
+
|
165 |
+
# @ all-in-one-wp-security-and-firewall
|
166 |
+
#: admin/wp-security-admin-init.php:183
|
167 |
+
msgid "Brute Force"
|
168 |
+
msgstr "Brute force"
|
169 |
+
|
170 |
+
# @ all-in-one-wp-security-and-firewall
|
171 |
+
#: admin/wp-security-admin-init.php:185
|
172 |
+
msgid "SPAM Prevention"
|
173 |
+
msgstr "Anti-spam"
|
174 |
+
|
175 |
+
# @ all-in-one-wp-security-and-firewall
|
176 |
+
#: admin/wp-security-admin-init.php:189
|
177 |
+
msgid "Scanner"
|
178 |
+
msgstr "Scanner"
|
179 |
+
|
180 |
+
# @ all-in-one-wp-security-and-firewall
|
181 |
+
#: admin/wp-security-admin-init.php:191
|
182 |
+
msgid "Maintenance"
|
183 |
+
msgstr "Onderhoud"
|
184 |
+
|
185 |
+
# @ all-in-one-wp-security-and-firewall
|
186 |
+
#: admin/wp-security-admin-init.php:322
|
187 |
+
msgid "Miscellaneous"
|
188 |
+
msgstr "Diversen"
|
189 |
+
|
190 |
+
# @ all-in-one-wp-security-and-firewall
|
191 |
+
#: admin/wp-security-admin-menu.php:43
|
192 |
+
msgid "Settings successfully updated."
|
193 |
+
msgstr "Instellingen succesvol bijgewerkt."
|
194 |
+
|
195 |
+
# @ all-in-one-wp-security-and-firewall
|
196 |
+
#: admin/wp-security-admin-menu.php:50
|
197 |
+
msgid "The selected record(s) deleted successfully!"
|
198 |
+
msgstr "De geselecteerde record (s) met succes verwijderd!"
|
199 |
+
|
200 |
+
# @ all-in-one-wp-security-and-firewall
|
201 |
+
#: admin/wp-security-blacklist-menu.php:22
|
202 |
+
msgid "Ban Users"
|
203 |
+
msgstr "Blokkeer gebruikers"
|
204 |
+
|
205 |
+
# @ all-in-one-wp-security-and-firewall
|
206 |
+
#: admin/wp-security-blacklist-menu.php:80
|
207 |
+
msgid "Nonce check failed for save blacklist settings!"
|
208 |
+
msgstr "Nonce controle mislukt voor het opslaan van blacklist-instellingen!"
|
209 |
+
|
210 |
+
# @ all-in-one-wp-security-and-firewall
|
211 |
+
#: admin/wp-security-blacklist-menu.php:132
|
212 |
+
#: admin/wp-security-brute-force-menu.php:608
|
213 |
+
#: admin/wp-security-list-comment-spammer-ip.php:147
|
214 |
+
msgid "The plugin was unable to write to the .htaccess file. Please edit file manually."
|
215 |
+
msgstr "De plug-in kon niet naar het .htaccess-bestand schrijven. Bewerk het bestand aub handmatig."
|
216 |
+
|
217 |
+
# @ all-in-one-wp-security-and-firewall
|
218 |
+
#: admin/wp-security-blacklist-menu.php:139
|
219 |
+
msgid "Ban IPs or User Agents"
|
220 |
+
msgstr "IP's of gebruikersagenten blokkeren"
|
221 |
+
|
222 |
+
# @ all-in-one-wp-security-and-firewall
|
223 |
+
#: admin/wp-security-blacklist-menu.php:142
|
224 |
+
msgid "The All In One WP Security Blacklist feature gives you the option of banning certain host IP addresses or ranges and also user agents."
|
225 |
+
msgstr "De All In One WP Security Blacklist-functie biedt u de mogelijkheid bepaalde host-IP-adressen of bereiken en ook user-agents te blokkeren."
|
226 |
+
|
227 |
+
# @ all-in-one-wp-security-and-firewall
|
228 |
+
#: admin/wp-security-blacklist-menu.php:143
|
229 |
+
msgid "This feature will deny total site access for users which have IP addresses or user agents matching those which you have configured in the settings below."
|
230 |
+
msgstr "Met deze functie wordt de volledige sitetoegang voor gebruikers met IP-adressen of gebruikersagenten uitgesloten die overeenkomen met de gebruikers die u hebt geconfigureerd in de onderstaande instellingen."
|
231 |
+
|
232 |
+
# @ all-in-one-wp-security-and-firewall
|
233 |
+
#: admin/wp-security-blacklist-menu.php:144
|
234 |
+
msgid "The plugin achieves this by making appropriate modifications to your .htaccess file."
|
235 |
+
msgstr "De plug-in doet dit door de juiste wijzigingen aan te brengen in uw .htaccess-bestand."
|
236 |
+
|
237 |
+
# @ all-in-one-wp-security-and-firewall
|
238 |
+
#: admin/wp-security-blacklist-menu.php:145
|
239 |
+
msgid "By blocking people via the .htaccess file your are using the most secure first line of defence which denies all access to blacklisted visitors as soon as they hit your hosting server."
|
240 |
+
msgstr "Door mensen te blokkeren via het .htaccess-bestand, gebruikt u de veiligste eerste verdedigingslinie die alle toegang tot op de zwarte lijst geplaatste bezoekers tegenhout zodra ze uw hostingserver bezoeken."
|
241 |
+
|
242 |
+
# @ all-in-one-wp-security-and-firewall
|
243 |
+
#: admin/wp-security-blacklist-menu.php:151
|
244 |
+
msgid "IP Hosts and User Agent Blacklist Settings"
|
245 |
+
msgstr "IP-hosts en User Agent Blacklist-instellingen"
|
246 |
+
|
247 |
+
# @ all-in-one-wp-security-and-firewall
|
248 |
+
#: admin/wp-security-blacklist-menu.php:162
|
249 |
+
msgid "Enable IP or User Agent Blacklisting"
|
250 |
+
msgstr "Schakel Blacklisting voor IP of User Agent in"
|
251 |
+
|
252 |
+
# @ all-in-one-wp-security-and-firewall
|
253 |
+
#: admin/wp-security-blacklist-menu.php:165
|
254 |
+
msgid "Check this if you want to enable the banning (or blacklisting) of selected IP addresses and/or user agents specified in the settings below"
|
255 |
+
msgstr "Schakel dit selectievakje in als u de blokkering (of blacklisting) van geselecteerde IP-adressen en / of user-agents wilt inschakelen die zijn opgegeven in de onderstaande instellingen"
|
256 |
+
|
257 |
+
# @ all-in-one-wp-security-and-firewall
|
258 |
+
#: admin/wp-security-blacklist-menu.php:169
|
259 |
+
msgid "Enter IP Addresses:"
|
260 |
+
msgstr "Voer IP-adressen in:"
|
261 |
+
|
262 |
+
# @ all-in-one-wp-security-and-firewall
|
263 |
+
#: admin/wp-security-blacklist-menu.php:173
|
264 |
+
msgid "Enter one or more IP addresses or IP ranges."
|
265 |
+
msgstr "Voer een of meer IP-adressen of IP-bereiken in."
|
266 |
+
|
267 |
+
# @ all-in-one-wp-security-and-firewall
|
268 |
+
#: admin/wp-security-blacklist-menu.php:174
|
269 |
+
#: admin/wp-security-blacklist-menu.php:194
|
270 |
+
#: admin/wp-security-brute-force-menu.php:343
|
271 |
+
#: admin/wp-security-brute-force-menu.php:377
|
272 |
+
#: admin/wp-security-brute-force-menu.php:400
|
273 |
+
#: admin/wp-security-brute-force-menu.php:421
|
274 |
+
#: admin/wp-security-brute-force-menu.php:664
|
275 |
+
#: admin/wp-security-filescan-menu.php:291
|
276 |
+
#: admin/wp-security-filescan-menu.php:308
|
277 |
+
#: admin/wp-security-firewall-menu.php:165
|
278 |
+
#: admin/wp-security-firewall-menu.php:195
|
279 |
+
#: admin/wp-security-firewall-menu.php:326
|
280 |
+
#: admin/wp-security-firewall-menu.php:356
|
281 |
+
#: admin/wp-security-firewall-menu.php:387
|
282 |
+
#: admin/wp-security-firewall-menu.php:415
|
283 |
+
#: admin/wp-security-firewall-menu.php:444
|
284 |
+
#: admin/wp-security-firewall-menu.php:532
|
285 |
+
#: admin/wp-security-firewall-menu.php:622
|
286 |
+
#: admin/wp-security-firewall-menu.php:824
|
287 |
+
#: admin/wp-security-firewall-menu.php:847 admin/wp-security-spam-menu.php:174
|
288 |
+
#: admin/wp-security-spam-menu.php:259
|
289 |
+
msgid "More Info"
|
290 |
+
msgstr "Meer informatie"
|
291 |
+
|
292 |
+
# @ all-in-one-wp-security-and-firewall
|
293 |
+
#: admin/wp-security-blacklist-menu.php:177
|
294 |
+
#: admin/wp-security-brute-force-menu.php:667
|
295 |
+
msgid "Each IP address must be on a new line."
|
296 |
+
msgstr "Elk IP-adres moet op een nieuwe regel staan."
|
297 |
+
|
298 |
+
# @ all-in-one-wp-security-and-firewall
|
299 |
+
#: admin/wp-security-blacklist-menu.php:178
|
300 |
+
#: admin/wp-security-brute-force-menu.php:668
|
301 |
+
msgid "To specify an IP range use a wildcard \"*\" character. Acceptable ways to use wildcards is shown in the examples below:"
|
302 |
+
msgstr "Gebruik een jokerteken \"*\" om een IP-bereik op te geven. Aanvaardbare manieren om jokertekens te gebruiken, worden weergegeven in de onderstaande voorbeelden:"
|
303 |
+
|
304 |
+
# @ all-in-one-wp-security-and-firewall
|
305 |
+
#: admin/wp-security-blacklist-menu.php:179
|
306 |
+
#: admin/wp-security-brute-force-menu.php:669
|
307 |
+
msgid "Example 1: 195.47.89.*"
|
308 |
+
msgstr "Voorbeeld 1: 195.47.89. *"
|
309 |
+
|
310 |
+
# @ all-in-one-wp-security-and-firewall
|
311 |
+
#: admin/wp-security-blacklist-menu.php:180
|
312 |
+
#: admin/wp-security-brute-force-menu.php:670
|
313 |
+
msgid "Example 2: 195.47.*.*"
|
314 |
+
msgstr "Example 2: 195.47.*.*"
|
315 |
+
|
316 |
+
# @ all-in-one-wp-security-and-firewall
|
317 |
+
#: admin/wp-security-blacklist-menu.php:181
|
318 |
+
#: admin/wp-security-brute-force-menu.php:671
|
319 |
+
msgid "Example 3: 195.*.*.*"
|
320 |
+
msgstr "Voorbeeld 3: 195. *. *. *"
|
321 |
+
|
322 |
+
# @ all-in-one-wp-security-and-firewall
|
323 |
+
#: admin/wp-security-blacklist-menu.php:188
|
324 |
+
msgid "Enter User Agents:"
|
325 |
+
msgstr "Voer gebruikers in:"
|
326 |
+
|
327 |
+
# @ all-in-one-wp-security-and-firewall
|
328 |
+
#: admin/wp-security-blacklist-menu.php:193
|
329 |
+
msgid "Enter one or more user agent strings."
|
330 |
+
msgstr "Voer een of meer gebruikers gegevens in."
|
331 |
+
|
332 |
+
# @ all-in-one-wp-security-and-firewall
|
333 |
+
#: admin/wp-security-blacklist-menu.php:197
|
334 |
+
msgid "Each user agent string must be on a new line."
|
335 |
+
msgstr "Elke gebruikers gegeven moet zich op een nieuwe regel bevinden."
|
336 |
+
|
337 |
+
# @ all-in-one-wp-security-and-firewall
|
338 |
+
#: admin/wp-security-blacklist-menu.php:198
|
339 |
+
msgid "Example 1 - A single user agent string to block:"
|
340 |
+
msgstr "Voorbeeld 1 - Van enkele gebruiker gegevens om te blokkeren:"
|
341 |
+
|
342 |
+
# @ all-in-one-wp-security-and-firewall
|
343 |
+
#: admin/wp-security-blacklist-menu.php:200
|
344 |
+
msgid "Example 2 - A list of more than 1 user agent strings to block"
|
345 |
+
msgstr "Voorbeeld 2 - Een lijst met meer dan 1 gebruiker gegevens die moet worden geblokkeerd"
|
346 |
+
|
347 |
+
# @ all-in-one-wp-security-and-firewall
|
348 |
+
#: admin/wp-security-blacklist-menu.php:208
|
349 |
+
#: admin/wp-security-brute-force-menu.php:188
|
350 |
+
#: admin/wp-security-brute-force-menu.php:544
|
351 |
+
#: admin/wp-security-brute-force-menu.php:678
|
352 |
+
#: admin/wp-security-database-menu.php:356
|
353 |
+
#: admin/wp-security-filescan-menu.php:329
|
354 |
+
#: admin/wp-security-filesystem-menu.php:231
|
355 |
+
#: admin/wp-security-firewall-menu.php:700
|
356 |
+
#: admin/wp-security-firewall-menu.php:866
|
357 |
+
#: admin/wp-security-settings-menu.php:493 admin/wp-security-spam-menu.php:189
|
358 |
+
#: admin/wp-security-user-login-menu.php:239
|
359 |
+
#: admin/wp-security-user-login-menu.php:407
|
360 |
+
#: admin/wp-security-user-registration-menu.php:146
|
361 |
+
#: admin/wp-security-user-registration-menu.php:221
|
362 |
+
msgid "Save Settings"
|
363 |
+
msgstr "Instellingen opslaan"
|
364 |
+
|
365 |
+
# @ all-in-one-wp-security-and-firewall
|
366 |
+
#: admin/wp-security-brute-force-menu.php:25
|
367 |
+
#: admin/wp-security-dashboard-menu.php:344
|
368 |
+
#: admin/wp-security-dashboard-menu.php:353
|
369 |
+
msgid "Rename Login Page"
|
370 |
+
msgstr "Wijzig de inlogpagina"
|
371 |
+
|
372 |
+
# @ all-in-one-wp-security-and-firewall
|
373 |
+
#: admin/wp-security-brute-force-menu.php:26
|
374 |
+
msgid "Cookie Based Brute Force Prevention"
|
375 |
+
msgstr "Op cookies gebaseerde bruut geweldpreventie"
|
376 |
+
|
377 |
+
# @ all-in-one-wp-security-and-firewall
|
378 |
+
#: admin/wp-security-brute-force-menu.php:27
|
379 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:44
|
380 |
+
msgid "Login Captcha"
|
381 |
+
msgstr "Login Captcha"
|
382 |
+
|
383 |
+
# @ all-in-one-wp-security-and-firewall
|
384 |
+
#: admin/wp-security-brute-force-menu.php:28
|
385 |
+
#: admin/wp-security-brute-force-menu.php:615
|
386 |
+
msgid "Login Whitelist"
|
387 |
+
msgstr "Login niet geblokkeerde lijst"
|
388 |
+
|
389 |
+
# @ all-in-one-wp-security-and-firewall
|
390 |
+
#: admin/wp-security-brute-force-menu.php:99
|
391 |
+
msgid "Please enter a value for your login page slug."
|
392 |
+
msgstr "Voer een waarde in voor uw inlogpagina."
|
393 |
+
|
394 |
+
# @ all-in-one-wp-security-and-firewall
|
395 |
+
#: admin/wp-security-brute-force-menu.php:103
|
396 |
+
msgid "You cannot use the value \"wp-admin\" for your login page slug."
|
397 |
+
msgstr "U kunt de waarde \"wp-admin\" niet gebruiken voor uw inlogpagina."
|
398 |
+
|
399 |
+
# @ all-in-one-wp-security-and-firewall
|
400 |
+
#: admin/wp-security-brute-force-menu.php:108
|
401 |
+
#: admin/wp-security-database-menu.php:271
|
402 |
+
#: admin/wp-security-filescan-menu.php:169
|
403 |
+
#: admin/wp-security-firewall-menu.php:769 admin/wp-security-spam-menu.php:219
|
404 |
+
#: admin/wp-security-user-login-menu.php:123
|
405 |
+
#: admin/wp-security-user-login-menu.php:360
|
406 |
+
msgid "Attention!"
|
407 |
+
msgstr "Aandacht!"
|
408 |
+
|
409 |
+
# @ all-in-one-wp-security-and-firewall
|
410 |
+
#: admin/wp-security-brute-force-menu.php:127
|
411 |
+
msgid "Could not delete the Cookie-based directives from the .htaccess file. Please check the file permissions."
|
412 |
+
msgstr "Kon de op Cookie gebaseerde richtlijnen niet verwijderen uit het .htaccess-bestand. Controleer de bestandsrechten."
|
413 |
+
|
414 |
+
# @ all-in-one-wp-security-and-firewall
|
415 |
+
#: admin/wp-security-brute-force-menu.php:137
|
416 |
+
msgid "An effective Brute Force prevention technique is to change the default WordPress login page URL."
|
417 |
+
msgstr "Een effectieve brute force-preventietechniek is het wijzigen van de standaard WordPress-URL van de inlogpagina."
|
418 |
+
|
419 |
+
# @ all-in-one-wp-security-and-firewall
|
420 |
+
#: admin/wp-security-brute-force-menu.php:138
|
421 |
+
msgid "Normally if you wanted to login to WordPress you would type your site's home URL followed by wp-login.php."
|
422 |
+
msgstr "Normaal gesproken zou u, als u inlogde bij WordPress, de URL van uw site typen gevolgd door wp-login.php."
|
423 |
+
|
424 |
+
# @ all-in-one-wp-security-and-firewall
|
425 |
+
#: admin/wp-security-brute-force-menu.php:139
|
426 |
+
msgid "This feature allows you to change the login URL by setting your own slug and renaming the last portion of the login URL which contains the <strong>wp-login.php</strong> to any string that you like."
|
427 |
+
msgstr "Met deze functie kunt u de aanmeldings-URL wijzigen door uw eigen slug in te stellen en het laatste gedeelte van de aanmeldings-URL die de <strong> wp-login.php </ strong> bevat naar elke gewenste tekenreeks te hernoemen."
|
428 |
+
|
429 |
+
# @ all-in-one-wp-security-and-firewall
|
430 |
+
#: admin/wp-security-brute-force-menu.php:140
|
431 |
+
msgid "By doing this, malicious bots and hackers will not be able to access your login page because they will not know the correct login page URL."
|
432 |
+
msgstr "Door dit te doen, hebben kwaadwillende bots en hackers geen toegang tot uw inlogpagina omdat ze niet de juiste inlogpagina-URL weten."
|
433 |
+
|
434 |
+
# @ all-in-one-wp-security-and-firewall
|
435 |
+
#: admin/wp-security-brute-force-menu.php:142
|
436 |
+
msgid "You may also be interested in the following alternative brute force prevention features:"
|
437 |
+
msgstr "Mogelijk bent u ook geïnteresseerd in de volgende alternatieve brute force-preventiefuncties:"
|
438 |
+
|
439 |
+
# @ all-in-one-wp-security-and-firewall
|
440 |
+
#: admin/wp-security-brute-force-menu.php:153
|
441 |
+
msgid "Your WordPress login page URL has been renamed."
|
442 |
+
msgstr "Uw WordPress-URL van de inlogpagina is hernoemd."
|
443 |
+
|
444 |
+
# @ all-in-one-wp-security-and-firewall
|
445 |
+
#: admin/wp-security-brute-force-menu.php:154
|
446 |
+
msgid "Your current login URL is:"
|
447 |
+
msgstr "Uw huidige inlog-URL is:"
|
448 |
+
|
449 |
+
# @ all-in-one-wp-security-and-firewall
|
450 |
+
#: admin/wp-security-brute-force-menu.php:156
|
451 |
+
msgid "NOTE: If you already had the Cookie-Based Brute Force Prevention feature active, the plugin has automatically deactivated it because only one of these features can be active at any one time."
|
452 |
+
msgstr "OPMERKING: als u de functie Cookie-gebaseerde brute forcepreventie al had geactiveerd, heeft de plug-in deze automatisch gedeactiveerd omdat slechts een van deze functies op elk willekeurig moment actief kan zijn."
|
453 |
+
|
454 |
+
# @ all-in-one-wp-security-and-firewall
|
455 |
+
#: admin/wp-security-brute-force-menu.php:163
|
456 |
+
msgid "Rename Login Page Settings"
|
457 |
+
msgstr "Wijzig de instellingen van de aanmeldingspagina"
|
458 |
+
|
459 |
+
# @ all-in-one-wp-security-and-firewall
|
460 |
+
#: admin/wp-security-brute-force-menu.php:175
|
461 |
+
msgid "Enable Rename Login Page Feature"
|
462 |
+
msgstr "Schakel de functie hernoemen inlogpagina in"
|
463 |
+
|
464 |
+
# @ all-in-one-wp-security-and-firewall
|
465 |
+
#: admin/wp-security-brute-force-menu.php:178
|
466 |
+
msgid "Check this if you want to enable the rename login page feature"
|
467 |
+
msgstr "Selecteer dit als u de functie voor het wijzigen van de inlogpagina wilt inschakelen"
|
468 |
+
|
469 |
+
# @ all-in-one-wp-security-and-firewall
|
470 |
+
#: admin/wp-security-brute-force-menu.php:182
|
471 |
+
msgid "Login Page URL"
|
472 |
+
msgstr "URL van aanmeldingspagina"
|
473 |
+
|
474 |
+
# @ all-in-one-wp-security-and-firewall
|
475 |
+
#: admin/wp-security-brute-force-menu.php:184
|
476 |
+
msgid "Enter a string which will represent your secure login page slug. You are enouraged to choose something which is hard to guess and only you will remember."
|
477 |
+
msgstr "Voer een tekenreeks in die uw beveiligde inlogpagina-slug vertegenwoordigt. Je wordt aangemoedigd om iets te kiezen dat moeilijk te raden is en dat alleen jij zult onthouden."
|
478 |
+
|
479 |
+
# @ all-in-one-wp-security-and-firewall
|
480 |
+
#: admin/wp-security-brute-force-menu.php:217
|
481 |
+
msgid "Settings have not been saved - your secret word must consist only of alphanumeric characters, ie, letters and/or numbers only!"
|
482 |
+
msgstr "Instellingen zijn niet opgeslagen - uw geheime woord mag alleen bestaan uit alfanumerieke tekens, dat wil zeggen alleen letters en / of cijfers!"
|
483 |
+
|
484 |
+
# @ all-in-one-wp-security-and-firewall
|
485 |
+
#: admin/wp-security-brute-force-menu.php:236
|
486 |
+
msgid "You have successfully enabled the cookie based brute force prevention feature"
|
487 |
+
msgstr "U hebt de op cookies gebaseerde brute force-preventiefunctie geactiveerd"
|
488 |
+
|
489 |
+
# @ all-in-one-wp-security-and-firewall
|
490 |
+
#: admin/wp-security-brute-force-menu.php:237
|
491 |
+
msgid "From now on you will need to log into your WP Admin using the following URL:"
|
492 |
+
msgstr "Vanaf nu moet u inloggen op uw WP-beheerder met behulp van de volgende URL:"
|
493 |
+
|
494 |
+
# @ all-in-one-wp-security-and-firewall
|
495 |
+
#: admin/wp-security-brute-force-menu.php:239
|
496 |
+
msgid "It is important that you save this URL value somewhere in case you forget it, OR,"
|
497 |
+
msgstr "Het is belangrijk dat u deze URL-waarde ergens opslaat voor het geval u het vergeet, OF,"
|
498 |
+
|
499 |
+
# @ all-in-one-wp-security-and-firewall
|
500 |
+
#: admin/wp-security-brute-force-menu.php:240
|
501 |
+
#, php-format
|
502 |
+
msgid "simply remember to add a \"?%s=1\" to your current site URL address."
|
503 |
+
msgstr "vergeet niet om een \"?% s = 1\" toe te voegen aan uw huidige site-URL-adres."
|
504 |
+
|
505 |
+
# @ all-in-one-wp-security-and-firewall
|
506 |
+
#: admin/wp-security-brute-force-menu.php:246
|
507 |
+
msgid "You have successfully saved cookie based brute force prevention feature settings."
|
508 |
+
msgstr "Je hebt met succes instellingen voor brute forcepreventie op basis van cookies opgeslagen."
|
509 |
+
|
510 |
+
# @ all-in-one-wp-security-and-firewall
|
511 |
+
#: admin/wp-security-brute-force-menu.php:281
|
512 |
+
#: admin/wp-security-filesystem-menu.php:275
|
513 |
+
#: admin/wp-security-firewall-menu.php:119
|
514 |
+
#: admin/wp-security-firewall-menu.php:287
|
515 |
+
#: admin/wp-security-firewall-menu.php:498
|
516 |
+
#: admin/wp-security-firewall-menu.php:667 admin/wp-security-spam-menu.php:106
|
517 |
+
msgid "Could not write to the .htaccess file. Please check the file permissions."
|
518 |
+
msgstr "Kon het .htaccess-bestand niet schrijven. Controleer de bestandsrechten."
|
519 |
+
|
520 |
+
# @ all-in-one-wp-security-and-firewall
|
521 |
+
#: admin/wp-security-brute-force-menu.php:291
|
522 |
+
msgid "Brute Force Prevention Firewall Settings"
|
523 |
+
msgstr "Brute Kracht Preventie Firewall-instellingen"
|
524 |
+
|
525 |
+
# @ all-in-one-wp-security-and-firewall
|
526 |
+
#: admin/wp-security-brute-force-menu.php:296
|
527 |
+
msgid "A Brute Force Attack is when a hacker tries many combinations of usernames and passwords until they succeed in guessing the right combination."
|
528 |
+
msgstr "Een Brute force aanval is wanneer een hacker vele combinaties van gebruikersnamen en wachtwoorden probeert totdat hij erin slaagt de juiste combinatie te raden."
|
529 |
+
|
530 |
+
# @ all-in-one-wp-security-and-firewall
|
531 |
+
#: admin/wp-security-brute-force-menu.php:297
|
532 |
+
msgid "Due to the fact that at any one time there may be many concurrent login attempts occurring on your site via malicious automated robots, this also has a negative impact on your server's memory and performance."
|
533 |
+
msgstr "Vanwege het feit dat er op enig moment meerdere gelijktijdige inlogpogingen kunnen plaatsvinden op uw site via kwaadwillende geautomatiseerde robots, heeft dit ook een negatieve invloed op het geheugen en de prestaties van uw server."
|
534 |
+
|
535 |
+
# @ all-in-one-wp-security-and-firewall
|
536 |
+
#: admin/wp-security-brute-force-menu.php:298
|
537 |
+
msgid "The features in this tab will stop the majority of Brute Force Login Attacks at the .htaccess level thus providing even better protection for your WP login page and also reducing the load on your server because the system does not have to run PHP code to process the login attempts."
|
538 |
+
msgstr "De functies op dit tabblad zullen het grootste deel van Brute force Login aanval op het. Htaccess-niveau stoppen en bieden zo een nog betere bescherming voor uw WP-inlogpagina en verminderen ook de belasting van uw server omdat het systeem geen PHP-code hoeft te draaien om de inlogpogingen."
|
539 |
+
|
540 |
+
# @ all-in-one-wp-security-and-firewall
|
541 |
+
#: admin/wp-security-brute-force-menu.php:305
|
542 |
+
#, php-format
|
543 |
+
msgid "Even though this feature should not have any impact on your site's general functionality <strong>you are strongly encouraged to take a %s of your .htaccess file before proceeding</strong>."
|
544 |
+
msgstr "Hoewel deze functie geen invloed zou moeten hebben op de algemene functionaliteit van uw site <strong> wordt u sterk aangeraden om een %s van uw .htaccess-bestand te nemen voordat u verdergaat </ strong>."
|
545 |
+
|
546 |
+
# @ all-in-one-wp-security-and-firewall
|
547 |
+
#: admin/wp-security-brute-force-menu.php:306
|
548 |
+
msgid "If this feature is not used correctly, you can get locked out of your site. A backed up .htaccess file will come in handy if that happens."
|
549 |
+
msgstr "Als deze functie niet correct wordt gebruikt, kunt u worden buitengesloten van uw site. Een back-up van een .htaccess-bestand is handig als dat gebeurt."
|
550 |
+
|
551 |
+
# @ all-in-one-wp-security-and-firewall
|
552 |
+
#: admin/wp-security-brute-force-menu.php:307
|
553 |
+
#, php-format
|
554 |
+
msgid "To learn more about how to use this feature please watch the following %s."
|
555 |
+
msgstr "Lees de volgende %s voor meer informatie over het gebruik van deze functie."
|
556 |
+
|
557 |
+
# @ all-in-one-wp-security-and-firewall
|
558 |
+
#: admin/wp-security-brute-force-menu.php:320
|
559 |
+
msgid "NOTE: If you already had the Rename Login Page feature active, the plugin has automatically deactivated it because only one of these features can be active at any one time."
|
560 |
+
msgstr ""
|
561 |
+
|
562 |
+
# @ all-in-one-wp-security-and-firewall
|
563 |
+
#: admin/wp-security-brute-force-menu.php:328
|
564 |
+
msgid "Cookie Based Brute Force Login Prevention"
|
565 |
+
msgstr "Op cookies gebaseerde brute force-inlogpreventie"
|
566 |
+
|
567 |
+
# @ all-in-one-wp-security-and-firewall
|
568 |
+
#: admin/wp-security-brute-force-menu.php:339
|
569 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:87
|
570 |
+
msgid "Enable Brute Force Attack Prevention"
|
571 |
+
msgstr "Schakel de brute force aanval preventie in"
|
572 |
+
|
573 |
+
# @ all-in-one-wp-security-and-firewall
|
574 |
+
#: admin/wp-security-brute-force-menu.php:342
|
575 |
+
msgid "Check this if you want to protect your login page from Brute Force Attack."
|
576 |
+
msgstr "Vink dit aan als je je inlogpagina wilt beschermen tegen Brute force aanval."
|
577 |
+
|
578 |
+
# @ all-in-one-wp-security-and-firewall
|
579 |
+
#: admin/wp-security-brute-force-menu.php:347
|
580 |
+
msgid "This feature will deny access to your WordPress login page for all people except those who have a special cookie in their browser."
|
581 |
+
msgstr "Deze functie zal de toegang tot uw WordPress inlogpagina voor alle personen weigeren, behalve degenen die een speciale cookie in hun browser hebben."
|
582 |
+
|
583 |
+
# @ all-in-one-wp-security-and-firewall
|
584 |
+
#: admin/wp-security-brute-force-menu.php:349
|
585 |
+
msgid "To use this feature do the following:"
|
586 |
+
msgstr "Om deze functie te gebruiken, doet u het volgende:"
|
587 |
+
|
588 |
+
# @ all-in-one-wp-security-and-firewall
|
589 |
+
#: admin/wp-security-brute-force-menu.php:351
|
590 |
+
msgid "1) Enable the checkbox."
|
591 |
+
msgstr "1) Schakel het selectievakje in."
|
592 |
+
|
593 |
+
# @ all-in-one-wp-security-and-firewall
|
594 |
+
#: admin/wp-security-brute-force-menu.php:353
|
595 |
+
msgid "2) Enter a secret word consisting of alphanumeric characters which will be difficult to guess. This secret word will be useful whenever you need to know the special URL which you will use to access the login page (see point below)."
|
596 |
+
msgstr "2) Voer een geheim woord in dat bestaat uit alfanumerieke tekens die moeilijk te raden zijn. Dit geheime woord is nuttig wanneer u de speciale URL moet weten die u gaat gebruiken om toegang te krijgen tot de inlogpagina (zie punt hieronder)."
|
597 |
+
|
598 |
+
# @ all-in-one-wp-security-and-firewall
|
599 |
+
#: admin/wp-security-brute-force-menu.php:355
|
600 |
+
msgid "3) You will then be provided with a special login URL. You will need to use this URL to login to your WordPress site instead of the usual login URL. NOTE: The system will deposit a special cookie in your browser which will allow you access to the WordPress administration login page."
|
601 |
+
msgstr "3) U ontvangt dan een speciale inlog-URL. U moet deze URL gebruiken om u aan te melden bij uw WordPress-site in plaats van de gebruikelijke inlog-URL. OPMERKING: Het systeem zal een speciale cookie in uw browser plaatsen die u toegang geeft tot de aanmeldingspagina van WordPress administratie."
|
602 |
+
|
603 |
+
# @ all-in-one-wp-security-and-firewall
|
604 |
+
#: admin/wp-security-brute-force-menu.php:357
|
605 |
+
msgid "Any person trying to access your login page who does not have the special cookie in their browser will be automatically blocked."
|
606 |
+
msgstr "Iedereen die probeert toegang te krijgen tot uw inlogpagina die niet over de speciale cookie in zijn browser beschikt, wordt automatisch geblokkeerd."
|
607 |
+
|
608 |
+
# @ all-in-one-wp-security-and-firewall
|
609 |
+
#: admin/wp-security-brute-force-menu.php:364
|
610 |
+
msgid "Secret Word"
|
611 |
+
msgstr "Geheim woord"
|
612 |
+
|
613 |
+
# @ all-in-one-wp-security-and-firewall
|
614 |
+
#: admin/wp-security-brute-force-menu.php:366
|
615 |
+
msgid "Choose a secret word consisting of alphanumeric characters which you can use to access your special URL. Your are highly encouraged to choose a word which will be difficult to guess."
|
616 |
+
msgstr "Kies een geheim woord bestaande uit alfanumerieke tekens dat u kunt gebruiken om toegang te krijgen tot uw speciale URL. U wordt sterk aangemoedigd om een woord te kiezen dat moeilijk te raden is."
|
617 |
+
|
618 |
+
# @ all-in-one-wp-security-and-firewall
|
619 |
+
#: admin/wp-security-brute-force-menu.php:370
|
620 |
+
msgid "Re-direct URL"
|
621 |
+
msgstr "Omleidings-URL"
|
622 |
+
|
623 |
+
# @ all-in-one-wp-security-and-firewall
|
624 |
+
#: admin/wp-security-brute-force-menu.php:374
|
625 |
+
msgid "Specify a URL to redirect a hacker to when they try to access your WordPress login page."
|
626 |
+
msgstr "Geef een URL op waarmee een hacker wordt omgeleid wanneer deze toegang probeert te krijgen tot uw WordPress-aanmeldingspagina."
|
627 |
+
|
628 |
+
# @ all-in-one-wp-security-and-firewall
|
629 |
+
#: admin/wp-security-brute-force-menu.php:381
|
630 |
+
msgid "The URL specified here can be any site's URL and does not have to be your own. For example you can be as creative as you like and send hackers to the CIA or NSA home page."
|
631 |
+
msgstr "De hier opgegeven URL kan de URL van elke site zijn en hoeft niet de uwe te zijn. U kunt bijvoorbeeld zo creatief zijn als u wilt en hackers naar de startpagina van de CIA of NSA sturen."
|
632 |
+
|
633 |
+
# @ all-in-one-wp-security-and-firewall
|
634 |
+
#: admin/wp-security-brute-force-menu.php:383
|
635 |
+
msgid "This field will default to: http://127.0.0.1 if you do not enter a value."
|
636 |
+
msgstr "In dit veld wordt standaard ingesteld op: http://127.0.0.1 als u geen waarde invoert."
|
637 |
+
|
638 |
+
# @ all-in-one-wp-security-and-firewall
|
639 |
+
#: admin/wp-security-brute-force-menu.php:385
|
640 |
+
msgid "Useful Tip:"
|
641 |
+
msgstr "Handige tip:"
|
642 |
+
|
643 |
+
# @ all-in-one-wp-security-and-firewall
|
644 |
+
#: admin/wp-security-brute-force-menu.php:387
|
645 |
+
msgid "It's a good idea to not redirect attempted brute force login attempts to your site because it increases the load on your server."
|
646 |
+
msgstr "Het is een goed idee om poging tot brute force-inlogpogingen naar uw site niet om te leiden, omdat dit de belasting van uw server verhoogt."
|
647 |
+
|
648 |
+
# @ all-in-one-wp-security-and-firewall
|
649 |
+
#: admin/wp-security-brute-force-menu.php:389
|
650 |
+
msgid "Redirecting a hacker or malicious bot back to \"http://127.0.0.1\" is ideal because it deflects them back to their own local host and puts the load on their server instead of yours."
|
651 |
+
msgstr "Het omleiden van een hacker of kwaadaardige bot terug naar \"http://127.0.0.1\" is ideaal omdat het ze terugleidt naar hun eigen lokale host en de belasting op hun server zet in plaats van de jouwe."
|
652 |
+
|
653 |
+
# @ all-in-one-wp-security-and-firewall
|
654 |
+
#: admin/wp-security-brute-force-menu.php:396
|
655 |
+
msgid "My Site Has Posts Or Pages Which Are Password Protected"
|
656 |
+
msgstr "Mijn site heeft berichten of pagina's die met een wachtwoord zijn beveiligd"
|
657 |
+
|
658 |
+
# @ all-in-one-wp-security-and-firewall
|
659 |
+
#: admin/wp-security-brute-force-menu.php:399
|
660 |
+
msgid "Check this if you are using the native WordPress password protection feature for some or all of your blog posts or pages."
|
661 |
+
msgstr "Vink dit aan als u de native WordPress-wachtwoordbeveiliging voor sommige of alle blogposts of -pagina's gebruikt."
|
662 |
+
|
663 |
+
# @ all-in-one-wp-security-and-firewall
|
664 |
+
#: admin/wp-security-brute-force-menu.php:404
|
665 |
+
msgid "In the cases where you are protecting some of your posts or pages using the in-built WordPress password protection feature, a few extra lines of directives and exceptions need to be added to your .htacces file so that people trying to access pages are not automatically blocked."
|
666 |
+
msgstr "In de gevallen waarin u sommige van uw berichten of pagina's beschermt met behulp van de ingebouwde wachtwoordbeveiliging voor WordPress, moeten een paar extra regels met richtlijnen en uitzonderingen aan uw .htacces-bestand worden toegevoegd, zodat mensen die proberen toegang te krijgen tot pagina's niet automatisch zijn geblokkeerd."
|
667 |
+
|
668 |
+
# @ all-in-one-wp-security-and-firewall
|
669 |
+
#: admin/wp-security-brute-force-menu.php:406
|
670 |
+
msgid "By enabling this checkbox the plugin will add the necessary rules and exceptions to your .htacces file so that people trying to access these pages are not automatically blocked."
|
671 |
+
msgstr "Door dit selectievakje in te schakelen, voegt de plug-in de nodige regels en uitzonderingen toe aan uw. Hacces-bestand, zodat mensen die proberen toegang te krijgen tot deze pagina's niet automatisch worden geblokkeerd."
|
672 |
+
|
673 |
+
# @ all-in-one-wp-security-and-firewall
|
674 |
+
#: admin/wp-security-brute-force-menu.php:408
|
675 |
+
msgid "Helpful Tip:"
|
676 |
+
msgstr "Handige tip:"
|
677 |
+
|
678 |
+
# @ all-in-one-wp-security-and-firewall
|
679 |
+
#: admin/wp-security-brute-force-menu.php:410
|
680 |
+
msgid "If you do not use the WordPress password protection feature for your posts or pages then it is highly recommended that you leave this checkbox disabled."
|
681 |
+
msgstr "Als u de wachtwoordbeveiliging van WordPress voor uw berichten of pagina's niet gebruikt, is het ten zeerste aan te raden om dit selectievakje uitgeschakeld te laten."
|
682 |
+
|
683 |
+
# @ all-in-one-wp-security-and-firewall
|
684 |
+
#: admin/wp-security-brute-force-menu.php:417
|
685 |
+
msgid "My Site Has a Theme or Plugins Which Use AJAX"
|
686 |
+
msgstr "Mijn site heeft een thema of plug-ins die AJAX gebruiken"
|
687 |
+
|
688 |
+
# @ all-in-one-wp-security-and-firewall
|
689 |
+
#: admin/wp-security-brute-force-menu.php:420
|
690 |
+
msgid "Check this if your site uses AJAX functionality."
|
691 |
+
msgstr "Controleer dit als uw site AJAX-functionaliteit gebruikt."
|
692 |
+
|
693 |
+
# @ all-in-one-wp-security-and-firewall
|
694 |
+
#: admin/wp-security-brute-force-menu.php:425
|
695 |
+
msgid "In the cases where your WordPress installation has a theme or plugins which use AJAX, a few extra lines of directives and exceptions need to be added to your .htacces file to prevent AJAX requests from being automatically blocked by the brute force prevention feature."
|
696 |
+
msgstr "In de gevallen waar uw WordPress-installatie een thema of plug-ins heeft die AJAX gebruiken, moeten een paar extra regels met richtlijnen en uitzonderingen worden toegevoegd aan uw .htacces-bestand om te voorkomen dat AJAX-verzoeken automatisch worden geblokkeerd door de brute force-preventiefunctie."
|
697 |
+
|
698 |
+
# @ all-in-one-wp-security-and-firewall
|
699 |
+
#: admin/wp-security-brute-force-menu.php:427
|
700 |
+
msgid "By enabling this checkbox the plugin will add the necessary rules and exceptions to your .htacces file so that AJAX operations will work as expected."
|
701 |
+
msgstr "Door dit selectievakje in te schakelen, voegt de plug-in de nodige regels en uitzonderingen toe aan uw .htacces-bestand, zodat AJAX-bewerkingen naar verwachting zullen werken."
|
702 |
+
|
703 |
+
# @ all-in-one-wp-security-and-firewall
|
704 |
+
#: admin/wp-security-brute-force-menu.php:442
|
705 |
+
msgid "The cookie test was successful. You can now enable this feature."
|
706 |
+
msgstr "De cookietest was succesvol. U kunt deze functie nu inschakelen."
|
707 |
+
|
708 |
+
# @ all-in-one-wp-security-and-firewall
|
709 |
+
#: admin/wp-security-brute-force-menu.php:445
|
710 |
+
msgid "Save Feature Settings"
|
711 |
+
msgstr "Bewaar functie-instellingen"
|
712 |
+
|
713 |
+
# @ all-in-one-wp-security-and-firewall
|
714 |
+
#: admin/wp-security-brute-force-menu.php:452
|
715 |
+
msgid "The cookie test failed on this server. So this feature cannot be used on this site."
|
716 |
+
msgstr "De cookietest is mislukt op deze server. Dus deze functie kan niet worden gebruikt op deze site."
|
717 |
+
|
718 |
+
# @ all-in-one-wp-security-and-firewall
|
719 |
+
#: admin/wp-security-brute-force-menu.php:457
|
720 |
+
msgid "Before using this feature you are required to perform a cookie test first. This is to make sure that your browser cookie is working correctly and that you won't lock yourself out."
|
721 |
+
msgstr "Voordat u deze functie gebruikt, moet u eerst een cookietest uitvoeren. Dit is om ervoor te zorgen dat uw browsercookie correct werkt en dat u zichzelf niet buitensluit."
|
722 |
+
|
723 |
+
# @ all-in-one-wp-security-and-firewall
|
724 |
+
#: admin/wp-security-brute-force-menu.php:459
|
725 |
+
msgid "Perform Cookie Test"
|
726 |
+
msgstr "Voer een cookietest uit"
|
727 |
+
|
728 |
+
# @ all-in-one-wp-security-and-firewall
|
729 |
+
#: admin/wp-security-brute-force-menu.php:498
|
730 |
+
msgid "This feature allows you to add a captcha form on the WordPress login page."
|
731 |
+
msgstr "Met deze functie kunt u een captcha-formulier toevoegen op de aanmeldingspagina van WordPress."
|
732 |
+
|
733 |
+
# @ all-in-one-wp-security-and-firewall
|
734 |
+
#: admin/wp-security-brute-force-menu.php:499
|
735 |
+
msgid "Users who attempt to login will also need to enter the answer to a simple mathematical question - if they enter the wrong answer, the plugin will not allow them login even if they entered the correct username and password."
|
736 |
+
msgstr "Gebruikers die proberen in te loggen, moeten ook het antwoord op een eenvoudige wiskundige vraag invoeren - als ze een verkeerd antwoord invoeren, staat de plug-in hen niet toe om in te loggen, zelfs als ze de juiste gebruikersnaam en wachtwoord hebben ingevoerd."
|
737 |
+
|
738 |
+
# @ all-in-one-wp-security-and-firewall
|
739 |
+
#: admin/wp-security-brute-force-menu.php:500
|
740 |
+
msgid "Therefore, adding a captcha form on the login page is another effective yet simple \"Brute Force\" prevention technique."
|
741 |
+
msgstr "Daarom is het toevoegen van een captcha-formulier op de inlogpagina een andere effectieve maar eenvoudige \"Brute force\" -preventietechniek."
|
742 |
+
|
743 |
+
# @ all-in-one-wp-security-and-firewall
|
744 |
+
#: admin/wp-security-brute-force-menu.php:506
|
745 |
+
msgid "Login Form Captcha Settings"
|
746 |
+
msgstr "Aanmeldingsformulier Captcha-instellingen"
|
747 |
+
|
748 |
+
# @ all-in-one-wp-security-and-firewall
|
749 |
+
#: admin/wp-security-brute-force-menu.php:517
|
750 |
+
msgid "Enable Captcha On Login Page"
|
751 |
+
msgstr "Schakel Captcha aan op inlogpagina"
|
752 |
+
|
753 |
+
# @ all-in-one-wp-security-and-firewall
|
754 |
+
#: admin/wp-security-brute-force-menu.php:520
|
755 |
+
msgid "Check this if you want to insert a captcha form on the login page"
|
756 |
+
msgstr "Selecteer dit als u een captcha-formulier wilt invoegen op de inlogpagina"
|
757 |
+
|
758 |
+
# @ all-in-one-wp-security-and-firewall
|
759 |
+
#: admin/wp-security-brute-force-menu.php:526
|
760 |
+
msgid "Lost Password Form Captcha Settings"
|
761 |
+
msgstr "Wachtwoord vergeten formulier voor Captcha-instellingen"
|
762 |
+
|
763 |
+
# @ all-in-one-wp-security-and-firewall
|
764 |
+
#: admin/wp-security-brute-force-menu.php:536
|
765 |
+
msgid "Enable Captcha On Lost Password Page"
|
766 |
+
msgstr "Captcha aan op password-pagina inschakelen"
|
767 |
+
|
768 |
+
# @ all-in-one-wp-security-and-firewall
|
769 |
+
#: admin/wp-security-brute-force-menu.php:539
|
770 |
+
msgid "Check this if you want to insert a captcha form on the lost password page"
|
771 |
+
msgstr "Selecteer dit als u een captcha-formulier wilt invoegen op de pagina voor verloren wachtwoorden"
|
772 |
+
|
773 |
+
# @ all-in-one-wp-security-and-firewall
|
774 |
+
#: admin/wp-security-brute-force-menu.php:561
|
775 |
+
msgid "Nonce check failed for save whitelist settings!"
|
776 |
+
msgstr "Nonce check mislukt voor het opslaan van witte lijst-instellingen!"
|
777 |
+
|
778 |
+
# @ all-in-one-wp-security-and-firewall
|
779 |
+
#: admin/wp-security-brute-force-menu.php:618
|
780 |
+
msgid "The All In One WP Security Whitelist feature gives you the option of only allowing certain IP addresses or ranges to have access to your WordPress login page."
|
781 |
+
msgstr "De All in one WP niet geblokkeerde lijst-functie voor beveiliging biedt u de mogelijkheid om alleen bepaalde IP-adressen of bereiken toegang te geven tot uw WordPress-aanmeldingspagina."
|
782 |
+
|
783 |
+
# @ all-in-one-wp-security-and-firewall
|
784 |
+
#: admin/wp-security-brute-force-menu.php:619
|
785 |
+
msgid "This feature will deny login access for all IP addresses which are not in your whitelist as configured in the settings below."
|
786 |
+
msgstr "Met deze functie wordt inlogtoegang voor alle IP-adressen die niet in uw whitelist staan, zoals geconfigureerd in de onderstaande instellingen, geweigerd."
|
787 |
+
|
788 |
+
# @ all-in-one-wp-security-and-firewall
|
789 |
+
#: admin/wp-security-brute-force-menu.php:620
|
790 |
+
msgid "The plugin achieves this by writing the appropriate directives to your .htaccess file."
|
791 |
+
msgstr "De plug-in bereikt dit door de juiste richtlijnen naar uw .htaccess-bestand te schrijven."
|
792 |
+
|
793 |
+
# @ all-in-one-wp-security-and-firewall
|
794 |
+
#: admin/wp-security-brute-force-menu.php:621
|
795 |
+
msgid "By allowing/blocking IP addresses via the .htaccess file your are using the most secure first line of defence because login access will only be granted to whitelisted IP addresses and other addresses will be blocked as soon as they try to access your login page."
|
796 |
+
msgstr "Door IP-adressen toe te staan / te blokkeren via het .htaccess-bestand, gebruikt u de veiligste eerste verdedigingslinie omdat inlogtoegang alleen wordt verleend aan witte IP-adressen en andere adressen worden geblokkeerd zodra ze proberen toegang te krijgen tot uw inlogpagina."
|
797 |
+
|
798 |
+
# @ all-in-one-wp-security-and-firewall
|
799 |
+
#: admin/wp-security-brute-force-menu.php:628
|
800 |
+
#, php-format
|
801 |
+
msgid "Attention: If in addition to enabling the white list feature, you also have the %s feature enabled, <strong>you will still need to use your secret word in the URL when trying to access your WordPress login page</strong>."
|
802 |
+
msgstr "Let op: Als u naast het inschakelen van de witte lijstfunctie ook de %s functie hebt ingeschakeld, <strong>moet u uw geheime woord toch gebruiken in de URL wanneer u probeert toegang te krijgen tot uw WordPress inlogpagina</ strong>."
|
803 |
+
|
804 |
+
# @ all-in-one-wp-security-and-firewall
|
805 |
+
#: admin/wp-security-brute-force-menu.php:629
|
806 |
+
msgid "These features are NOT functionally related. Having both of them enabled on your site means you are creating 2 layers of security."
|
807 |
+
msgstr "Deze functies zijn NIET functioneel gerelateerd. Als ze beide op uw site zijn ingeschakeld, betekent dit dat u twee beveiligingslagen maakt."
|
808 |
+
|
809 |
+
# @ all-in-one-wp-security-and-firewall
|
810 |
+
#: admin/wp-security-brute-force-menu.php:634
|
811 |
+
msgid "Login IP Whitelist Settings"
|
812 |
+
msgstr "Inloggen IP niet geblokkeerdelijst instellingen"
|
813 |
+
|
814 |
+
# @ all-in-one-wp-security-and-firewall
|
815 |
+
#: admin/wp-security-brute-force-menu.php:645
|
816 |
+
msgid "Enable IP Whitelisting"
|
817 |
+
msgstr "IP niet geblokkeerdelijst inschakelen"
|
818 |
+
|
819 |
+
# @ all-in-one-wp-security-and-firewall
|
820 |
+
#: admin/wp-security-brute-force-menu.php:648
|
821 |
+
msgid "Check this if you want to enable the whitelisting of selected IP addresses specified in the settings below"
|
822 |
+
msgstr "Selecteer dit als u de niet geblokkeerdelijst van de geselecteerde IP-adressen wilt inschakelen die zijn opgegeven in de onderstaande instellingen"
|
823 |
+
|
824 |
+
# @ all-in-one-wp-security-and-firewall
|
825 |
+
#: admin/wp-security-brute-force-menu.php:652
|
826 |
+
msgid "Your Current IP Address"
|
827 |
+
msgstr "Uw huidige IP-adres"
|
828 |
+
|
829 |
+
# @ all-in-one-wp-security-and-firewall
|
830 |
+
#: admin/wp-security-brute-force-menu.php:655
|
831 |
+
msgid "You can copy and paste this address in the text box below if you want to include it in your login whitelist."
|
832 |
+
msgstr "U kunt dit adres in het onderstaande tekstvak kopiëren en plakken als u het in uw witte login-login wilt opnemen."
|
833 |
+
|
834 |
+
# @ all-in-one-wp-security-and-firewall
|
835 |
+
#: admin/wp-security-brute-force-menu.php:659
|
836 |
+
msgid "Enter Whitelisted IP Addresses:"
|
837 |
+
msgstr "Voer IP-adressen op de witte lijst in:"
|
838 |
+
|
839 |
+
# @ all-in-one-wp-security-and-firewall
|
840 |
+
#: admin/wp-security-brute-force-menu.php:663
|
841 |
+
msgid "Enter one or more IP addresses or IP ranges you wish to include in your whitelist. Only the addresses specified here will have access to the WordPress login page."
|
842 |
+
msgstr "Voer een of meer IP-adressen of IP-reeksen in die u op uw witte lijst wilt opnemen. Alleen de hier opgegeven adressen hebben toegang tot de aanmeldingspagina van WordPress."
|
843 |
+
|
844 |
+
# @ all-in-one-wp-security-and-firewall
|
845 |
+
#: admin/wp-security-dashboard-menu.php:24
|
846 |
+
msgid "System Info"
|
847 |
+
msgstr "Systeeminformatie"
|
848 |
+
|
849 |
+
# @ all-in-one-wp-security-and-firewall
|
850 |
+
#: admin/wp-security-dashboard-menu.php:25
|
851 |
+
#: admin/wp-security-dashboard-menu.php:436
|
852 |
+
msgid "Locked IP Addresses"
|
853 |
+
msgstr "Geblokkeerde IP-adressen"
|
854 |
+
|
855 |
+
# @ all-in-one-wp-security-and-firewall
|
856 |
+
#: admin/wp-security-dashboard-menu.php:31
|
857 |
+
msgid "Permanent Block List"
|
858 |
+
msgstr "Permanente blokkeringslijst"
|
859 |
+
|
860 |
+
# @ all-in-one-wp-security-and-firewall
|
861 |
+
#: admin/wp-security-dashboard-menu.php:75
|
862 |
+
msgid "For information, updates and documentation, please visit the"
|
863 |
+
msgstr "Voor informatie, updates en documentatie bezoekt u de"
|
864 |
+
|
865 |
+
# @ all-in-one-wp-security-and-firewall
|
866 |
+
#: admin/wp-security-dashboard-menu.php:75
|
867 |
+
msgid "AIO WP Security & Firewall Plugin"
|
868 |
+
msgstr "AIO WP-plug-in voor beveiliging en firewall"
|
869 |
+
|
870 |
+
# @ all-in-one-wp-security-and-firewall
|
871 |
+
#: admin/wp-security-dashboard-menu.php:75
|
872 |
+
msgid "Page"
|
873 |
+
msgstr "Pagina"
|
874 |
+
|
875 |
+
# @ all-in-one-wp-security-and-firewall
|
876 |
+
#: admin/wp-security-dashboard-menu.php:76
|
877 |
+
msgid "Follow us"
|
878 |
+
msgstr "Volg ons"
|
879 |
+
|
880 |
+
# @ all-in-one-wp-security-and-firewall
|
881 |
+
#: admin/wp-security-dashboard-menu.php:76
|
882 |
+
msgid "Twitter, Google+ or via Email to stay up to date about the new security features of this plugin."
|
883 |
+
msgstr "Twitter, Google+ of via e-mail om op de hoogte te blijven van de nieuwe beveiligingsfuncties van deze plug-in."
|
884 |
+
|
885 |
+
# @ all-in-one-wp-security-and-firewall
|
886 |
+
#: admin/wp-security-dashboard-menu.php:477
|
887 |
+
msgid "Security Strength Meter"
|
888 |
+
msgstr "Veiligheidssterktemeter"
|
889 |
+
|
890 |
+
# @ all-in-one-wp-security-and-firewall
|
891 |
+
#: admin/wp-security-dashboard-menu.php:119
|
892 |
+
msgid "Total Achievable Points: "
|
893 |
+
msgstr "Totaal behaalde punten: "
|
894 |
+
|
895 |
+
# @ all-in-one-wp-security-and-firewall
|
896 |
+
#: admin/wp-security-dashboard-menu.php:121
|
897 |
+
msgid "Current Score of Your Site: "
|
898 |
+
msgstr "Huidige score van uw site: "
|
899 |
+
|
900 |
+
# @ all-in-one-wp-security-and-firewall
|
901 |
+
#: admin/wp-security-dashboard-menu.php:478
|
902 |
+
msgid "Security Points Breakdown"
|
903 |
+
msgstr "Uitsplitsing beveiligingspunten"
|
904 |
+
|
905 |
+
# @ all-in-one-wp-security-and-firewall
|
906 |
+
#: admin/wp-security-dashboard-menu.php:479
|
907 |
+
msgid "Spread the Word"
|
908 |
+
msgstr "Vertel het verder"
|
909 |
+
|
910 |
+
# @ all-in-one-wp-security-and-firewall
|
911 |
+
#: admin/wp-security-dashboard-menu.php:480
|
912 |
+
msgid "Get To Know The Developers"
|
913 |
+
msgstr "Maak kennis met de ontwikkelaars"
|
914 |
+
|
915 |
+
# @ all-in-one-wp-security-and-firewall
|
916 |
+
#: admin/wp-security-dashboard-menu.php:604
|
917 |
+
msgid "Wanna know more about the developers behind this plugin?"
|
918 |
+
msgstr "Wil je meer weten over de ontwikkelaars achter deze plug-in?"
|
919 |
+
|
920 |
+
# @ all-in-one-wp-security-and-firewall
|
921 |
+
#: admin/wp-security-dashboard-menu.php:481
|
922 |
+
msgid "Critical Feature Status"
|
923 |
+
msgstr "Kritieke functiestatus"
|
924 |
+
|
925 |
+
# @ all-in-one-wp-security-and-firewall
|
926 |
+
#: admin/wp-security-dashboard-menu.php:176
|
927 |
+
msgid "Below is the current status of the critical features that you should activate on your site to achieve a minimum level of recommended security"
|
928 |
+
msgstr "Hieronder vindt u de huidige status van de kritieke functies die u op uw site moet activeren om een minimaal niveau van aanbevolen beveiliging te bereiken"
|
929 |
+
|
930 |
+
# @ all-in-one-wp-security-and-firewall
|
931 |
+
#: admin/wp-security-dashboard-menu.php:180
|
932 |
+
msgid "Admin Username"
|
933 |
+
msgstr "Admin-gebruikersnaam"
|
934 |
+
|
935 |
+
# @ all-in-one-wp-security-and-firewall
|
936 |
+
#: admin/wp-security-dashboard-menu.php:195
|
937 |
+
#: admin/wp-security-user-login-menu.php:25
|
938 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:42
|
939 |
+
msgid "Login Lockdown"
|
940 |
+
msgstr "Login slot"
|
941 |
+
|
942 |
+
# @ all-in-one-wp-security-and-firewall
|
943 |
+
#: admin/wp-security-dashboard-menu.php:210
|
944 |
+
msgid "File Permission"
|
945 |
+
msgstr "Bestandsmachtiging"
|
946 |
+
|
947 |
+
# @ all-in-one-wp-security-and-firewall
|
948 |
+
#: admin/wp-security-dashboard-menu.php:225
|
949 |
+
msgid "Basic Firewall"
|
950 |
+
msgstr "Basis Firewall"
|
951 |
+
|
952 |
+
# @ all-in-one-wp-security-and-firewall
|
953 |
+
#: admin/wp-security-dashboard-menu.php:482
|
954 |
+
msgid "Last 5 Logins"
|
955 |
+
msgstr "Laatste 5 logins"
|
956 |
+
|
957 |
+
# @ all-in-one-wp-security-and-firewall
|
958 |
+
#: admin/wp-security-dashboard-menu.php:257
|
959 |
+
msgid "No data found!"
|
960 |
+
msgstr "Geen data gevonden!"
|
961 |
+
|
962 |
+
# @ all-in-one-wp-security-and-firewall
|
963 |
+
#: admin/wp-security-dashboard-menu.php:261
|
964 |
+
msgid "Last 5 logins summary:"
|
965 |
+
msgstr "Samenvatting laatste 5 logins:"
|
966 |
+
|
967 |
+
# @ all-in-one-wp-security-and-firewall
|
968 |
+
#: admin/wp-security-dashboard-menu.php:486
|
969 |
+
msgid "Brute Force Prevention Login Page"
|
970 |
+
msgstr "Inlogpagina brute force-preventie"
|
971 |
+
|
972 |
+
# @ all-in-one-wp-security-and-firewall
|
973 |
+
#: admin/wp-security-dashboard-menu.php:265
|
974 |
+
msgid "User"
|
975 |
+
msgstr "Gebruiker"
|
976 |
+
|
977 |
+
# @ all-in-one-wp-security-and-firewall
|
978 |
+
#: admin/wp-security-dashboard-menu.php:266
|
979 |
+
msgid "Date"
|
980 |
+
msgstr "Datum"
|
981 |
+
|
982 |
+
# @ all-in-one-wp-security-and-firewall
|
983 |
+
#: admin/wp-security-dashboard-menu.php:267
|
984 |
+
msgid "IP"
|
985 |
+
msgstr "IP"
|
986 |
+
|
987 |
+
# @ all-in-one-wp-security-and-firewall
|
988 |
+
#: admin/wp-security-dashboard-menu.php:288
|
989 |
+
msgid "Maintenance Mode Status"
|
990 |
+
msgstr "Status Onderhoudsmodus"
|
991 |
+
|
992 |
+
# @ all-in-one-wp-security-and-firewall
|
993 |
+
#: admin/wp-security-dashboard-menu.php:292
|
994 |
+
msgid "Maintenance mode is currently enabled. Remember to turn it off when you are done"
|
995 |
+
msgstr "Onderhoudsmodus is momenteel ingeschakeld. Vergeet niet om het uit te schakelen als je klaar bent"
|
996 |
+
|
997 |
+
# @ all-in-one-wp-security-and-firewall
|
998 |
+
#: admin/wp-security-dashboard-menu.php:295
|
999 |
+
msgid "Maintenance mode is currently off."
|
1000 |
+
msgstr "De onderhoudsmodus is momenteel uitgeschakeld."
|
1001 |
+
|
1002 |
+
# @ all-in-one-wp-security-and-firewall
|
1003 |
+
#: admin/wp-security-dashboard-menu.php:299
|
1004 |
+
msgid "Maintenance Mode"
|
1005 |
+
msgstr "Onderhoudsstand"
|
1006 |
+
|
1007 |
+
# @ all-in-one-wp-security-and-firewall
|
1008 |
+
#: admin/wp-security-dashboard-menu.php:321
|
1009 |
+
msgid "Cookie Based Brute Prevention"
|
1010 |
+
msgstr "Op cookies gebaseerde brute preventie"
|
1011 |
+
|
1012 |
+
# @ all-in-one-wp-security-and-firewall
|
1013 |
+
#: admin/wp-security-dashboard-menu.php:324
|
1014 |
+
msgid "Cookie-Based Brute Force"
|
1015 |
+
msgstr "Op cookies gebaseerde brute kracht"
|
1016 |
+
|
1017 |
+
# @ all-in-one-wp-security-and-firewall
|
1018 |
+
#: admin/wp-security-dashboard-menu.php:328
|
1019 |
+
#: admin/wp-security-dashboard-menu.php:356
|
1020 |
+
#, php-format
|
1021 |
+
msgid "The %s feature is currently active."
|
1022 |
+
msgstr "De %s functie is momenteel actief."
|
1023 |
+
|
1024 |
+
# @ all-in-one-wp-security-and-firewall
|
1025 |
+
#: admin/wp-security-dashboard-menu.php:329
|
1026 |
+
#: admin/wp-security-dashboard-menu.php:357
|
1027 |
+
msgid "Your new WordPress login URL is now:"
|
1028 |
+
msgstr "Uw nieuwe WordPress inlog-URL is nu:"
|
1029 |
+
|
1030 |
+
# @ all-in-one-wp-security-and-firewall
|
1031 |
+
#: admin/wp-security-dashboard-menu.php:389
|
1032 |
+
#: admin/wp-security-user-login-menu.php:29
|
1033 |
+
msgid "Logged In Users"
|
1034 |
+
msgstr "Ingelogde gebruikers"
|
1035 |
+
|
1036 |
+
# @ all-in-one-wp-security-and-firewall
|
1037 |
+
#: admin/wp-security-dashboard-menu.php:399
|
1038 |
+
msgid "Number of users currently logged in site-wide is:"
|
1039 |
+
msgstr "Het aantal gebruikers dat momenteel op de hele site is ingelogd, is:"
|
1040 |
+
|
1041 |
+
# @ all-in-one-wp-security-and-firewall
|
1042 |
+
#: admin/wp-security-dashboard-menu.php:400
|
1043 |
+
#: admin/wp-security-dashboard-menu.php:422
|
1044 |
+
#: admin/wp-security-dashboard-menu.php:450
|
1045 |
+
#, php-format
|
1046 |
+
msgid "Go to the %s menu to see more details"
|
1047 |
+
msgstr "Ga naar het %s menu voor meer details"
|
1048 |
+
|
1049 |
+
# @ all-in-one-wp-security-and-firewall
|
1050 |
+
#: admin/wp-security-dashboard-menu.php:405
|
1051 |
+
msgid "There are no other site-wide users currently logged in."
|
1052 |
+
msgstr "Er zijn momenteel geen andere gebruikers op de hele site ingelogd."
|
1053 |
+
|
1054 |
+
# @ all-in-one-wp-security-and-firewall
|
1055 |
+
#: admin/wp-security-dashboard-menu.php:421
|
1056 |
+
msgid "Number of users currently logged into your site (including you) is:"
|
1057 |
+
msgstr "Het aantal gebruikers dat momenteel op uw site is ingelogd (inclusief uzelf) is:"
|
1058 |
+
|
1059 |
+
# @ all-in-one-wp-security-and-firewall
|
1060 |
+
#: admin/wp-security-dashboard-menu.php:427
|
1061 |
+
msgid "There are no other users currently logged in."
|
1062 |
+
msgstr "Er zijn momenteel geen andere gebruikers die ingelogd zijn."
|
1063 |
+
|
1064 |
+
# @ all-in-one-wp-security-and-firewall
|
1065 |
+
#: admin/wp-security-dashboard-menu.php:444
|
1066 |
+
msgid "There are no IP addresses currently locked out."
|
1067 |
+
msgstr "Er zijn momenteel geen IP-adressen geblokkeerd."
|
1068 |
+
|
1069 |
+
# @ all-in-one-wp-security-and-firewall
|
1070 |
+
#: admin/wp-security-dashboard-menu.php:449
|
1071 |
+
msgid "Number of temporarily locked out IP addresses: "
|
1072 |
+
msgstr "Aantal tijdelijk geblokkeerde IP-adressen: "
|
1073 |
+
|
1074 |
+
# @ all-in-one-wp-security-and-firewall
|
1075 |
+
#: admin/wp-security-dashboard-menu.php:465
|
1076 |
+
msgid "We are working hard to make your WordPress site more secure. Please support us, here is how:"
|
1077 |
+
msgstr "We doen er alles aan om uw WordPress-site veiliger te maken. Steun ons alsjeblieft, hieronder ziet u hoe:"
|
1078 |
+
|
1079 |
+
# @ all-in-one-wp-security-and-firewall
|
1080 |
+
#: admin/wp-security-dashboard-menu.php:489
|
1081 |
+
msgid "Site Info"
|
1082 |
+
msgstr "Site informatie"
|
1083 |
+
|
1084 |
+
# @ all-in-one-wp-security-and-firewall
|
1085 |
+
#: admin/wp-security-dashboard-menu.php:491
|
1086 |
+
msgid "Plugin Version"
|
1087 |
+
msgstr "Plugin-versie"
|
1088 |
+
|
1089 |
+
# @ all-in-one-wp-security-and-firewall
|
1090 |
+
#: admin/wp-security-dashboard-menu.php:492
|
1091 |
+
msgid "WP Version"
|
1092 |
+
msgstr "WP-versie"
|
1093 |
+
|
1094 |
+
# @ all-in-one-wp-security-and-firewall
|
1095 |
+
#: admin/wp-security-dashboard-menu.php:494
|
1096 |
+
#: admin/wp-security-dashboard-menu.php:496
|
1097 |
+
#: admin/wp-security-dashboard-menu.php:592
|
1098 |
+
msgid "Version"
|
1099 |
+
msgstr "Versie"
|
1100 |
+
|
1101 |
+
# @ all-in-one-wp-security-and-firewall
|
1102 |
+
#: admin/wp-security-dashboard-menu.php:495
|
1103 |
+
msgid "Table Prefix"
|
1104 |
+
msgstr "Tabelvoorvoegsel"
|
1105 |
+
|
1106 |
+
# @ all-in-one-wp-security-and-firewall
|
1107 |
+
#: admin/wp-security-dashboard-menu.php:497
|
1108 |
+
msgid "Session Save Path"
|
1109 |
+
msgstr "Sessie Opslaan Pad"
|
1110 |
+
|
1111 |
+
# @ all-in-one-wp-security-and-firewall
|
1112 |
+
#: admin/wp-security-dashboard-menu.php:499
|
1113 |
+
msgid "Server Name"
|
1114 |
+
msgstr "Server naam"
|
1115 |
+
|
1116 |
+
# @ all-in-one-wp-security-and-firewall
|
1117 |
+
#: admin/wp-security-dashboard-menu.php:500
|
1118 |
+
msgid "Cookie Domain"
|
1119 |
+
msgstr "Cookie-domein"
|
1120 |
+
|
1121 |
+
# @ all-in-one-wp-security-and-firewall
|
1122 |
+
#: admin/wp-security-dashboard-menu.php:501
|
1123 |
+
msgid "Library Present"
|
1124 |
+
msgstr "Bibliotheek aanwezig"
|
1125 |
+
|
1126 |
+
# @ all-in-one-wp-security-and-firewall
|
1127 |
+
#: admin/wp-security-dashboard-menu.php:502
|
1128 |
+
msgid "Debug File Write Permissions"
|
1129 |
+
msgstr "Foutopsporingsbestanden Schrijfrechten"
|
1130 |
+
|
1131 |
+
# @ all-in-one-wp-security-and-firewall
|
1132 |
+
#: admin/wp-security-dashboard-menu.php:506
|
1133 |
+
msgid "PHP Info"
|
1134 |
+
msgstr "PHP informatie"
|
1135 |
+
|
1136 |
+
# @ all-in-one-wp-security-and-firewall
|
1137 |
+
#: admin/wp-security-dashboard-menu.php:508
|
1138 |
+
msgid "PHP Version"
|
1139 |
+
msgstr "PHP versie"
|
1140 |
+
|
1141 |
+
# @ all-in-one-wp-security-and-firewall
|
1142 |
+
#: admin/wp-security-dashboard-menu.php:509
|
1143 |
+
msgid "PHP Memory Usage"
|
1144 |
+
msgstr "PHP Geheugengebruik"
|
1145 |
+
|
1146 |
+
# @ all-in-one-wp-security-and-firewall
|
1147 |
+
#: admin/wp-security-dashboard-menu.php:510
|
1148 |
+
msgid " MB"
|
1149 |
+
msgstr " MB"
|
1150 |
+
|
1151 |
+
# @ all-in-one-wp-security-and-firewall
|
1152 |
+
#: admin/wp-security-dashboard-menu.php:516
|
1153 |
+
#: admin/wp-security-dashboard-menu.php:524
|
1154 |
+
#: admin/wp-security-dashboard-menu.php:532
|
1155 |
+
#: admin/wp-security-dashboard-menu.php:574
|
1156 |
+
msgid "N/A"
|
1157 |
+
msgstr "N/A"
|
1158 |
+
|
1159 |
+
# @ all-in-one-wp-security-and-firewall
|
1160 |
+
#: admin/wp-security-dashboard-menu.php:519
|
1161 |
+
msgid "PHP Memory Limit"
|
1162 |
+
msgstr "PHP Geheugenlimiet"
|
1163 |
+
|
1164 |
+
# @ all-in-one-wp-security-and-firewall
|
1165 |
+
#: admin/wp-security-dashboard-menu.php:527
|
1166 |
+
msgid "PHP Max Upload Size"
|
1167 |
+
msgstr "PHP Maximale uploadgrootte"
|
1168 |
+
|
1169 |
+
# @ all-in-one-wp-security-and-firewall
|
1170 |
+
#: admin/wp-security-dashboard-menu.php:535
|
1171 |
+
msgid "PHP Max Post Size"
|
1172 |
+
msgstr "PHP Max. Berichtgrootte"
|
1173 |
+
|
1174 |
+
# @ all-in-one-wp-security-and-firewall
|
1175 |
+
#: admin/wp-security-dashboard-menu.php:538
|
1176 |
+
#: admin/wp-security-dashboard-menu.php:546
|
1177 |
+
#: admin/wp-security-dashboard-menu.php:555
|
1178 |
+
#: admin/wp-security-dashboard-menu.php:563
|
1179 |
+
msgid "On"
|
1180 |
+
msgstr "Aan"
|
1181 |
+
|
1182 |
+
# @ all-in-one-wp-security-and-firewall
|
1183 |
+
#: admin/wp-security-dashboard-menu.php:540
|
1184 |
+
#: admin/wp-security-dashboard-menu.php:548
|
1185 |
+
#: admin/wp-security-dashboard-menu.php:557
|
1186 |
+
#: admin/wp-security-dashboard-menu.php:565
|
1187 |
+
msgid "Off"
|
1188 |
+
msgstr "Uit"
|
1189 |
+
|
1190 |
+
# @ all-in-one-wp-security-and-firewall
|
1191 |
+
#: admin/wp-security-dashboard-menu.php:543
|
1192 |
+
msgid "PHP Safe Mode"
|
1193 |
+
msgstr "PHP Veilige modus"
|
1194 |
+
|
1195 |
+
# @ all-in-one-wp-security-and-firewall
|
1196 |
+
#: admin/wp-security-dashboard-menu.php:551
|
1197 |
+
msgid "PHP Allow URL fopen"
|
1198 |
+
msgstr "PHP Toestaan URL fopen"
|
1199 |
+
|
1200 |
+
# @ default
|
1201 |
+
#: admin/wp-security-dashboard-menu.php:560
|
1202 |
+
msgid "PHP Allow URL Include"
|
1203 |
+
msgstr "PHP Toestaan URL op te nemen"
|
1204 |
+
|
1205 |
+
# @ all-in-one-wp-security-and-firewall
|
1206 |
+
#: admin/wp-security-dashboard-menu.php:568
|
1207 |
+
msgid "PHP Display Errors"
|
1208 |
+
msgstr "PHP Fouten weergeven"
|
1209 |
+
|
1210 |
+
# @ all-in-one-wp-security-and-firewall
|
1211 |
+
#: admin/wp-security-dashboard-menu.php:577
|
1212 |
+
msgid "PHP Max Script Execution Time"
|
1213 |
+
msgstr "PHP Max script uitvoeringstijd"
|
1214 |
+
|
1215 |
+
# @ default
|
1216 |
+
#: admin/wp-security-dashboard-menu.php:577
|
1217 |
+
msgid "Seconds"
|
1218 |
+
msgstr "Seconden"
|
1219 |
+
|
1220 |
+
# @ all-in-one-wp-security-and-firewall
|
1221 |
+
#: admin/wp-security-dashboard-menu.php:581
|
1222 |
+
msgid "Active Plugins"
|
1223 |
+
msgstr "Actieve plug-ins"
|
1224 |
+
|
1225 |
+
# @ all-in-one-wp-security-and-firewall
|
1226 |
+
#: admin/wp-security-dashboard-menu.php:591
|
1227 |
+
#: admin/wp-security-filesystem-menu.php:130
|
1228 |
+
#: admin/wp-security-filesystem-menu.php:149
|
1229 |
+
msgid "Name"
|
1230 |
+
msgstr "Naam"
|
1231 |
+
|
1232 |
+
# @ all-in-one-wp-security-and-firewall
|
1233 |
+
#: admin/wp-security-dashboard-menu.php:593
|
1234 |
+
msgid "Plugin URL"
|
1235 |
+
msgstr "Plugin URL"
|
1236 |
+
|
1237 |
+
# @ all-in-one-wp-security-and-firewall
|
1238 |
+
#: admin/wp-security-dashboard-menu.php:629
|
1239 |
+
msgid "Currently Locked Out IP Addresses and Ranges"
|
1240 |
+
msgstr "Momenteel geblokkeerde IP-adressen en bereiken"
|
1241 |
+
|
1242 |
+
# @ all-in-one-wp-security-and-firewall
|
1243 |
+
#: admin/wp-security-database-menu.php:26
|
1244 |
+
#: admin/wp-security-database-menu.php:31
|
1245 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:62
|
1246 |
+
msgid "DB Backup"
|
1247 |
+
msgstr "DB Backup"
|
1248 |
+
|
1249 |
+
# @ all-in-one-wp-security-and-firewall
|
1250 |
+
#: admin/wp-security-database-menu.php:30
|
1251 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:60
|
1252 |
+
msgid "DB Prefix"
|
1253 |
+
msgstr "DB Prefix"
|
1254 |
+
|
1255 |
+
# @ all-in-one-wp-security-and-firewall
|
1256 |
+
#: admin/wp-security-database-menu.php:93
|
1257 |
+
msgid "Nonce check failed for DB prefix change operation!"
|
1258 |
+
msgstr "Controle nonce is mislukt voor wijziging DB-voorvoegsel!"
|
1259 |
+
|
1260 |
+
# @ all-in-one-wp-security-and-firewall
|
1261 |
+
#: admin/wp-security-database-menu.php:101
|
1262 |
+
msgid "The plugin has detected that it cannot write to the wp-config.php file. This feature can only be used if the plugin can successfully write to the wp-config.php file."
|
1263 |
+
msgstr "De plug-in heeft gedetecteerd dat het niet naar het bestand wp-config.php kan schrijven. Deze functie kan alleen worden gebruikt als de plug-in succesvol kan schrijven naar het bestand wp-config.php."
|
1264 |
+
|
1265 |
+
# @ all-in-one-wp-security-and-firewall
|
1266 |
+
#: admin/wp-security-database-menu.php:114
|
1267 |
+
msgid "Please enter a value for the DB prefix."
|
1268 |
+
msgstr "Voer een waarde in voor de DB-prefix."
|
1269 |
+
|
1270 |
+
# @ all-in-one-wp-security-and-firewall
|
1271 |
+
#: admin/wp-security-database-menu.php:123
|
1272 |
+
msgid "<strong>ERROR</strong>: The table prefix can only contain numbers, letters, and underscores."
|
1273 |
+
msgstr "<strong>FOUT </strong>: het voorvoegsel van de tabel mag alleen cijfers, letters en onderstrepingstekens bevatten."
|
1274 |
+
|
1275 |
+
# @ all-in-one-wp-security-and-firewall
|
1276 |
+
#: admin/wp-security-database-menu.php:131
|
1277 |
+
msgid "Change Database Prefix"
|
1278 |
+
msgstr "Wijzig database Prefix"
|
1279 |
+
|
1280 |
+
# @ all-in-one-wp-security-and-firewall
|
1281 |
+
#: admin/wp-security-database-menu.php:134
|
1282 |
+
msgid "Your WordPress DB is the most important asset of your website because it contains a lot of your site's precious information."
|
1283 |
+
msgstr "Uw WordPress DB is het belangrijkste bezit van uw website omdat deze veel waardevolle informatie van uw site bevat."
|
1284 |
+
|
1285 |
+
# @ all-in-one-wp-security-and-firewall
|
1286 |
+
#: admin/wp-security-database-menu.php:135
|
1287 |
+
msgid "The DB is also a target for hackers via methods such as SQL injections and malicious and automated code which targets certain tables."
|
1288 |
+
msgstr "De DB is ook een doelwit voor hackers via methoden zoals SQL-injecties en schadelijke en geautomatiseerde code die op bepaalde tabellen is gericht."
|
1289 |
+
|
1290 |
+
# @ all-in-one-wp-security-and-firewall
|
1291 |
+
#: admin/wp-security-database-menu.php:136
|
1292 |
+
msgid "One way to add a layer of protection for your DB is to change the default WordPress table prefix from \"wp_\" to something else which will be difficult for hackers to guess."
|
1293 |
+
msgstr "Een manier om een beveiligingslaag toe te voegen voor uw DB is het standaard WordPress-tabelprefix van 'wp_' te wijzigen in iets anders dat moeilijk te raden is voor hackers."
|
1294 |
+
|
1295 |
+
# @ all-in-one-wp-security-and-firewall
|
1296 |
+
#: admin/wp-security-database-menu.php:137
|
1297 |
+
msgid "This feature allows you to easily change the prefix to a value of your choice or to a random value set by this plugin."
|
1298 |
+
msgstr "Met deze functie kunt u eenvoudig het voorvoegsel wijzigen in een waarde naar keuze of een willekeurige waarde instellen door deze plug-in."
|
1299 |
+
|
1300 |
+
# @ all-in-one-wp-security-and-firewall
|
1301 |
+
#: admin/wp-security-database-menu.php:143
|
1302 |
+
msgid "DB Prefix Options"
|
1303 |
+
msgstr "DB Prefix-opties"
|
1304 |
+
|
1305 |
+
# @ all-in-one-wp-security-and-firewall
|
1306 |
+
#: admin/wp-security-database-menu.php:154
|
1307 |
+
#, php-format
|
1308 |
+
msgid "It is recommended that you perform a %s before using this feature"
|
1309 |
+
msgstr "Het wordt aanbevolen dat u een %s uitvoert voordat u deze functie gebruikt"
|
1310 |
+
|
1311 |
+
# @ all-in-one-wp-security-and-firewall
|
1312 |
+
#: admin/wp-security-database-menu.php:163
|
1313 |
+
msgid "Current DB Table Prefix"
|
1314 |
+
msgstr "Huidige DB-tabelprefix"
|
1315 |
+
|
1316 |
+
# @ all-in-one-wp-security-and-firewall
|
1317 |
+
#: admin/wp-security-database-menu.php:169
|
1318 |
+
msgid ""
|
1319 |
+
"Your site is currently using the default WordPress DB prefix value of \"wp_\". \n"
|
1320 |
+
" To increase your site's security you should consider changing the DB prefix value to another value."
|
1321 |
+
msgstr ""
|
1322 |
+
"Uw site gebruikt momenteel de standaard WordPress DB-prefixwaarde \"wp_\".\n"
|
1323 |
+
" Als u de beveiliging van uw site wilt verhogen, kunt u overwegen de DB-prefixwaarde te wijzigen in een andere waarde."
|
1324 |
+
|
1325 |
+
# @ all-in-one-wp-security-and-firewall
|
1326 |
+
#: admin/wp-security-database-menu.php:176
|
1327 |
+
msgid "Generate New DB Table Prefix"
|
1328 |
+
msgstr "Genereer een nieuwe DB-tabelprefix"
|
1329 |
+
|
1330 |
+
# @ all-in-one-wp-security-and-firewall
|
1331 |
+
#: admin/wp-security-database-menu.php:179
|
1332 |
+
msgid "Check this if you want the plugin to generate a random 6 character string for the table prefix"
|
1333 |
+
msgstr "Schakel dit selectievakje in als u wilt dat de plug-in een willekeurige tekenreeks van 6 tekens genereert voor het voorvoegsel van de tabel"
|
1334 |
+
|
1335 |
+
# @ all-in-one-wp-security-and-firewall
|
1336 |
+
#: admin/wp-security-database-menu.php:180
|
1337 |
+
msgid "OR"
|
1338 |
+
msgstr "OF"
|
1339 |
+
|
1340 |
+
# @ all-in-one-wp-security-and-firewall
|
1341 |
+
#: admin/wp-security-database-menu.php:182
|
1342 |
+
msgid "Choose your own DB prefix by specifying a string which contains letters and/or numbers and/or underscores. Example: xyz_"
|
1343 |
+
msgstr "Kies uw eigen DB-voorvoegsel door een tekenreeks op te geven die letters en / of cijfers en / of onderstrepingstekens bevat. Voorbeeld: xyz_"
|
1344 |
+
|
1345 |
+
# @ all-in-one-wp-security-and-firewall
|
1346 |
+
#: admin/wp-security-database-menu.php:186
|
1347 |
+
msgid "Change DB Prefix"
|
1348 |
+
msgstr "Wijzig DB-prefix"
|
1349 |
+
|
1350 |
+
# @ all-in-one-wp-security-and-firewall
|
1351 |
+
#: admin/wp-security-database-menu.php:207
|
1352 |
+
#: admin/wp-security-filesystem-menu.php:86
|
1353 |
+
msgid "Nonce check failed for manual DB backup operation!"
|
1354 |
+
msgstr "Nonce check mislukt voor handmatige DB backup-bewerking!"
|
1355 |
+
|
1356 |
+
# @ all-in-one-wp-security-and-firewall
|
1357 |
+
#: admin/wp-security-database-menu.php:224
|
1358 |
+
msgid "DB Backup was successfully completed! You will receive the backup file via email if you have enabled \"Send Backup File Via Email\", otherwise you can retrieve it via FTP from the following directory:"
|
1359 |
+
msgstr "DB Backup is succesvol afgerond! U ontvangt het back-upbestand per e-mail als u \"Stuurbestand via e-mail verzenden\" hebt ingeschakeld, anders kunt u het via FTP ophalen uit de volgende map:"
|
1360 |
+
|
1361 |
+
# @ default
|
1362 |
+
#: admin/wp-security-database-menu.php:226
|
1363 |
+
msgid "Your DB Backup File location: "
|
1364 |
+
msgstr "Uw DB Backup File-locatie: "
|
1365 |
+
|
1366 |
+
# @ all-in-one-wp-security-and-firewall
|
1367 |
+
#: admin/wp-security-database-menu.php:234
|
1368 |
+
msgid "DB Backup failed. Please check the permissions of the backup directory."
|
1369 |
+
msgstr "DB Backup failed. Please check the permissions of the backup directory."
|
1370 |
+
|
1371 |
+
# @ all-in-one-wp-security-and-firewall
|
1372 |
+
#: admin/wp-security-database-menu.php:251
|
1373 |
+
#: admin/wp-security-filescan-menu.php:133
|
1374 |
+
msgid "You entered a non numeric value for the \"backup time interval\" field. It has been set to the default value."
|
1375 |
+
msgstr "U hebt een niet-numerieke waarde ingevoerd voor het veld \"backup-tijdsinterval\". Het is ingesteld op de standaardwaarde."
|
1376 |
+
|
1377 |
+
# @ all-in-one-wp-security-and-firewall
|
1378 |
+
#: admin/wp-security-database-menu.php:258
|
1379 |
+
msgid "You entered a non numeric value for the \"number of backup files to keep\" field. It has been set to the default value."
|
1380 |
+
msgstr "U hebt een niet-numerieke waarde ingevoerd voor het veld 'Aantal back-upbestanden behouden'. Het is ingesteld op de standaardwaarde."
|
1381 |
+
|
1382 |
+
# @ all-in-one-wp-security-and-firewall
|
1383 |
+
#: admin/wp-security-database-menu.php:265
|
1384 |
+
#: admin/wp-security-filescan-menu.php:163
|
1385 |
+
#: admin/wp-security-user-login-menu.php:117
|
1386 |
+
msgid "You have entered an incorrect email address format. It has been set to your WordPress admin email as default."
|
1387 |
+
msgstr "U hebt een verkeerd e-mailadresindeling ingevoerd. Het is standaard ingesteld op uw WordPress-e-mailadres voor beheerders."
|
1388 |
+
|
1389 |
+
# @ all-in-one-wp-security-and-firewall
|
1390 |
+
#: admin/wp-security-database-menu.php:298
|
1391 |
+
msgid "Manual Backup"
|
1392 |
+
msgstr "Handmatige back-up"
|
1393 |
+
|
1394 |
+
# @ all-in-one-wp-security-and-firewall
|
1395 |
+
#: admin/wp-security-database-menu.php:304
|
1396 |
+
msgid "To create a new DB backup just click on the button below."
|
1397 |
+
msgstr "Klik op de onderstaande knop om een nieuwe DB-back-up te maken."
|
1398 |
+
|
1399 |
+
# @ all-in-one-wp-security-and-firewall
|
1400 |
+
#: admin/wp-security-database-menu.php:307
|
1401 |
+
msgid "Create DB Backup Now"
|
1402 |
+
msgstr "Maak nu DB-back-up"
|
1403 |
+
|
1404 |
+
# @ all-in-one-wp-security-and-firewall
|
1405 |
+
#: admin/wp-security-database-menu.php:311
|
1406 |
+
msgid "Automated Scheduled Backups"
|
1407 |
+
msgstr "Geautomatiseerde geplande back-ups"
|
1408 |
+
|
1409 |
+
# @ all-in-one-wp-security-and-firewall
|
1410 |
+
#: admin/wp-security-database-menu.php:323
|
1411 |
+
msgid "Enable Automated Scheduled Backups"
|
1412 |
+
msgstr "Schakel geautomatiseerde geplande back-ups in"
|
1413 |
+
|
1414 |
+
# @ all-in-one-wp-security-and-firewall
|
1415 |
+
#: admin/wp-security-database-menu.php:326
|
1416 |
+
msgid "Check this if you want the system to automatically generate backups periodically based on the settings below"
|
1417 |
+
msgstr "Selecteer dit als u wilt dat het systeem regelmatig automatisch back-ups genereert op basis van de onderstaande instellingen"
|
1418 |
+
|
1419 |
+
# @ all-in-one-wp-security-and-firewall
|
1420 |
+
#: admin/wp-security-database-menu.php:330
|
1421 |
+
msgid "Backup Time Interval"
|
1422 |
+
msgstr "Back-up interval tijd"
|
1423 |
+
|
1424 |
+
# @ all-in-one-wp-security-and-firewall
|
1425 |
+
#: admin/wp-security-database-menu.php:333
|
1426 |
+
#: admin/wp-security-filescan-menu.php:279
|
1427 |
+
msgid "Hours"
|
1428 |
+
msgstr "Uren"
|
1429 |
+
|
1430 |
+
# @ all-in-one-wp-security-and-firewall
|
1431 |
+
#: admin/wp-security-database-menu.php:334
|
1432 |
+
#: admin/wp-security-filescan-menu.php:280
|
1433 |
+
msgid "Days"
|
1434 |
+
msgstr "Dagen"
|
1435 |
+
|
1436 |
+
# @ all-in-one-wp-security-and-firewall
|
1437 |
+
#: admin/wp-security-database-menu.php:335
|
1438 |
+
#: admin/wp-security-filescan-menu.php:281
|
1439 |
+
msgid "Weeks"
|
1440 |
+
msgstr "Weken"
|
1441 |
+
|
1442 |
+
# @ all-in-one-wp-security-and-firewall
|
1443 |
+
#: admin/wp-security-database-menu.php:337
|
1444 |
+
msgid "Set the value for how often you would like an automated backup to occur"
|
1445 |
+
msgstr "Stel de waarde in voor hoe vaak u een automatische back-up wilt laten plaatsvinden"
|
1446 |
+
|
1447 |
+
# @ all-in-one-wp-security-and-firewall
|
1448 |
+
#: admin/wp-security-database-menu.php:341
|
1449 |
+
msgid "Number of Backup Files To Keep"
|
1450 |
+
msgstr "Aantal back-upbestanden dat moet worden bewaard"
|
1451 |
+
|
1452 |
+
# @ all-in-one-wp-security-and-firewall
|
1453 |
+
#: admin/wp-security-database-menu.php:343
|
1454 |
+
msgid "Thie field allows you to choose the number of backup files you would like to keep in the backup directory"
|
1455 |
+
msgstr "In dit veld kunt u het aantal back-upbestanden kiezen dat u wilt behouden in de back-upmap"
|
1456 |
+
|
1457 |
+
# @ all-in-one-wp-security-and-firewall
|
1458 |
+
#: admin/wp-security-database-menu.php:347
|
1459 |
+
msgid "Send Backup File Via Email"
|
1460 |
+
msgstr "Stuur een back-upbestand via e-mail"
|
1461 |
+
|
1462 |
+
# @ all-in-one-wp-security-and-firewall
|
1463 |
+
#: admin/wp-security-database-menu.php:350
|
1464 |
+
msgid "Check this if you want the system to email you the backup file after a DB backup has been performed"
|
1465 |
+
msgstr "Selecteer dit als u wilt dat het systeem u het back-upbestand e-mailt nadat een DB-back-up is uitgevoerd"
|
1466 |
+
|
1467 |
+
# @ all-in-one-wp-security-and-firewall
|
1468 |
+
#: admin/wp-security-database-menu.php:352
|
1469 |
+
#: admin/wp-security-filescan-menu.php:325
|
1470 |
+
#: admin/wp-security-user-login-menu.php:235
|
1471 |
+
msgid "Enter an email address"
|
1472 |
+
msgstr "Voer een e-mail adres in"
|
1473 |
+
|
1474 |
+
# @ all-in-one-wp-security-and-firewall
|
1475 |
+
#: admin/wp-security-database-menu.php:383
|
1476 |
+
msgid "Error - Could not get tables or no tables found!"
|
1477 |
+
msgstr "Fout - Kan geen tabellen krijgen of geen tabellen gevonden!"
|
1478 |
+
|
1479 |
+
# @ all-in-one-wp-security-and-firewall
|
1480 |
+
#: admin/wp-security-database-menu.php:388
|
1481 |
+
msgid "Starting DB prefix change operations....."
|
1482 |
+
msgstr "DB-prefix wisseloperaties starten ..."
|
1483 |
+
|
1484 |
+
# @ all-in-one-wp-security-and-firewall
|
1485 |
+
#: admin/wp-security-database-menu.php:390
|
1486 |
+
#, php-format
|
1487 |
+
msgid "Your WordPress system has a total of %s tables and your new DB prefix will be: %s"
|
1488 |
+
msgstr "Uw WordPress-systeem heeft in totaal %s tabellen en uw nieuwe DB-voorvoegsel is: %s"
|
1489 |
+
|
1490 |
+
# @ all-in-one-wp-security-and-firewall
|
1491 |
+
#: admin/wp-security-database-menu.php:396 classes/wp-security-utility.php:206
|
1492 |
+
msgid "Failed to make a backup of the wp-config.php file. This operation will not go ahead."
|
1493 |
+
msgstr "Kon geen back-up maken van het bestand wp-config.php. Deze operatie zal niet doorgaan."
|
1494 |
+
|
1495 |
+
# @ all-in-one-wp-security-and-firewall
|
1496 |
+
#: admin/wp-security-database-menu.php:400
|
1497 |
+
msgid "A backup copy of your wp-config.php file was created successfully!"
|
1498 |
+
msgstr "Een reservekopie van uw wp-config.php bestand is succesvol aangemaakt!"
|
1499 |
+
|
1500 |
+
# @ all-in-one-wp-security-and-firewall
|
1501 |
+
#: admin/wp-security-database-menu.php:422
|
1502 |
+
#, php-format
|
1503 |
+
msgid "%s table name update failed"
|
1504 |
+
msgstr "%s tabelnaam bijwerken mislukt"
|
1505 |
+
|
1506 |
+
# @ all-in-one-wp-security-and-firewall
|
1507 |
+
#: admin/wp-security-database-menu.php:434
|
1508 |
+
#, php-format
|
1509 |
+
msgid "Please change the prefix manually for the above tables to: %s"
|
1510 |
+
msgstr "Wijzig de prefixl handmatig voor de bovenstaande tabellen in: %s"
|
1511 |
+
|
1512 |
+
# @ all-in-one-wp-security-and-firewall
|
1513 |
+
#: admin/wp-security-database-menu.php:437
|
1514 |
+
#, php-format
|
1515 |
+
msgid "%s tables had their prefix updated successfully!"
|
1516 |
+
msgstr "%s tabellen hebben de prefix succesvol bijgewerkt!"
|
1517 |
+
|
1518 |
+
# @ all-in-one-wp-security-and-firewall
|
1519 |
+
#: admin/wp-security-database-menu.php:452
|
1520 |
+
msgid "wp-config.php file was updated successfully!"
|
1521 |
+
msgstr "wp-config.php bestand is succesvol bijgewerkt!"
|
1522 |
+
|
1523 |
+
# @ all-in-one-wp-security-and-firewall
|
1524 |
+
#: admin/wp-security-database-menu.php:455
|
1525 |
+
#, php-format
|
1526 |
+
msgid ""
|
1527 |
+
"The \"wp-config.php\" file was not able to be modified. Please modify this file manually using your favourite editor and search \n"
|
1528 |
+
" for variable \"$table_prefix\" and assign the following value to that variable: %s"
|
1529 |
+
msgstr ""
|
1530 |
+
"Het bestand \"wp-config.php\" kon niet worden gewijzigd. Wijzig dit bestand handmatig met uw favoriete editor en zoek\n"
|
1531 |
+
" voor variabele \"$ table_prefix\" en wijs de volgende waarde toe aan die variabele: %s"
|
1532 |
+
|
1533 |
+
# @ all-in-one-wp-security-and-firewall
|
1534 |
+
#: admin/wp-security-database-menu.php:476
|
1535 |
+
msgid "There was an error when updating the options table."
|
1536 |
+
msgstr "Er is een fout opgetreden bij het bijwerken van de optietabel."
|
1537 |
+
|
1538 |
+
# @ all-in-one-wp-security-and-firewall
|
1539 |
+
#: admin/wp-security-database-menu.php:480
|
1540 |
+
msgid "The options table records which had references to the old DB prefix were updated successfully!"
|
1541 |
+
msgstr "De optietabelrecords met verwijzingen naar het oude DB-prefix zijn succesvol bijgewerkt!"
|
1542 |
+
|
1543 |
+
# @ all-in-one-wp-security-and-firewall
|
1544 |
+
#: admin/wp-security-database-menu.php:505
|
1545 |
+
#, php-format
|
1546 |
+
msgid "Error updating user_meta table where new meta_key = %s, old meta_key = %s and user_id = %s."
|
1547 |
+
msgstr "Fout bij bijwerken van user_meta-tabel waarbij nieuwe meta_key = %s, oude meta_key = %s en user_id = %s."
|
1548 |
+
|
1549 |
+
# @ all-in-one-wp-security-and-firewall
|
1550 |
+
#: admin/wp-security-database-menu.php:511
|
1551 |
+
msgid "The usermeta table records which had references to the old DB prefix were updated successfully!"
|
1552 |
+
msgstr "De usermeta-tabelrecords die verwijzingen naar het oude DB-prefix hadden, zijn met succes bijgewerkt!"
|
1553 |
+
|
1554 |
+
# @ all-in-one-wp-security-and-firewall
|
1555 |
+
#: admin/wp-security-database-menu.php:513
|
1556 |
+
msgid "DB prefix change tasks have been completed."
|
1557 |
+
msgstr "Wijzigingen in DB-prefix zijn voltooid."
|
1558 |
+
|
1559 |
+
# @ all-in-one-wp-security-and-firewall
|
1560 |
+
#: admin/wp-security-filescan-menu.php:23
|
1561 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:102
|
1562 |
+
msgid "File Change Detection"
|
1563 |
+
msgstr "Bestanden verander detectie"
|
1564 |
+
|
1565 |
+
# @ all-in-one-wp-security-and-firewall
|
1566 |
+
#: admin/wp-security-filescan-menu.php:24
|
1567 |
+
msgid "Malware Scan"
|
1568 |
+
msgstr "Malware Scan"
|
1569 |
+
|
1570 |
+
# @ all-in-one-wp-security-and-firewall
|
1571 |
+
#: admin/wp-security-filescan-menu.php:93
|
1572 |
+
msgid "There have been no file changes since the last scan."
|
1573 |
+
msgstr "Sinds de laatste scan zijn er geen bestandswijzigingen geweest."
|
1574 |
+
|
1575 |
+
# @ all-in-one-wp-security-and-firewall
|
1576 |
+
#: admin/wp-security-filescan-menu.php:103
|
1577 |
+
msgid "Nonce check failed for manual file change detection scan operation!"
|
1578 |
+
msgstr "Controle nonce is mislukt voor het handmatig scannen van scanbewerkingen voor bestandsverandering!"
|
1579 |
+
|
1580 |
+
# @ all-in-one-wp-security-and-firewall
|
1581 |
+
#: admin/wp-security-filescan-menu.php:110
|
1582 |
+
msgid "The plugin has detected that this is your first file change detection scan. The file details from this scan will be used to detect file changes for future scans!"
|
1583 |
+
msgstr "De plug-in heeft gedetecteerd dat dit uw eerste detectie-scan voor bestandsverandering is. De bestandsdetails van deze scan worden gebruikt om bestandswijzigingen voor toekomstige scans te detecteren!"
|
1584 |
+
|
1585 |
+
# @ all-in-one-wp-security-and-firewall
|
1586 |
+
#: admin/wp-security-filescan-menu.php:112
|
1587 |
+
msgid "Scan Complete - There were no file changes detected!"
|
1588 |
+
msgstr "Scannen voltooid - Er zijn geen bestandswijzigingen gedetecteerd!"
|
1589 |
+
|
1590 |
+
# @ all-in-one-wp-security-and-firewall
|
1591 |
+
#: admin/wp-security-filescan-menu.php:201
|
1592 |
+
msgid ""
|
1593 |
+
"NEW SCAN COMPLETED: The plugin has detected that you have made changes to the \"File Types To Ignore\" or \"Files To Ignore\" fields.\n"
|
1594 |
+
" In order to ensure that future scan results are accurate, the old scan data has been refreshed."
|
1595 |
+
msgstr ""
|
1596 |
+
"NIEUW SCAN VOLTOOID: De plug-in heeft gedetecteerd dat u wijzigingen hebt aangebracht in de velden \"Te negeren bestandstypen\" of \"Te negeren bestanden\".\n"
|
1597 |
+
" Om ervoor te zorgen dat toekomstige scanresultaten accuraat zijn, zijn de oude scangegevens vernieuwd."
|
1598 |
+
|
1599 |
+
# @ all-in-one-wp-security-and-firewall
|
1600 |
+
#: admin/wp-security-filescan-menu.php:211
|
1601 |
+
msgid "All In One WP Security & Firewall has detected that there was a change in your host's files."
|
1602 |
+
msgstr "All In One WP Security & Firewall heeft geconstateerd dat er een wijziging is opgetreden in de bestanden van uw host."
|
1603 |
+
|
1604 |
+
# @ all-in-one-wp-security-and-firewall
|
1605 |
+
#: admin/wp-security-filescan-menu.php:213
|
1606 |
+
msgid "View Scan Details & Clear This Message"
|
1607 |
+
msgstr "Scaninformatie bekijken & dit bericht wissen"
|
1608 |
+
|
1609 |
+
# @ all-in-one-wp-security-and-firewall
|
1610 |
+
#: admin/wp-security-filescan-menu.php:222
|
1611 |
+
msgid "If given an opportunity hackers can insert their code or files into your system which they can then use to carry out malicious acts on your site."
|
1612 |
+
msgstr "Als hackers een kans krijgen, kunnen ze hun code of bestanden in uw systeem invoegen die ze vervolgens kunnen gebruiken om kwaadwillende handelingen uit te voeren op uw site."
|
1613 |
+
|
1614 |
+
# @ all-in-one-wp-security-and-firewall
|
1615 |
+
#: admin/wp-security-filescan-menu.php:223
|
1616 |
+
msgid "Being informed of any changes in your files can be a good way to quickly prevent a hacker from causing damage to your website."
|
1617 |
+
msgstr "Op de hoogte blijven van eventuele wijzigingen in uw bestanden kan een goede manier zijn om snel te voorkomen dat een hacker schade aan uw website veroorzaakt."
|
1618 |
+
|
1619 |
+
# @ all-in-one-wp-security-and-firewall
|
1620 |
+
#: admin/wp-security-filescan-menu.php:224
|
1621 |
+
msgid "In general, WordPress core and plugin files and file types such as \".php\" or \".js\" should not change often and when they do, it is important that you are made aware when a change occurs and which file was affected."
|
1622 |
+
msgstr "In het algemeen moeten WordPress core- en plugin-bestanden en bestandstypen zoals \".php\" of \".js\" niet vaak veranderen en wanneer dat het geval is, is het belangrijk dat u op de hoogte wordt gesteld wanneer een wijziging plaatsvindt en welk bestand is aangetast."
|
1623 |
+
|
1624 |
+
# @ all-in-one-wp-security-and-firewall
|
1625 |
+
#: admin/wp-security-filescan-menu.php:225
|
1626 |
+
msgid "The \"File Change Detection Feature\" will notify you of any file change which occurs on your system, including the addition and deletion of files by performing a regular automated or manual scan of your system's files."
|
1627 |
+
msgstr "Met de functie \"Detectie van bestandsverandering\" wordt u op de hoogte gebracht van elke bestandsverandering die zich op uw systeem voordoet, inclusief het toevoegen en verwijderen van bestanden door een regelmatige automatische of handmatige scan van de bestanden van uw systeem uit te voeren."
|
1628 |
+
|
1629 |
+
# @ all-in-one-wp-security-and-firewall
|
1630 |
+
#: admin/wp-security-filescan-menu.php:226
|
1631 |
+
msgid "This feature also allows you to exclude certain files or folders from the scan in cases where you know that they change often as part of their normal operation. (For example log files and certain caching plugin files may change often and hence you may choose to exclude such files from the file change detection scan)"
|
1632 |
+
msgstr "Met deze functie kunt u ook bepaalde bestanden of mappen uitsluiten van de scan in gevallen waarin u weet dat deze vaak veranderen als onderdeel van hun normale werking. (Logbestanden en bepaalde caching-pluginbestanden kunnen bijvoorbeeld vaak veranderen en daarom kunt u ervoor kiezen dergelijke bestanden uit te sluiten van de scan voor detectie van bestandswijzigingen)"
|
1633 |
+
|
1634 |
+
# @ all-in-one-wp-security-and-firewall
|
1635 |
+
#: admin/wp-security-filescan-menu.php:231
|
1636 |
+
msgid "Manual File Change Detection Scan"
|
1637 |
+
msgstr "Handmatige detectiescan van een fileverandering"
|
1638 |
+
|
1639 |
+
# @ all-in-one-wp-security-and-firewall
|
1640 |
+
#: admin/wp-security-filescan-menu.php:237
|
1641 |
+
msgid "To perform a manual file change detection scan click on the button below."
|
1642 |
+
msgstr "Klik op de onderstaande knop om een handmatige detectiescan van bestanden uit te voeren."
|
1643 |
+
|
1644 |
+
# @ all-in-one-wp-security-and-firewall
|
1645 |
+
#: admin/wp-security-filescan-menu.php:240
|
1646 |
+
msgid "Perform Scan Now"
|
1647 |
+
msgstr "Voer de scans nu uit"
|
1648 |
+
|
1649 |
+
# @ all-in-one-wp-security-and-firewall
|
1650 |
+
#: admin/wp-security-filescan-menu.php:244
|
1651 |
+
msgid "View Last Saved File Change Results"
|
1652 |
+
msgstr "Laatste resultaten weergeven van het gewijzigde bestand"
|
1653 |
+
|
1654 |
+
# @ all-in-one-wp-security-and-firewall
|
1655 |
+
#: admin/wp-security-filescan-menu.php:250
|
1656 |
+
msgid "Click the button below to view the saved file change results from the last scan."
|
1657 |
+
msgstr "Klik op de onderstaande knop om de opgeslagen resultaten van de bestandswijziging in de laatste scan te bekijken."
|
1658 |
+
|
1659 |
+
# @ all-in-one-wp-security-and-firewall
|
1660 |
+
#: admin/wp-security-filescan-menu.php:253
|
1661 |
+
msgid "View Last File Change"
|
1662 |
+
msgstr "Bekijk de laatste bestandswijziging"
|
1663 |
+
|
1664 |
+
# @ all-in-one-wp-security-and-firewall
|
1665 |
+
#: admin/wp-security-filescan-menu.php:257
|
1666 |
+
msgid "File Change Detection Settings"
|
1667 |
+
msgstr "Instellingen voor een bestandswijzigingsdetectie"
|
1668 |
+
|
1669 |
+
# @ all-in-one-wp-security-and-firewall
|
1670 |
+
#: admin/wp-security-filescan-menu.php:269
|
1671 |
+
msgid "Enable Automated File Change Detection Scan"
|
1672 |
+
msgstr "Geautomatiseerde detectiesscan inschakelen voor bestands wijzigingen"
|
1673 |
+
|
1674 |
+
# @ all-in-one-wp-security-and-firewall
|
1675 |
+
#: admin/wp-security-filescan-menu.php:272
|
1676 |
+
msgid "Check this if you want the system to automatically/periodically scan your files to check for file changes based on the settings below"
|
1677 |
+
msgstr "Selecteer dit als u wilt dat het systeem automatisch / periodiek uw bestanden scant om te controleren op bestandswijzigingen op basis van de onderstaande instellingen"
|
1678 |
+
|
1679 |
+
# @ all-in-one-wp-security-and-firewall
|
1680 |
+
#: admin/wp-security-filescan-menu.php:276
|
1681 |
+
msgid "Scan Time Interval"
|
1682 |
+
msgstr "Scan tijd interval"
|
1683 |
+
|
1684 |
+
# @ all-in-one-wp-security-and-firewall
|
1685 |
+
#: admin/wp-security-filescan-menu.php:283
|
1686 |
+
msgid "Set the value for how often you would like a scan to occur"
|
1687 |
+
msgstr "Stel de waarde in voor hoe vaak u een scan wilt laten plaatsvinden"
|
1688 |
+
|
1689 |
+
# @ all-in-one-wp-security-and-firewall
|
1690 |
+
#: admin/wp-security-filescan-menu.php:287
|
1691 |
+
msgid "File Types To Ignore"
|
1692 |
+
msgstr "Bestandstypen die moeten worden genegeerd"
|
1693 |
+
|
1694 |
+
# @ all-in-one-wp-security-and-firewall
|
1695 |
+
#: admin/wp-security-filescan-menu.php:290
|
1696 |
+
msgid "Enter each file type or extension on a new line which you wish to exclude from the file change detection scan."
|
1697 |
+
msgstr "Voer elk bestandstype of elke extensie in op een nieuwe regel die u wilt uitsluiten van de detectiescan voor bestandsverandering."
|
1698 |
+
|
1699 |
+
# @ all-in-one-wp-security-and-firewall
|
1700 |
+
#: admin/wp-security-filescan-menu.php:294
|
1701 |
+
msgid "You can exclude file types from the scan which would not normally pose any security threat if they were changed. These can include things such as image files."
|
1702 |
+
msgstr "U kunt bestandstypen uitsluiten van de scan die normaal geen beveiligingsrisico vormen als ze worden gewijzigd. Deze kunnen dingen omvatten zoals afbeeldingsbestanden."
|
1703 |
+
|
1704 |
+
# @ all-in-one-wp-security-and-firewall
|
1705 |
+
#: admin/wp-security-filescan-menu.php:295
|
1706 |
+
msgid "Example: If you want the scanner to ignore files of type jpg, png, and bmp, then you would enter the following:"
|
1707 |
+
msgstr "Voorbeeld: als u wilt dat de scanner bestanden van het type jpg, png en bmp negeert, voert u het volgende in:"
|
1708 |
+
|
1709 |
+
# @ all-in-one-wp-security-and-firewall
|
1710 |
+
#: admin/wp-security-filescan-menu.php:296
|
1711 |
+
msgid "jpg"
|
1712 |
+
msgstr "jpg"
|
1713 |
+
|
1714 |
+
# @ all-in-one-wp-security-and-firewall
|
1715 |
+
#: admin/wp-security-filescan-menu.php:297
|
1716 |
+
msgid "png"
|
1717 |
+
msgstr "png"
|
1718 |
+
|
1719 |
+
# @ all-in-one-wp-security-and-firewall
|
1720 |
+
#: admin/wp-security-filescan-menu.php:298
|
1721 |
+
msgid "bmp"
|
1722 |
+
msgstr "bmp"
|
1723 |
+
|
1724 |
+
# @ all-in-one-wp-security-and-firewall
|
1725 |
+
#: admin/wp-security-filescan-menu.php:304
|
1726 |
+
msgid "Files/Directories To Ignore"
|
1727 |
+
msgstr "Bestanden / mappen om te negeren"
|
1728 |
+
|
1729 |
+
# @ all-in-one-wp-security-and-firewall
|
1730 |
+
#: admin/wp-security-filescan-menu.php:307
|
1731 |
+
msgid "Enter each file or directory on a new line which you wish to exclude from the file change detection scan."
|
1732 |
+
msgstr "Voer elk bestand of elke map in op een nieuwe regel die u wilt uitsluiten van de detectiescan voor bestandsverandering."
|
1733 |
+
|
1734 |
+
# @ all-in-one-wp-security-and-firewall
|
1735 |
+
#: admin/wp-security-filescan-menu.php:311
|
1736 |
+
msgid "You can exclude specific files/directories from the scan which would not normally pose any security threat if they were changed. These can include things such as log files."
|
1737 |
+
msgstr "U kunt specifieke bestanden / mappen uitsluiten van de scan die normaal geen beveiligingsrisico vormen als ze worden gewijzigd. Deze kunnen dingen omvatten zoals logbestanden."
|
1738 |
+
|
1739 |
+
# @ all-in-one-wp-security-and-firewall
|
1740 |
+
#: admin/wp-security-filescan-menu.php:312
|
1741 |
+
msgid "Example: If you want the scanner to ignore certain files in different directories or whole directories, then you would enter the following:"
|
1742 |
+
msgstr "Voorbeeld: als u wilt dat de scanner bepaalde bestanden in verschillende mappen of hele mappen negeert, voert u het volgende in:"
|
1743 |
+
|
1744 |
+
# @ all-in-one-wp-security-and-firewall
|
1745 |
+
#: admin/wp-security-filescan-menu.php:313
|
1746 |
+
msgid "cache/config/master.php"
|
1747 |
+
msgstr "cache/config/master.php"
|
1748 |
+
|
1749 |
+
# @ all-in-one-wp-security-and-firewall
|
1750 |
+
#: admin/wp-security-filescan-menu.php:314
|
1751 |
+
msgid "somedirectory"
|
1752 |
+
msgstr "een map"
|
1753 |
+
|
1754 |
+
# @ all-in-one-wp-security-and-firewall
|
1755 |
+
#: admin/wp-security-filescan-menu.php:320
|
1756 |
+
msgid "Send Email When Change Detected"
|
1757 |
+
msgstr "E-mail verzenden bij een gedetecteerde wijziging"
|
1758 |
+
|
1759 |
+
# @ all-in-one-wp-security-and-firewall
|
1760 |
+
#: admin/wp-security-filescan-menu.php:323
|
1761 |
+
msgid "Check this if you want the system to email you if a file change was detected"
|
1762 |
+
msgstr "Vink dit aan als u wilt dat het systeem u een e-mailstuurt als een bestandsverandering is gedetecteerd"
|
1763 |
+
|
1764 |
+
# @ all-in-one-wp-security-and-firewall
|
1765 |
+
#: admin/wp-security-filescan-menu.php:341
|
1766 |
+
msgid "What is Malware?"
|
1767 |
+
msgstr "Wat is malware?"
|
1768 |
+
|
1769 |
+
# @ all-in-one-wp-security-and-firewall
|
1770 |
+
#: admin/wp-security-filescan-menu.php:342
|
1771 |
+
msgid "The word Malware stands for Malicious Software. It can consist of things like trojan horses, adware, worms, spyware and any other undesirable code which a hacker will try to inject into your website."
|
1772 |
+
msgstr "Het woord Malware staat voor Malicious Software. Het kan bestaan uit zaken als trojan horses, adware, worms, spyware en andere ongewenste code die een hacker in uw website zal proberen te injecteren."
|
1773 |
+
|
1774 |
+
# @ all-in-one-wp-security-and-firewall
|
1775 |
+
#: admin/wp-security-filescan-menu.php:343
|
1776 |
+
msgid "Often when malware code has been inserted into your site you will normally not notice anything out of the ordinary based on appearances, but it can have a dramatic effect on your site’s search ranking."
|
1777 |
+
msgstr "Vaak als malwarecode op uw site is ingevoegd, merkt u normaal gesproken niets buitengewoons op basis van de uiterlijkheden, maar het kan een dramatisch effect hebben op de zoekrangschikking van uw site."
|
1778 |
+
|
1779 |
+
# @ all-in-one-wp-security-and-firewall
|
1780 |
+
#: admin/wp-security-filescan-menu.php:344
|
1781 |
+
msgid "This is because the bots and spiders from search engines such as Google have the capability to detect malware when they are indexing the pages on your site, and consequently they can blacklist your website which will in turn affect your search rankings."
|
1782 |
+
msgstr "Dit komt omdat de bots en spiders van zoekmachines zoals Google de mogelijkheid hebben om malware te detecteren wanneer ze de pagina's op uw site indexeren, en bijgevolg kunnen zij uw website op een zwarte lijst zetten die op hun beurt van invloed is op uw zoekresultatenrangschikking."
|
1783 |
+
|
1784 |
+
# @ all-in-one-wp-security-and-firewall
|
1785 |
+
#: admin/wp-security-filescan-menu.php:348
|
1786 |
+
msgid "Scanning For Malware"
|
1787 |
+
msgstr "Scannen op malware"
|
1788 |
+
|
1789 |
+
# @ all-in-one-wp-security-and-firewall
|
1790 |
+
#: admin/wp-security-filescan-menu.php:349
|
1791 |
+
msgid "Due to the constantly changing and complex nature of Malware, scanning for such things using a standalone plugin will not work reliably. This is something best done via an external scan of your site regularly."
|
1792 |
+
msgstr "Vanwege het voortdurend veranderende en complexe karakter van Malware, zal het scannen van dergelijke dingen met behulp van een stand-alone plug-in niet betrouwbaar werken. Dit is iets dat u best via een externe scan van uw site regelmatig kunt doen."
|
1793 |
+
|
1794 |
+
# @ all-in-one-wp-security-and-firewall
|
1795 |
+
#: admin/wp-security-filescan-menu.php:350
|
1796 |
+
msgid "This is why we have created an easy-to-use scanning service which is hosted off our own server which will scan your site for malware once every day and notify you if it finds anything."
|
1797 |
+
msgstr "Daarom hebben we een gebruiksvriendelijke scanservice gemaakt die wordt gehost op onze eigen server, die uw site elke dag op malware controleert en u op de hoogte brengt als er iets wordt gevonden."
|
1798 |
+
|
1799 |
+
# @ all-in-one-wp-security-and-firewall
|
1800 |
+
#: admin/wp-security-filescan-menu.php:351
|
1801 |
+
msgid "When you sign up for this service you will get the following:"
|
1802 |
+
msgstr "Wanneer u zich aanmeldt voor deze service, krijgt u het volgende:"
|
1803 |
+
|
1804 |
+
# @ all-in-one-wp-security-and-firewall
|
1805 |
+
#: admin/wp-security-filescan-menu.php:353
|
1806 |
+
msgid "Automatic Daily Scan of 1 Website"
|
1807 |
+
msgstr "Automatische dagelijkse scan van 1 website"
|
1808 |
+
|
1809 |
+
# @ all-in-one-wp-security-and-firewall
|
1810 |
+
#: admin/wp-security-filescan-menu.php:354
|
1811 |
+
msgid "Automatic Malware & Blacklist Monitoring"
|
1812 |
+
msgstr "Automatische Malware & Blacklist Monitoring"
|
1813 |
+
|
1814 |
+
# @ all-in-one-wp-security-and-firewall
|
1815 |
+
#: admin/wp-security-filescan-menu.php:355
|
1816 |
+
msgid "Automatic Email Alerting"
|
1817 |
+
msgstr "Automatische e-mailwaarschuwing"
|
1818 |
+
|
1819 |
+
# @ all-in-one-wp-security-and-firewall
|
1820 |
+
#: admin/wp-security-filescan-menu.php:356
|
1821 |
+
msgid "Site uptime monitoring"
|
1822 |
+
msgstr "Site uptime monitoring"
|
1823 |
+
|
1824 |
+
# @ all-in-one-wp-security-and-firewall
|
1825 |
+
#: admin/wp-security-filescan-menu.php:357
|
1826 |
+
msgid "Site response time monitoring"
|
1827 |
+
msgstr "Bewaking van reactietijd van de site"
|
1828 |
+
|
1829 |
+
# @ all-in-one-wp-security-and-firewall
|
1830 |
+
#: admin/wp-security-filescan-menu.php:358
|
1831 |
+
msgid "Malware Cleanup"
|
1832 |
+
msgstr "Malware opruimen"
|
1833 |
+
|
1834 |
+
# @ all-in-one-wp-security-and-firewall
|
1835 |
+
#: admin/wp-security-filescan-menu.php:359
|
1836 |
+
msgid "Blacklist Removal"
|
1837 |
+
msgstr "Blacklist verwijderen"
|
1838 |
+
|
1839 |
+
# @ all-in-one-wp-security-and-firewall
|
1840 |
+
#: admin/wp-security-filescan-menu.php:360
|
1841 |
+
msgid "No Contract (Cancel Anytime)"
|
1842 |
+
msgstr "Geen contract (op elk moment annuleren)"
|
1843 |
+
|
1844 |
+
# @ all-in-one-wp-security-and-firewall
|
1845 |
+
#: admin/wp-security-filescan-menu.php:362
|
1846 |
+
#, php-format
|
1847 |
+
msgid "To learn more please %s."
|
1848 |
+
msgstr "Voor meer informatie kunt u %s."
|
1849 |
+
|
1850 |
+
# @ all-in-one-wp-security-and-firewall
|
1851 |
+
#: admin/wp-security-filescan-menu.php:391
|
1852 |
+
msgid "Latest File Change Scan Results"
|
1853 |
+
msgstr "Laatste scanresultaten van een bestand wijziging"
|
1854 |
+
|
1855 |
+
# @ all-in-one-wp-security-and-firewall
|
1856 |
+
#: admin/wp-security-filescan-menu.php:400
|
1857 |
+
msgid "The following files were added to your host."
|
1858 |
+
msgstr "De volgende bestanden zijn aan uw host toegevoegd."
|
1859 |
+
|
1860 |
+
# @ all-in-one-wp-security-and-firewall
|
1861 |
+
#: admin/wp-security-filescan-menu.php:403
|
1862 |
+
#: admin/wp-security-filescan-menu.php:424
|
1863 |
+
#: admin/wp-security-filescan-menu.php:448
|
1864 |
+
#: admin/wp-security-settings-menu.php:26
|
1865 |
+
#: admin/wp-security-settings-menu.php:27
|
1866 |
+
msgid "File"
|
1867 |
+
msgstr "Bestand"
|
1868 |
+
|
1869 |
+
# @ all-in-one-wp-security-and-firewall
|
1870 |
+
#: admin/wp-security-filescan-menu.php:404
|
1871 |
+
#: admin/wp-security-filescan-menu.php:425
|
1872 |
+
#: admin/wp-security-filescan-menu.php:449
|
1873 |
+
msgid "File Size"
|
1874 |
+
msgstr "Bestandsgrootte"
|
1875 |
+
|
1876 |
+
# @ all-in-one-wp-security-and-firewall
|
1877 |
+
#: admin/wp-security-filescan-menu.php:405
|
1878 |
+
#: admin/wp-security-filescan-menu.php:426
|
1879 |
+
#: admin/wp-security-filescan-menu.php:450
|
1880 |
+
msgid "File Modified"
|
1881 |
+
msgstr "Bestand gewijzigd"
|
1882 |
+
|
1883 |
+
# @ all-in-one-wp-security-and-firewall
|
1884 |
+
#: admin/wp-security-filescan-menu.php:421
|
1885 |
+
msgid "The following files were removed from your host."
|
1886 |
+
msgstr "De volgende bestanden zijn van uw host verwijderd."
|
1887 |
+
|
1888 |
+
# @ all-in-one-wp-security-and-firewall
|
1889 |
+
#: admin/wp-security-filescan-menu.php:445
|
1890 |
+
msgid "The following files were changed on your host."
|
1891 |
+
msgstr "De volgende bestanden zijn gewijzigd op uw host."
|
1892 |
+
|
1893 |
+
# @ all-in-one-wp-security-and-firewall
|
1894 |
+
#: admin/wp-security-filesystem-menu.php:26
|
1895 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:66
|
1896 |
+
msgid "File Permissions"
|
1897 |
+
msgstr "Bestandsrechten"
|
1898 |
+
|
1899 |
+
# @ all-in-one-wp-security-and-firewall
|
1900 |
+
#: admin/wp-security-filesystem-menu.php:27
|
1901 |
+
msgid "PHP File Editing"
|
1902 |
+
msgstr "PHP Bestand bewerken"
|
1903 |
+
|
1904 |
+
# @ all-in-one-wp-security-and-firewall
|
1905 |
+
#: admin/wp-security-filesystem-menu.php:28
|
1906 |
+
msgid "WP File Access"
|
1907 |
+
msgstr "WP Toegang tot bestanden"
|
1908 |
+
|
1909 |
+
# @ all-in-one-wp-security-and-firewall
|
1910 |
+
#: admin/wp-security-filesystem-menu.php:29
|
1911 |
+
msgid "Host System Logs"
|
1912 |
+
msgstr "Logboeken van het hostsysteem"
|
1913 |
+
|
1914 |
+
# @ all-in-one-wp-security-and-firewall
|
1915 |
+
#: admin/wp-security-filesystem-menu.php:96
|
1916 |
+
#, php-format
|
1917 |
+
msgid "The permissions for %s were succesfully changed to %s"
|
1918 |
+
msgstr "De rechten voor %s zijn met succes gewijzigd in %s"
|
1919 |
+
|
1920 |
+
# @ all-in-one-wp-security-and-firewall
|
1921 |
+
#: admin/wp-security-filesystem-menu.php:100
|
1922 |
+
#, php-format
|
1923 |
+
msgid "Unable to change permissions for %s!"
|
1924 |
+
msgstr "Kon de machtiginsinstelling niet wijzigen voor %s!"
|
1925 |
+
|
1926 |
+
# @ all-in-one-wp-security-and-firewall
|
1927 |
+
#: admin/wp-security-filesystem-menu.php:106
|
1928 |
+
msgid "File Permissions Scan"
|
1929 |
+
msgstr "File machtiginsinstellings Scan"
|
1930 |
+
|
1931 |
+
# @ all-in-one-wp-security-and-firewall
|
1932 |
+
#: admin/wp-security-filesystem-menu.php:109
|
1933 |
+
msgid "Your WordPress file and folder permission settings govern the accessability and read/write privileges of the files and folders which make up your WP installation."
|
1934 |
+
msgstr "Uw WordPress-machtigingsinstellingen voor bestanden en mappen bepalen de leesbaarheid en lees- en schrijfrechten van de bestanden en mappen die deel uitmaken van uw WP-installatie."
|
1935 |
+
|
1936 |
+
# @ all-in-one-wp-security-and-firewall
|
1937 |
+
#: admin/wp-security-filesystem-menu.php:110
|
1938 |
+
msgid "Your WP installation already comes with reasonably secure file permission settings for the filesystem."
|
1939 |
+
msgstr "Uw WP-installatie wordt al geleverd met redelijk veilige bestandsmachtigingsinstellingen voor het bestandssysteem."
|
1940 |
+
|
1941 |
+
# @ all-in-one-wp-security-and-firewall
|
1942 |
+
#: admin/wp-security-filesystem-menu.php:111
|
1943 |
+
msgid "However, sometimes people or other plugins modify the various permission settings of certain core WP folders or files such that they end up making their site less secure because they chose the wrong permission values."
|
1944 |
+
msgstr "Soms wijzigen mensen of andere plug-ins de verschillende machtigingsinstellingen van bepaalde kern-WP-mappen of -bestanden zodanig dat ze uiteindelijk hun site minder veilig maken omdat ze de verkeerde toestemmingswaarden hebben gekozen."
|
1945 |
+
|
1946 |
+
# @ all-in-one-wp-security-and-firewall
|
1947 |
+
#: admin/wp-security-filesystem-menu.php:112
|
1948 |
+
msgid "This feature will scan the critical WP core folders and files and will highlight any permission settings which are insecure."
|
1949 |
+
msgstr "Deze functie scant de cruciale WP-kernmappen en -bestanden en markeert eventuele machtigingsinstellingen die onveilig zijn."
|
1950 |
+
|
1951 |
+
# @ all-in-one-wp-security-and-firewall
|
1952 |
+
#: admin/wp-security-filesystem-menu.php:118
|
1953 |
+
msgid "WP Directory and File Permissions Scan Results"
|
1954 |
+
msgstr "Scanresultaten van de WP-directory en bestandsmachtigingen"
|
1955 |
+
|
1956 |
+
# @ all-in-one-wp-security-and-firewall
|
1957 |
+
#: admin/wp-security-filesystem-menu.php:131
|
1958 |
+
#: admin/wp-security-filesystem-menu.php:150
|
1959 |
+
msgid "File/Folder"
|
1960 |
+
msgstr "Bestand/map"
|
1961 |
+
|
1962 |
+
# @ all-in-one-wp-security-and-firewall
|
1963 |
+
#: admin/wp-security-filesystem-menu.php:132
|
1964 |
+
#: admin/wp-security-filesystem-menu.php:151
|
1965 |
+
msgid "Current Permissions"
|
1966 |
+
msgstr "Huidige machtigingen"
|
1967 |
+
|
1968 |
+
# @ all-in-one-wp-security-and-firewall
|
1969 |
+
#: admin/wp-security-filesystem-menu.php:133
|
1970 |
+
#: admin/wp-security-filesystem-menu.php:152
|
1971 |
+
msgid "Recommended Permissions"
|
1972 |
+
msgstr "Aanbevolen machtigingen"
|
1973 |
+
|
1974 |
+
# @ all-in-one-wp-security-and-firewall
|
1975 |
+
#: admin/wp-security-filesystem-menu.php:134
|
1976 |
+
#: admin/wp-security-filesystem-menu.php:153
|
1977 |
+
msgid "Recommended Action"
|
1978 |
+
msgstr "Aanbevolen actie"
|
1979 |
+
|
1980 |
+
# @ all-in-one-wp-security-and-firewall
|
1981 |
+
#: admin/wp-security-filesystem-menu.php:191
|
1982 |
+
msgid "Your PHP file editing settings were saved successfully."
|
1983 |
+
msgstr "Uw PHP-bestand bewerken instellingen werden met succes opgeslagen."
|
1984 |
+
|
1985 |
+
# @ all-in-one-wp-security-and-firewall
|
1986 |
+
#: admin/wp-security-filesystem-menu.php:195
|
1987 |
+
msgid "Operation failed! Unable to modify or make a backup of wp-config.php file!"
|
1988 |
+
msgstr "Operatie mislukt! Niet in staat om te wijzigen of een backup maken van de wp-config. php bestand!"
|
1989 |
+
|
1990 |
+
# @ all-in-one-wp-security-and-firewall
|
1991 |
+
#: admin/wp-security-filesystem-menu.php:201
|
1992 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:68
|
1993 |
+
msgid "File Editing"
|
1994 |
+
msgstr "Bestand bewerken"
|
1995 |
+
|
1996 |
+
# @ all-in-one-wp-security-and-firewall
|
1997 |
+
#: admin/wp-security-filesystem-menu.php:204
|
1998 |
+
msgid "The Wordpress Dashboard by default allows administrators to edit PHP files, such as plugin and theme files."
|
1999 |
+
msgstr "In het WordPress-dashboard kunnen beheerders standaard PHP-bestanden bewerken, zoals plug-in- en themabestanden."
|
2000 |
+
|
2001 |
+
# @ all-in-one-wp-security-and-firewall
|
2002 |
+
#: admin/wp-security-filesystem-menu.php:205
|
2003 |
+
msgid "This is often the first tool an attacker will use if able to login, since it allows code execution."
|
2004 |
+
msgstr "Dit is vaak het eerste hulpmiddel dat een aanvaller gebruikt als hij kan inloggen, omdat hiermee een code kan worden uitgevoerd .."
|
2005 |
+
|
2006 |
+
# @ all-in-one-wp-security-and-firewall
|
2007 |
+
#: admin/wp-security-filesystem-menu.php:206
|
2008 |
+
msgid "This feature will disable the ability for people to edit PHP files via the dashboard."
|
2009 |
+
msgstr "Met deze functie wordt de mogelijkheid voor personen om PHP-bestanden te bewerken via het dashboard uitgeschakeld."
|
2010 |
+
|
2011 |
+
# @ all-in-one-wp-security-and-firewall
|
2012 |
+
#: admin/wp-security-filesystem-menu.php:212
|
2013 |
+
msgid "Disable PHP File Editing"
|
2014 |
+
msgstr "Schakel PHP-bestands bewerking uit"
|
2015 |
+
|
2016 |
+
# @ all-in-one-wp-security-and-firewall
|
2017 |
+
#: admin/wp-security-filesystem-menu.php:224
|
2018 |
+
msgid "Disable Ability To Edit PHP Files"
|
2019 |
+
msgstr "Schakel de mogelijkheid om PHP-bestanden te bewerken uit"
|
2020 |
+
|
2021 |
+
# @ all-in-one-wp-security-and-firewall
|
2022 |
+
#: admin/wp-security-filesystem-menu.php:227
|
2023 |
+
msgid "Check this if you want to remove the ability for people to edit PHP files via the WP dashboard"
|
2024 |
+
msgstr "Vink dit aan als je de mogelijkheid voor mensen om PHP-bestanden te bewerken via het WP-dashboard wilt verwijderen"
|
2025 |
+
|
2026 |
+
# @ all-in-one-wp-security-and-firewall
|
2027 |
+
#: admin/wp-security-filesystem-menu.php:271
|
2028 |
+
msgid "You have successfully saved the Prevent Access to Default WP Files configuration."
|
2029 |
+
msgstr "U hebt de blokkering van de toegang tot configuratie van de standaard WP-bestanden opgeslagen."
|
2030 |
+
|
2031 |
+
# @ all-in-one-wp-security-and-firewall
|
2032 |
+
#: admin/wp-security-filesystem-menu.php:280
|
2033 |
+
msgid "WordPress Files"
|
2034 |
+
msgstr "WordPress bestanden"
|
2035 |
+
|
2036 |
+
# @ all-in-one-wp-security-and-firewall
|
2037 |
+
#: admin/wp-security-filesystem-menu.php:283
|
2038 |
+
#, php-format
|
2039 |
+
msgid "This feature allows you to prevent access to files such as %s, %s and %s which are delivered with all WP installations."
|
2040 |
+
msgstr "Met deze functie kunt u de toegang blokkeren tot bestanden zoals %s, %s en %s die bij alle WP-installaties worden geleverd."
|
2041 |
+
|
2042 |
+
# @ all-in-one-wp-security-and-firewall
|
2043 |
+
#: admin/wp-security-filesystem-menu.php:284
|
2044 |
+
msgid "By preventing access to these files you are hiding some key pieces of information (such as WordPress version info) from potential hackers."
|
2045 |
+
msgstr "Door toegang tot deze bestanden te voorkomen, verbergt u enkele belangrijke stukjes informatie (zoals WordPress-versiegegevens) voor potentiële hackers."
|
2046 |
+
|
2047 |
+
# @ all-in-one-wp-security-and-firewall
|
2048 |
+
#: admin/wp-security-filesystem-menu.php:289
|
2049 |
+
msgid "Prevent Access to Default WP Files"
|
2050 |
+
msgstr "Voorkom toegang tot standaard WP-bestanden"
|
2051 |
+
|
2052 |
+
# @ all-in-one-wp-security-and-firewall
|
2053 |
+
#: admin/wp-security-filesystem-menu.php:300
|
2054 |
+
msgid "Prevent Access to WP Default Install Files"
|
2055 |
+
msgstr "Voorkom toegang tot standaard WP-bestanden"
|
2056 |
+
|
2057 |
+
# @ all-in-one-wp-security-and-firewall
|
2058 |
+
#: admin/wp-security-filesystem-menu.php:303
|
2059 |
+
msgid "Check this if you want to prevent access to readme.html, license.txt and wp-config-sample.php."
|
2060 |
+
msgstr "Vink dit aan als u de toegang tot readme.html, license.txt en wp-config-sample.php wilt voorkomen."
|
2061 |
+
|
2062 |
+
# @ all-in-one-wp-security-and-firewall
|
2063 |
+
#: admin/wp-security-filesystem-menu.php:307
|
2064 |
+
msgid "Save Setting"
|
2065 |
+
msgstr "Instellingen opslaan"
|
2066 |
+
|
2067 |
+
# @ all-in-one-wp-security-and-firewall
|
2068 |
+
#: admin/wp-security-filesystem-menu.php:331
|
2069 |
+
msgid "System Logs"
|
2070 |
+
msgstr "Systeemlogboeken"
|
2071 |
+
|
2072 |
+
# @ all-in-one-wp-security-and-firewall
|
2073 |
+
#: admin/wp-security-filesystem-menu.php:334
|
2074 |
+
msgid "Sometimes your hosting platform will produce error or warning logs in a file called \"error_log\"."
|
2075 |
+
msgstr "Soms produceert uw hostingplatform fout- of waarschuwingslogboeken in een bestand met de naam \"error_log\"."
|
2076 |
+
|
2077 |
+
# @ all-in-one-wp-security-and-firewall
|
2078 |
+
#: admin/wp-security-filesystem-menu.php:335
|
2079 |
+
msgid "Depending on the nature and cause of the error or warning, your hosting server can create multiple instances of this file in numerous directory locations of your WordPress installation."
|
2080 |
+
msgstr "Afhankelijk van de aard en oorzaak van de fout of waarschuwing, kan uw hostserver meerdere exemplaren van dit bestand maken op verschillende directorylocaties van uw WordPress-installatie."
|
2081 |
+
|
2082 |
+
# @ all-in-one-wp-security-and-firewall
|
2083 |
+
#: admin/wp-security-filesystem-menu.php:336
|
2084 |
+
msgid "By occassionally viewing the contents of these logs files you can keep informed of any underlying problems on your system which you might need to address."
|
2085 |
+
msgstr "Door af en toe de inhoud van deze logbestanden te bekijken, kunt u op de hoogte blijven van eventuele onderliggende problemen op uw systeem die u mogelijk moet verhelpen."
|
2086 |
+
|
2087 |
+
# @ all-in-one-wp-security-and-firewall
|
2088 |
+
#: admin/wp-security-filesystem-menu.php:342
|
2089 |
+
msgid "View System Logs"
|
2090 |
+
msgstr "Bekijk systeemlogboeken"
|
2091 |
+
|
2092 |
+
# @ all-in-one-wp-security-and-firewall
|
2093 |
+
#: admin/wp-security-filesystem-menu.php:347
|
2094 |
+
msgid "Enter System Log File Name"
|
2095 |
+
msgstr "Voer de bestandsnaam van het systeemlogbestand in"
|
2096 |
+
|
2097 |
+
# @ all-in-one-wp-security-and-firewall
|
2098 |
+
#: admin/wp-security-filesystem-menu.php:349
|
2099 |
+
msgid "Enter your system log file name. (Defaults to error_log)"
|
2100 |
+
msgstr "Voer uw systeemlogbestandsnaam in. (Standaard naar error_log)"
|
2101 |
+
|
2102 |
+
# @ all-in-one-wp-security-and-firewall
|
2103 |
+
#: admin/wp-security-filesystem-menu.php:352
|
2104 |
+
msgid "View Latest System Logs"
|
2105 |
+
msgstr "Bekijk de nieuwste systeemlogboeken"
|
2106 |
+
|
2107 |
+
# @ all-in-one-wp-security-and-firewall
|
2108 |
+
#: admin/wp-security-filesystem-menu.php:354
|
2109 |
+
msgid "Loading..."
|
2110 |
+
msgstr "Bezig met laden..."
|
2111 |
+
|
2112 |
+
# @ all-in-one-wp-security-and-firewall
|
2113 |
+
#: admin/wp-security-filesystem-menu.php:371
|
2114 |
+
msgid "No system logs were found!"
|
2115 |
+
msgstr "Er zijn geen systeemlogboeken gevonden!"
|
2116 |
+
|
2117 |
+
# @ all-in-one-wp-security-and-firewall
|
2118 |
+
#: admin/wp-security-filesystem-menu.php:424
|
2119 |
+
msgid "Set Recommended Permissions"
|
2120 |
+
msgstr "Stel aanbevolen machtigingen in"
|
2121 |
+
|
2122 |
+
# @ all-in-one-wp-security-and-firewall
|
2123 |
+
#: admin/wp-security-filesystem-menu.php:430
|
2124 |
+
msgid "No Action Required"
|
2125 |
+
msgstr "Geen actie nodig"
|
2126 |
+
|
2127 |
+
# @ all-in-one-wp-security-and-firewall
|
2128 |
+
#: admin/wp-security-filesystem-menu.php:470
|
2129 |
+
#, php-format
|
2130 |
+
msgid "Showing latest entries of error_log file: %s"
|
2131 |
+
msgstr "De laatste gegevens van error_log file: %s"
|
2132 |
+
|
2133 |
+
# @ all-in-one-wp-security-and-firewall
|
2134 |
+
#: admin/wp-security-firewall-menu.php:27
|
2135 |
+
msgid "Basic Firewall Rules"
|
2136 |
+
msgstr "Basic Firewall-regels"
|
2137 |
+
|
2138 |
+
# @ all-in-one-wp-security-and-firewall
|
2139 |
+
#: admin/wp-security-firewall-menu.php:28
|
2140 |
+
msgid "Additional Firewall Rules"
|
2141 |
+
msgstr "Aanvullende firewallregels"
|
2142 |
+
|
2143 |
+
# @ all-in-one-wp-security-and-firewall
|
2144 |
+
#: admin/wp-security-firewall-menu.php:29
|
2145 |
+
msgid "5G Blacklist Firewall Rules"
|
2146 |
+
msgstr "5G Blacklist Firewall-regels"
|
2147 |
+
|
2148 |
+
# @ all-in-one-wp-security-and-firewall
|
2149 |
+
#: admin/wp-security-firewall-menu.php:30
|
2150 |
+
msgid "Internet Bots"
|
2151 |
+
msgstr "Internet Bots"
|
2152 |
+
|
2153 |
+
# @ all-in-one-wp-security-and-firewall
|
2154 |
+
#: admin/wp-security-firewall-menu.php:31
|
2155 |
+
msgid "Prevent Hotlinks"
|
2156 |
+
msgstr "Voorkom Hotlinks"
|
2157 |
+
|
2158 |
+
# @ all-in-one-wp-security-and-firewall
|
2159 |
+
#: admin/wp-security-firewall-menu.php:32
|
2160 |
+
msgid "404 Detection"
|
2161 |
+
msgstr "404 Detectie"
|
2162 |
+
|
2163 |
+
# @ all-in-one-wp-security-and-firewall
|
2164 |
+
#: admin/wp-security-firewall-menu.php:115
|
2165 |
+
#: admin/wp-security-firewall-menu.php:663 admin/wp-security-spam-menu.php:102
|
2166 |
+
#: admin/wp-security-user-registration-menu.php:96
|
2167 |
+
msgid "Settings were successfully saved"
|
2168 |
+
msgstr "Instellingen zijn succesvol opgeslagen"
|
2169 |
+
|
2170 |
+
# @ all-in-one-wp-security-and-firewall
|
2171 |
+
#: admin/wp-security-firewall-menu.php:124
|
2172 |
+
#: admin/wp-security-firewall-menu.php:503
|
2173 |
+
msgid "Firewall Settings"
|
2174 |
+
msgstr "Firewall-instellingen"
|
2175 |
+
|
2176 |
+
# @ all-in-one-wp-security-and-firewall
|
2177 |
+
#: admin/wp-security-firewall-menu.php:131
|
2178 |
+
#, php-format
|
2179 |
+
msgid "This should not have any impact on your site's general functionality but if you wish you can take a %s of your .htaccess file before proceeding."
|
2180 |
+
msgstr "Dit zou geen enkele invloed moeten hebben op de algemene functionaliteit van uw site, maar u kunt desgewenst een %s van uw .htaccess-bestand nemen voordat u doorgaat."
|
2181 |
+
|
2182 |
+
# @ all-in-one-wp-security-and-firewall
|
2183 |
+
#: admin/wp-security-firewall-menu.php:132
|
2184 |
+
msgid "The features in this tab allow you to activate some basic firewall security protection rules for your site."
|
2185 |
+
msgstr "Met de functies op dit tabblad kunt u enkele basisbeveiligingsregels voor firewallbeveiliging voor uw site activeren."
|
2186 |
+
|
2187 |
+
# @ all-in-one-wp-security-and-firewall
|
2188 |
+
#: admin/wp-security-firewall-menu.php:133
|
2189 |
+
msgid "The firewall functionality is achieved via the insertion of special code into your currently active .htaccess file."
|
2190 |
+
msgstr "De firewallfunctionaliteit wordt bereikt door het invoegen van speciale code in uw momenteel actieve .htaccess-bestand."
|
2191 |
+
|
2192 |
+
# @ all-in-one-wp-security-and-firewall
|
2193 |
+
#: admin/wp-security-firewall-menu.php:143
|
2194 |
+
msgid "Attention:"
|
2195 |
+
msgstr "Aandacht:"
|
2196 |
+
|
2197 |
+
# @ all-in-one-wp-security-and-firewall
|
2198 |
+
#: admin/wp-security-firewall-menu.php:144
|
2199 |
+
msgid "Currently the "
|
2200 |
+
msgstr "Momenteel de "
|
2201 |
+
|
2202 |
+
# @ all-in-one-wp-security-and-firewall
|
2203 |
+
#: admin/wp-security-firewall-menu.php:144
|
2204 |
+
#: admin/wp-security-firewall-menu.php:191
|
2205 |
+
msgid "Enable Pingback Protection"
|
2206 |
+
msgstr "Activeer Pingback-bescherming"
|
2207 |
+
|
2208 |
+
# @ all-in-one-wp-security-and-firewall
|
2209 |
+
#: admin/wp-security-firewall-menu.php:144
|
2210 |
+
msgid " is active."
|
2211 |
+
msgstr " is actief."
|
2212 |
+
|
2213 |
+
# @ all-in-one-wp-security-and-firewall
|
2214 |
+
#: admin/wp-security-firewall-menu.php:145
|
2215 |
+
msgid "Please beware that if you are using the WordPress iOS App, then you will need to deactivate this feature in order for the app to work properly."
|
2216 |
+
msgstr "Let op: als u de WordPress iOS-app gebruikt, moet u deze functie deactiveren om ervoor te zorgen dat de app correct werkt."
|
2217 |
+
|
2218 |
+
# @ all-in-one-wp-security-and-firewall
|
2219 |
+
#: admin/wp-security-firewall-menu.php:153
|
2220 |
+
msgid "Basic Firewall Settings"
|
2221 |
+
msgstr "Basis Firewall-instellingen"
|
2222 |
+
|
2223 |
+
# @ all-in-one-wp-security-and-firewall
|
2224 |
+
#: admin/wp-security-firewall-menu.php:161
|
2225 |
+
msgid "Enable Basic Firewall Protection"
|
2226 |
+
msgstr "Schakel de basis firewallbescherming in"
|
2227 |
+
|
2228 |
+
# @ all-in-one-wp-security-and-firewall
|
2229 |
+
#: admin/wp-security-firewall-menu.php:164
|
2230 |
+
msgid "Check this if you want to apply basic firewall protection to your site."
|
2231 |
+
msgstr "Selecteer dit als u basisfirewallbeveiliging op uw site wilt toepassen."
|
2232 |
+
|
2233 |
+
# @ all-in-one-wp-security-and-firewall
|
2234 |
+
#: admin/wp-security-firewall-menu.php:168
|
2235 |
+
msgid "This setting will implement the following basic firewall protection mechanisms on your site:"
|
2236 |
+
msgstr "Met deze instelling worden de volgende basismechanismen voor firewallbescherming op uw site geïmplementeerd:"
|
2237 |
+
|
2238 |
+
# @ all-in-one-wp-security-and-firewall
|
2239 |
+
#: admin/wp-security-firewall-menu.php:169
|
2240 |
+
msgid "1) Protect your htaccess file by denying access to it."
|
2241 |
+
msgstr "1) Bescherm uw htaccess-bestand door toegang te weigeren."
|
2242 |
+
|
2243 |
+
# @ all-in-one-wp-security-and-firewall
|
2244 |
+
#: admin/wp-security-firewall-menu.php:170
|
2245 |
+
msgid "2) Disable the server signature."
|
2246 |
+
msgstr "2) Schakel de serverhandsignature uit."
|
2247 |
+
|
2248 |
+
# @ all-in-one-wp-security-and-firewall
|
2249 |
+
#: admin/wp-security-firewall-menu.php:171
|
2250 |
+
msgid "3) Limit file upload size (10MB)."
|
2251 |
+
msgstr "3) Beperk bestandsgrootte van uploaden (10MB)."
|
2252 |
+
|
2253 |
+
# @ all-in-one-wp-security-and-firewall
|
2254 |
+
#: admin/wp-security-firewall-menu.php:172
|
2255 |
+
msgid "4) Protect your wp-config.php file by denying access to it."
|
2256 |
+
msgstr "4) Bescherm uw wp-config.php bestand door toegang te weigeren."
|
2257 |
+
|
2258 |
+
# @ all-in-one-wp-security-and-firewall
|
2259 |
+
#: admin/wp-security-firewall-menu.php:173
|
2260 |
+
msgid "The above firewall features will be applied via your .htaccess file and should not affect your site's overall functionality."
|
2261 |
+
msgstr "De bovenstaande firewall-functies worden toegepast via uw .htaccess-bestand en hebben geen invloed op de algehele functionaliteit van uw site."
|
2262 |
+
|
2263 |
+
# @ all-in-one-wp-security-and-firewall
|
2264 |
+
#: admin/wp-security-firewall-menu.php:174
|
2265 |
+
msgid "You are still advised to take a backup of your active .htaccess file just in case."
|
2266 |
+
msgstr "U wordt nog steeds geadviseerd om een back-up te maken van uw actieve .htaccess-bestand voor het geval dat."
|
2267 |
+
|
2268 |
+
# @ all-in-one-wp-security-and-firewall
|
2269 |
+
#: admin/wp-security-firewall-menu.php:183
|
2270 |
+
msgid "WordPress Pingback Vulnerability Protection"
|
2271 |
+
msgstr "WordPress Pingback-beveiligingslek"
|
2272 |
+
|
2273 |
+
# @ all-in-one-wp-security-and-firewall
|
2274 |
+
#: admin/wp-security-firewall-menu.php:194
|
2275 |
+
msgid "Check this if you are not using the WP XML-RPC functionality and you want to enable protection against WordPress pingback vulnerabilities."
|
2276 |
+
msgstr "Vink dit aan als u de WP XML-RPC-functionaliteit niet gebruikt en u bescherming tegen WordPress-kwetsbaarheden voor Pingback wilt inschakelen."
|
2277 |
+
|
2278 |
+
# @ all-in-one-wp-security-and-firewall
|
2279 |
+
#: admin/wp-security-firewall-menu.php:198
|
2280 |
+
msgid "This setting will add a directive in your .htaccess to disable access to the WordPress xmlrpc.php file which is responsible for the XML-RPC functionality such as pingbacks in WordPress."
|
2281 |
+
msgstr "Deze instelling voegt een richtlijn toe aan uw .htaccess om de toegang tot het WordPress xmlrpc.php-bestand uit te schakelen dat verantwoordelijk is voor de XML-RPC-functionaliteit zoals pingbacks in WordPress."
|
2282 |
+
|
2283 |
+
# @ all-in-one-wp-security-and-firewall
|
2284 |
+
#: admin/wp-security-firewall-menu.php:199
|
2285 |
+
msgid "Hackers can exploit various pingback vulnerabilities in the WordPress XML-RPC API in a number of ways such as:"
|
2286 |
+
msgstr "Hackers kunnen verschillende Pingback-kwetsbaarheden in de WordPress XML-RPC API misbruiken op een aantal manieren, zoals:"
|
2287 |
+
|
2288 |
+
# @ all-in-one-wp-security-and-firewall
|
2289 |
+
#: admin/wp-security-firewall-menu.php:200
|
2290 |
+
msgid "1) Denial of Service (DoS) attacks"
|
2291 |
+
msgstr "1) tegengaan van Service-aanvallen (DoS)"
|
2292 |
+
|
2293 |
+
# @ all-in-one-wp-security-and-firewall
|
2294 |
+
#: admin/wp-security-firewall-menu.php:201
|
2295 |
+
msgid "2) Hacking internal routers."
|
2296 |
+
msgstr "2) het hacken van interne routers."
|
2297 |
+
|
2298 |
+
# @ all-in-one-wp-security-and-firewall
|
2299 |
+
#: admin/wp-security-firewall-menu.php:202
|
2300 |
+
msgid "3) Scanning ports in internal networks to get info from various hosts."
|
2301 |
+
msgstr "3) Scannen van poorten in interne netwerken om informatie te krijgen van verschillende hosts."
|
2302 |
+
|
2303 |
+
# @ all-in-one-wp-security-and-firewall
|
2304 |
+
#: admin/wp-security-firewall-menu.php:203
|
2305 |
+
msgid "Apart from the security protection benefit, this feature may also help reduce load on your server, particularly if your site currently has a lot of unwanted traffic hitting the XML-RPC API on your installation."
|
2306 |
+
msgstr "Afgezien van het voordeel van de beveiligingsbescherming, kan deze functie ook helpen de belasting van uw server te verminderen, vooral als uw site momenteel veel ongewenst verkeer heeft dat de XML-RPC API op uw installatie raakt."
|
2307 |
+
|
2308 |
+
# @ all-in-one-wp-security-and-firewall
|
2309 |
+
#: admin/wp-security-firewall-menu.php:204
|
2310 |
+
msgid "NOTE: You should only enable this feature if you are not currently using the XML-RPC functionality on your WordPress installation."
|
2311 |
+
msgstr "OPMERKING: u moet deze functie alleen inschakelen als u de XML-RPC-functionaliteit momenteel niet gebruikt in uw WordPress-installatie."
|
2312 |
+
|
2313 |
+
# @ all-in-one-wp-security-and-firewall
|
2314 |
+
#: admin/wp-security-firewall-menu.php:211
|
2315 |
+
msgid "Save Basic Firewall Settings"
|
2316 |
+
msgstr "Bewaar basisinstellingen van de firewall"
|
2317 |
+
|
2318 |
+
# @ all-in-one-wp-security-and-firewall
|
2319 |
+
#: admin/wp-security-firewall-menu.php:283
|
2320 |
+
msgid "You have successfully saved the Additional Firewall Protection configuration"
|
2321 |
+
msgstr "U hebt de aanvullende firewallbeveiligingsconfiguratie opgeslagen"
|
2322 |
+
|
2323 |
+
# @ all-in-one-wp-security-and-firewall
|
2324 |
+
#: admin/wp-security-firewall-menu.php:297
|
2325 |
+
msgid "Additional Firewall Protection"
|
2326 |
+
msgstr "Extra firewallbescherming"
|
2327 |
+
|
2328 |
+
# @ all-in-one-wp-security-and-firewall
|
2329 |
+
#: admin/wp-security-firewall-menu.php:301
|
2330 |
+
#, php-format
|
2331 |
+
msgid "Due to the nature of the code being inserted to the .htaccess file, this feature may break some functionality for certain plugins and you are therefore advised to take a %s of .htaccess before applying this configuration."
|
2332 |
+
msgstr "Vanwege de aard van de code die wordt ingevoegd in het. Htaccess-bestand, kan deze functie sommige functionaliteit voor bepaalde plug-ins onderbreken en daarom wordt u geadviseerd om %s van .htaccess te nemen voordat u deze configuratie toepast."
|
2333 |
+
|
2334 |
+
# @ all-in-one-wp-security-and-firewall
|
2335 |
+
#: admin/wp-security-firewall-menu.php:303
|
2336 |
+
msgid "This feature allows you to activate more advanced firewall settings to your site."
|
2337 |
+
msgstr "Met deze functie kunt u geavanceerdere firewall-instellingen activeren voor uw site."
|
2338 |
+
|
2339 |
+
# @ all-in-one-wp-security-and-firewall
|
2340 |
+
#: admin/wp-security-firewall-menu.php:304
|
2341 |
+
msgid "The advanced firewall rules are applied via the insertion of special code to your currently active .htaccess file."
|
2342 |
+
msgstr "De geavanceerde firewallregels worden toegepast via het invoegen van speciale code in uw momenteel actieve .htaccess-bestand."
|
2343 |
+
|
2344 |
+
# @ all-in-one-wp-security-and-firewall
|
2345 |
+
#: admin/wp-security-firewall-menu.php:313
|
2346 |
+
msgid "Listing of Directory Contents"
|
2347 |
+
msgstr "Vermelding van directoryinhoud"
|
2348 |
+
|
2349 |
+
# @ all-in-one-wp-security-and-firewall
|
2350 |
+
#: admin/wp-security-firewall-menu.php:322
|
2351 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:88
|
2352 |
+
msgid "Disable Index Views"
|
2353 |
+
msgstr "Indexweergaven uitschakelen"
|
2354 |
+
|
2355 |
+
# @ all-in-one-wp-security-and-firewall
|
2356 |
+
#: admin/wp-security-firewall-menu.php:325
|
2357 |
+
msgid "Check this if you want to disable directory and file listing."
|
2358 |
+
msgstr "Selecteer dit als u directory- en bestandsvermeldingen wilt uitschakelen."
|
2359 |
+
|
2360 |
+
# @ all-in-one-wp-security-and-firewall
|
2361 |
+
#: admin/wp-security-firewall-menu.php:330
|
2362 |
+
msgid "By default, an Apache server will allow the listing of the contents of a directory if it doesn't contain an index.php file."
|
2363 |
+
msgstr "Standaard staat een Apache-server de vermelding van de inhoud van een map toe als deze geen index.php-bestand bevat."
|
2364 |
+
|
2365 |
+
# @ all-in-one-wp-security-and-firewall
|
2366 |
+
#: admin/wp-security-firewall-menu.php:332
|
2367 |
+
msgid "This feature will prevent the listing of contents for all directories."
|
2368 |
+
msgstr "Deze functie voorkomt dat de inhoud van alle mappen wordt vermeld."
|
2369 |
+
|
2370 |
+
# @ all-in-one-wp-security-and-firewall
|
2371 |
+
#: admin/wp-security-firewall-menu.php:334
|
2372 |
+
msgid "NOTE: In order for this feature to work \"AllowOverride\" of the Indexes directive must be enabled in your httpd.conf file. Ask your hosting provider to check this if you don't have access to httpd.conf"
|
2373 |
+
msgstr "OPMERKING: Om deze functie te laten werken, moet \"AllowOverride\" van de Indexes-instructie zijn ingeschakeld in uw httpd.conf-bestand. Vraag uw hostingprovider om dit te controleren als u geen toegang heeft tot httpd.conf"
|
2374 |
+
|
2375 |
+
# @ all-in-one-wp-security-and-firewall
|
2376 |
+
#: admin/wp-security-firewall-menu.php:343
|
2377 |
+
msgid "Trace and Track"
|
2378 |
+
msgstr "Traceren en volgen"
|
2379 |
+
|
2380 |
+
# @ all-in-one-wp-security-and-firewall
|
2381 |
+
#: admin/wp-security-firewall-menu.php:352
|
2382 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:89
|
2383 |
+
msgid "Disable Trace and Track"
|
2384 |
+
msgstr "Schakel Traceren en volgen uit"
|
2385 |
+
|
2386 |
+
# @ all-in-one-wp-security-and-firewall
|
2387 |
+
#: admin/wp-security-firewall-menu.php:355
|
2388 |
+
msgid "Check this if you want to disable trace and track."
|
2389 |
+
msgstr "Selecteer dit als u traceren en volgen wilt uitschakelen."
|
2390 |
+
|
2391 |
+
# @ all-in-one-wp-security-and-firewall
|
2392 |
+
#: admin/wp-security-firewall-menu.php:360
|
2393 |
+
msgid "HTTP Trace attack (XST) can be used to return header requests and grab cookies and other information."
|
2394 |
+
msgstr "HTTP Trace Attack (XST) kan worden gebruikt om headeraanvragen in te dienen en om cookies en andere informatie te bemachtigen."
|
2395 |
+
|
2396 |
+
# @ all-in-one-wp-security-and-firewall
|
2397 |
+
#: admin/wp-security-firewall-menu.php:362
|
2398 |
+
msgid "This hacking technique is usually used together with cross site scripting attacks (XSS)."
|
2399 |
+
msgstr "Deze hacktechniek wordt meestal gebruikt in combinatie met cross-site scripting attacks (XSS)."
|
2400 |
+
|
2401 |
+
# @ all-in-one-wp-security-and-firewall
|
2402 |
+
#: admin/wp-security-firewall-menu.php:364
|
2403 |
+
msgid "Disabling trace and track on your site will help prevent HTTP Trace attacks."
|
2404 |
+
msgstr "Als u tracering en volgen uitschakelt op uw site, voorkomt u HTTP Trace-aanvallen."
|
2405 |
+
|
2406 |
+
# @ all-in-one-wp-security-and-firewall
|
2407 |
+
#: admin/wp-security-firewall-menu.php:373
|
2408 |
+
msgid "Proxy Comment Posting"
|
2409 |
+
msgstr "Proxy-opmerkingen plaatsen"
|
2410 |
+
|
2411 |
+
# @ all-in-one-wp-security-and-firewall
|
2412 |
+
#: admin/wp-security-firewall-menu.php:383
|
2413 |
+
msgid "Forbid Proxy Comment Posting"
|
2414 |
+
msgstr "Verbieden het plaatsen van Proxy opmerkingen"
|
2415 |
+
|
2416 |
+
# @ all-in-one-wp-security-and-firewall
|
2417 |
+
#: admin/wp-security-firewall-menu.php:386
|
2418 |
+
msgid "Check this if you want to forbid proxy comment posting."
|
2419 |
+
msgstr "Vink dit aan als u het plaatsen van proxycommentaar wilt verbieden."
|
2420 |
+
|
2421 |
+
# @ all-in-one-wp-security-and-firewall
|
2422 |
+
#: admin/wp-security-firewall-menu.php:391
|
2423 |
+
msgid "This setting will deny any requests that use a proxy server when posting comments."
|
2424 |
+
msgstr "Met deze instelling worden aanvragen die gebruikmaken van een proxyserver geweigerd bij het plaatsen van opmerkingen."
|
2425 |
+
|
2426 |
+
# @ all-in-one-wp-security-and-firewall
|
2427 |
+
#: admin/wp-security-firewall-menu.php:392
|
2428 |
+
msgid "By forbidding proxy comments you are in effect eliminating some SPAM and other proxy requests."
|
2429 |
+
msgstr "Door proxy-opmerkingen te verbieden, elimineert u in feite enkele SPAM- en andere proxyverzoeken."
|
2430 |
+
|
2431 |
+
# @ all-in-one-wp-security-and-firewall
|
2432 |
+
#: admin/wp-security-firewall-menu.php:401
|
2433 |
+
msgid "Bad Query Strings"
|
2434 |
+
msgstr "Slechte queryreeksen"
|
2435 |
+
|
2436 |
+
# @ all-in-one-wp-security-and-firewall
|
2437 |
+
#: admin/wp-security-firewall-menu.php:411
|
2438 |
+
msgid "Deny Bad Query Strings"
|
2439 |
+
msgstr "Slechte queryreeksen weigeren"
|
2440 |
+
|
2441 |
+
# @ all-in-one-wp-security-and-firewall
|
2442 |
+
#: admin/wp-security-firewall-menu.php:414
|
2443 |
+
msgid "This will help protect you against malicious queries via XSS."
|
2444 |
+
msgstr "Dit helpt je te beschermen tegen kwaadwillige vragen via XSS."
|
2445 |
+
|
2446 |
+
# @ all-in-one-wp-security-and-firewall
|
2447 |
+
#: admin/wp-security-firewall-menu.php:419
|
2448 |
+
msgid "This feature will write rules in your .htaccess file to prevent malicious string attacks on your site using XSS."
|
2449 |
+
msgstr "Deze functie schrijft regels in uw. Htaccess-bestand om kwaadwillende reeksaanvallen op uw site met XSS te voorkomen."
|
2450 |
+
|
2451 |
+
# @ all-in-one-wp-security-and-firewall
|
2452 |
+
#: admin/wp-security-firewall-menu.php:420
|
2453 |
+
msgid "NOTE: Some of these strings might be used for plugins or themes and hence this might break some functionality."
|
2454 |
+
msgstr "OPMERKING: sommige van deze tekenreeksen kunnen worden gebruikt voor plug-ins of thema's en daarom kan dit sommige functionaliteit tegenwerken."
|
2455 |
+
|
2456 |
+
# @ all-in-one-wp-security-and-firewall
|
2457 |
+
#: admin/wp-security-firewall-menu.php:421
|
2458 |
+
#: admin/wp-security-firewall-menu.php:451
|
2459 |
+
msgid "You are therefore strongly advised to take a backup of your active .htaccess file before applying this feature."
|
2460 |
+
msgstr "Daarom wordt u ten zeerste aangeraden een back-up van uw actieve .htaccess-bestand te maken voordat u deze functie toepast."
|
2461 |
+
|
2462 |
+
# @ all-in-one-wp-security-and-firewall
|
2463 |
+
#: admin/wp-security-firewall-menu.php:430
|
2464 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:92
|
2465 |
+
msgid "Advanced Character String Filter"
|
2466 |
+
msgstr "Geavanceerde Character String Filter"
|
2467 |
+
|
2468 |
+
# @ all-in-one-wp-security-and-firewall
|
2469 |
+
#: admin/wp-security-firewall-menu.php:440
|
2470 |
+
msgid "Enable Advanced Character String Filter"
|
2471 |
+
msgstr "Geavanceerde Advanced Character String filter inschakelen"
|
2472 |
+
|
2473 |
+
# @ all-in-one-wp-security-and-firewall
|
2474 |
+
#: admin/wp-security-firewall-menu.php:443
|
2475 |
+
msgid "This will block bad character matches from XSS."
|
2476 |
+
msgstr "Hiermee worden verkeerde karakterovereenkomsten van XSS geblokkeerd."
|
2477 |
+
|
2478 |
+
# @ all-in-one-wp-security-and-firewall
|
2479 |
+
#: admin/wp-security-firewall-menu.php:448
|
2480 |
+
msgid "This is an advanced character string filter to prevent malicious string attacks on your site coming from Cross Site Scripting (XSS)."
|
2481 |
+
msgstr "Dit is een geavanceerd character string filter om te voorkomen dat kwaadwillende string attacks op uw site die afkomstig zijn van Cross Site Scripting (XSS)."
|
2482 |
+
|
2483 |
+
# @ all-in-one-wp-security-and-firewall
|
2484 |
+
#: admin/wp-security-firewall-menu.php:449
|
2485 |
+
msgid "This setting matches for common malicious string patterns and exploits and will produce a 403 error for the hacker attempting the query."
|
2486 |
+
msgstr "Deze instelling komt overeen met veelgebruikte kwaadwillende stringpatronen en exploits en zal een 403-fout produceren voor de hacker die de query probeert uit te voeren."
|
2487 |
+
|
2488 |
+
# @ all-in-one-wp-security-and-firewall
|
2489 |
+
#: admin/wp-security-firewall-menu.php:450
|
2490 |
+
msgid "NOTE: Some strings for this setting might break some functionality."
|
2491 |
+
msgstr "OPMERKING: Sommige strings met deze instelling kunnen sommige functies schenden."
|
2492 |
+
|
2493 |
+
# @ all-in-one-wp-security-and-firewall
|
2494 |
+
#: admin/wp-security-firewall-menu.php:459
|
2495 |
+
msgid "Save Additional Firewall Settings"
|
2496 |
+
msgstr "Sla extra firewall-instellingen op"
|
2497 |
+
|
2498 |
+
# @ all-in-one-wp-security-and-firewall
|
2499 |
+
#: admin/wp-security-firewall-menu.php:494
|
2500 |
+
msgid "You have successfully saved the 5G Firewall Protection configuration"
|
2501 |
+
msgstr "U hebt de configuratie van de 5G-firewallbescherming succesvol opgeslagen"
|
2502 |
+
|
2503 |
+
# @ all-in-one-wp-security-and-firewall
|
2504 |
+
#: admin/wp-security-firewall-menu.php:507
|
2505 |
+
#, php-format
|
2506 |
+
msgid "This feature allows you to activate the 5G firewall security protection rules designed and produced by %s."
|
2507 |
+
msgstr "Met deze functie kunt u de beveiligings beschermingsregels van de 5G-firewall activeren die door %s zijn ontworpen en geproduceerd."
|
2508 |
+
|
2509 |
+
# @ all-in-one-wp-security-and-firewall
|
2510 |
+
#: admin/wp-security-firewall-menu.php:508
|
2511 |
+
msgid "The 5G Blacklist is a simple, flexible blacklist that helps reduce the number of malicious URL requests that hit your website."
|
2512 |
+
msgstr "De 5G Blacklist is een eenvoudige, flexibele zwarte lijst die helpt het aantal schadelijke URL-verzoeken te verminderen die op uw website terechtkomen."
|
2513 |
+
|
2514 |
+
# @ all-in-one-wp-security-and-firewall
|
2515 |
+
#: admin/wp-security-firewall-menu.php:509
|
2516 |
+
msgid "The added advantage of applying the 5G firewall to your site is that it has been tested and confirmed by the people at PerishablePress.com to be an optimal and least disruptive set of .htaccess security rules for general WP sites running on an Apache server or similar."
|
2517 |
+
msgstr "Het extra voordeel van het toepassen van de 5G-firewall op uw site is dat deze door de mensen op PerishablePress.com is getest en bevestigd als een optimale en minst verstorende set van .htaccess-beveiligingsregels voor algemene WP-sites die op een Apache-server of vergelijkbaar worden uitgevoerd ."
|
2518 |
+
|
2519 |
+
# @ all-in-one-wp-security-and-firewall
|
2520 |
+
#: admin/wp-security-firewall-menu.php:510
|
2521 |
+
#, php-format
|
2522 |
+
msgid "Therefore the 5G firewall rules should not have any impact on your site's general functionality but if you wish you can take a %s of your .htaccess file before proceeding."
|
2523 |
+
msgstr "Daarom mogen de 5G-firewallregels geen invloed hebben op de algemene functionaliteit van uw site, maar u kunt desgewenst een %s van uw .htaccess-bestand nemen voordat u doorgaat."
|
2524 |
+
|
2525 |
+
# @ all-in-one-wp-security-and-firewall
|
2526 |
+
#: admin/wp-security-firewall-menu.php:516
|
2527 |
+
msgid "5G Blacklist/Firewall Settings"
|
2528 |
+
msgstr "5G Blacklist / Firewall-instellingen"
|
2529 |
+
|
2530 |
+
# @ all-in-one-wp-security-and-firewall
|
2531 |
+
#: admin/wp-security-firewall-menu.php:528
|
2532 |
+
msgid "Enable 5G Firewall Protection"
|
2533 |
+
msgstr "Schakel 5G Firewall-bescherming in"
|
2534 |
+
|
2535 |
+
# @ all-in-one-wp-security-and-firewall
|
2536 |
+
#: admin/wp-security-firewall-menu.php:531
|
2537 |
+
msgid "Check this if you want to apply the 5G Blacklist firewall protection from perishablepress.com to your site."
|
2538 |
+
msgstr "Vink dit aan als u de 5G Blacklist-firewallbescherming van perishablepress.com op uw site wilt toepassen."
|
2539 |
+
|
2540 |
+
# @ all-in-one-wp-security-and-firewall
|
2541 |
+
#: admin/wp-security-firewall-menu.php:535
|
2542 |
+
msgid "This setting will implement the 5G security firewall protection mechanisms on your site which include the following things:"
|
2543 |
+
msgstr "Deze instelling implementeert de 5G-firewallbeveiligingsmechanismen op uw site die de volgende zaken bevatten:"
|
2544 |
+
|
2545 |
+
# @ all-in-one-wp-security-and-firewall
|
2546 |
+
#: admin/wp-security-firewall-menu.php:536
|
2547 |
+
msgid "1) Block forbidden characters commonly used in exploitative attacks."
|
2548 |
+
msgstr "1) Blokkeer verboden karakters die vaak worden gebruikt bij exploitative attacks."
|
2549 |
+
|
2550 |
+
# @ all-in-one-wp-security-and-firewall
|
2551 |
+
#: admin/wp-security-firewall-menu.php:537
|
2552 |
+
msgid "2) Block malicious encoded URL characters such as the \".css(\" string."
|
2553 |
+
msgstr "2) Blokkeer kwaadwillende gecodeerde URL-tekens, zoals de tekenreeks \".css (\"."
|
2554 |
+
|
2555 |
+
# @ all-in-one-wp-security-and-firewall
|
2556 |
+
#: admin/wp-security-firewall-menu.php:538
|
2557 |
+
msgid "3) Guard against the common patterns and specific exploits in the root portion of targeted URLs."
|
2558 |
+
msgstr "3) Bescherm uzelf tegen de algemene patronen en specifieke exploits in het rootgedeelte van gerichte URL's."
|
2559 |
+
|
2560 |
+
# @ all-in-one-wp-security-and-firewall
|
2561 |
+
#: admin/wp-security-firewall-menu.php:539
|
2562 |
+
msgid "4) Stop attackers from manipulating query strings by disallowing illicit characters."
|
2563 |
+
msgstr "4) Stop aanvallers met het manipuleren van query strings door ongeoorloofde characters niet toe te staan."
|
2564 |
+
|
2565 |
+
# @ all-in-one-wp-security-and-firewall
|
2566 |
+
#: admin/wp-security-firewall-menu.php:540
|
2567 |
+
msgid "....and much more."
|
2568 |
+
msgstr "....en veel meer."
|
2569 |
+
|
2570 |
+
# @ all-in-one-wp-security-and-firewall
|
2571 |
+
#: admin/wp-security-firewall-menu.php:546
|
2572 |
+
msgid "Save 5G Firewall Settings"
|
2573 |
+
msgstr "Sla 5G Firewall-instellingen op"
|
2574 |
+
|
2575 |
+
# @ all-in-one-wp-security-and-firewall
|
2576 |
+
#: admin/wp-security-firewall-menu.php:577
|
2577 |
+
msgid "The Internet bot settings were successfully saved"
|
2578 |
+
msgstr "De internetbot-instellingen zijn succesvol opgeslagen"
|
2579 |
+
|
2580 |
+
# @ all-in-one-wp-security-and-firewall
|
2581 |
+
#: admin/wp-security-firewall-menu.php:581
|
2582 |
+
msgid "Internet Bot Settings"
|
2583 |
+
msgstr "Internet Bot-instellingen"
|
2584 |
+
|
2585 |
+
# @ all-in-one-wp-security-and-firewall
|
2586 |
+
#: admin/wp-security-firewall-menu.php:588
|
2587 |
+
#, php-format
|
2588 |
+
msgid "%s?"
|
2589 |
+
msgstr "%s?"
|
2590 |
+
|
2591 |
+
# @ all-in-one-wp-security-and-firewall
|
2592 |
+
#: admin/wp-security-firewall-menu.php:590
|
2593 |
+
msgid "A bot is a piece of software which runs on the Internet and performs automatic tasks. For example when Google indexes your pages it uses automatic bots to achieve this task."
|
2594 |
+
msgstr "Een bot is een stukje software dat op internet wordt uitgevoerd en automatische taken uitvoert. Wanneer Google bijvoorbeeld uw pagina's indexeert, gebruikt het automatische bots om deze taak te bereiken."
|
2595 |
+
|
2596 |
+
# @ all-in-one-wp-security-and-firewall
|
2597 |
+
#: admin/wp-security-firewall-menu.php:591
|
2598 |
+
msgid "A lot of bots are legitimate and non-malicous but not all bots are good and often you will find some which try to impersonate legitimate bots such as \"Googlebot\" but in reality they have nohing to do with Google at all."
|
2599 |
+
msgstr "Veel bots zijn legitiem en non-malicous, maar niet alle bots zijn goed en vaak zul je er een paar vinden die proberen om zich uit te geven voor legitieme bots zoals 'Googlebot', maar in werkelijkheid hebben ze helemaal niets met Google te maken."
|
2600 |
+
|
2601 |
+
# @ all-in-one-wp-security-and-firewall
|
2602 |
+
#: admin/wp-security-firewall-menu.php:592
|
2603 |
+
msgid "Although most of the bots out there are relatively harmless sometimes website owners want to have more control over which bots they allow into their site."
|
2604 |
+
msgstr "Hoewel de meeste bots die er zijn relatief onschadelijk zijn, willen website-eigenaren meer controle over welke bots ze op hun site toelaten."
|
2605 |
+
|
2606 |
+
# @ all-in-one-wp-security-and-firewall
|
2607 |
+
#: admin/wp-security-firewall-menu.php:593
|
2608 |
+
msgid "This feature allows you to block bots which are impersonating as a Googlebot but actually aren't. (In other words they are fake Google bots)"
|
2609 |
+
msgstr "Met deze functie kunt u bots blokkeren die zich voordoen als een Googlebot, maar dat in werkelijkheid niet zijn. (Met andere woorden: het zijn valse Google-bots)"
|
2610 |
+
|
2611 |
+
# @ all-in-one-wp-security-and-firewall
|
2612 |
+
#: admin/wp-security-firewall-menu.php:594
|
2613 |
+
msgid "Googlebots have a unique indentity which cannot easily be forged and this feature will indentify any fake Google bots and block them from reading your site's pages."
|
2614 |
+
msgstr "Google Bots hebben een unieke identiteit die niet gemakkelijk kan worden vervalst en deze functie identificeert eventuele nep-bots van Google en voorkomt dat ze de pagina's van uw site lezen."
|
2615 |
+
|
2616 |
+
# @ all-in-one-wp-security-and-firewall
|
2617 |
+
#: admin/wp-security-firewall-menu.php:600
|
2618 |
+
msgid "<strong>Attention</strong>: Sometimes non-malicious Internet organizations might have bots which impersonate as a \"Googlebot\"."
|
2619 |
+
msgstr "<strong> Let op </ strong>: soms hebben niet-kwaadwillende internetorganisaties mogelijk bots die zich voordoen als een 'Googlebot'."
|
2620 |
+
|
2621 |
+
# @ all-in-one-wp-security-and-firewall
|
2622 |
+
#: admin/wp-security-firewall-menu.php:601
|
2623 |
+
msgid "Just be aware that if you activate this feature the plugin will block all bots which use the \"Googlebot\" string in their User Agent information but are NOT officially from Google (irrespective whether they are malicious or not)."
|
2624 |
+
msgstr "Houd er rekening mee dat als u deze functie activeert, de plug-in alle bots die de 'Googlebot' string gebruiken blokkeert in hun User Agent-informatie, maar niet officieel van Google is (ongeacht of ze kwaadaardig zijn of niet)."
|
2625 |
+
|
2626 |
+
# @ all-in-one-wp-security-and-firewall
|
2627 |
+
#: admin/wp-security-firewall-menu.php:602
|
2628 |
+
msgid "All other bots from other organizations such as \"Yahoo\", \"Bing\" etc will not be affected by this feature."
|
2629 |
+
msgstr "Alle andere bots van andere organisaties zoals \"Yahoo\", \"Bing\" enz. Worden niet beïnvloed door deze functie."
|
2630 |
+
|
2631 |
+
# @ all-in-one-wp-security-and-firewall
|
2632 |
+
#: admin/wp-security-firewall-menu.php:608
|
2633 |
+
#: admin/wp-security-firewall-menu.php:618
|
2634 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:94
|
2635 |
+
msgid "Block Fake Googlebots"
|
2636 |
+
msgstr "Nep Googlebots blokkeren"
|
2637 |
+
|
2638 |
+
# @ all-in-one-wp-security-and-firewall
|
2639 |
+
#: admin/wp-security-firewall-menu.php:621
|
2640 |
+
msgid "Check this if you want to block all fake Googlebots."
|
2641 |
+
msgstr "Vink dit aan als je alle nep-Googlebots wilt blokkeren."
|
2642 |
+
|
2643 |
+
# @ all-in-one-wp-security-and-firewall
|
2644 |
+
#: admin/wp-security-firewall-menu.php:625
|
2645 |
+
msgid "This feature will check if the User Agent information of a bot contains the string \"Googlebot\"."
|
2646 |
+
msgstr "Deze functie controleert of de User Agent-informatie van een bot de string \"Googlebot\" bevat."
|
2647 |
+
|
2648 |
+
# @ all-in-one-wp-security-and-firewall
|
2649 |
+
#: admin/wp-security-firewall-menu.php:626
|
2650 |
+
msgid "It will then perform a few tests to verify if the bot is legitimately from Google and if so it will allow the bot to proceed."
|
2651 |
+
msgstr "Vervolgens voert het een paar tests uit om te controleren of de bot legitiem van Google is en zo ja, dan kan de bot doorgaan."
|
2652 |
+
|
2653 |
+
# @ all-in-one-wp-security-and-firewall
|
2654 |
+
#: admin/wp-security-firewall-menu.php:627
|
2655 |
+
msgid "If the bot fails the checks then the plugin will mark it as being a fake Googlebot and it will block it"
|
2656 |
+
msgstr "Als de bot niet voldoet aan de controles, markeert de plug-in deze als een nep-Googlebot en blokkeert deze"
|
2657 |
+
|
2658 |
+
# @ all-in-one-wp-security-and-firewall
|
2659 |
+
#: admin/wp-security-firewall-menu.php:634
|
2660 |
+
msgid "Save Internet Bot Settings"
|
2661 |
+
msgstr "Sla de internet-botinstellingen op"
|
2662 |
+
|
2663 |
+
# @ all-in-one-wp-security-and-firewall
|
2664 |
+
#: admin/wp-security-firewall-menu.php:671
|
2665 |
+
#: admin/wp-security-firewall-menu.php:693
|
2666 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:32
|
2667 |
+
msgid "Prevent Image Hotlinking"
|
2668 |
+
msgstr "Voorkom dat afbeeldingen hotlinken worden"
|
2669 |
+
|
2670 |
+
# @ all-in-one-wp-security-and-firewall
|
2671 |
+
#: admin/wp-security-firewall-menu.php:674
|
2672 |
+
msgid "A Hotlink is where someone displays an image on their site which is actually located on your site by using a direct link to the source of the image on your server."
|
2673 |
+
msgstr "Een hotlink is waar iemand een afbeelding op zijn site weergeeft die zich daadwerkelijk op uw site bevindt door een directe link naar de bron van de afbeelding op uw server te gebruiken."
|
2674 |
+
|
2675 |
+
# @ all-in-one-wp-security-and-firewall
|
2676 |
+
#: admin/wp-security-firewall-menu.php:675
|
2677 |
+
msgid "Due to the fact that the image being displayed on the other person's site is coming from your server, this can cause leaking of bandwidth and resources for you because your server has to present this image for the people viewing it on someone elses's site."
|
2678 |
+
msgstr "Vanwege het feit dat de afbeelding die wordt weergegeven op de site van de andere persoon afkomstig is van uw server, kan dit leiden tot lekken van bandbreedte en bronnen voor u omdat uw server deze afbeelding moet presenteren voor de mensen die deze op de website van iemand anders bekijken."
|
2679 |
+
|
2680 |
+
# @ all-in-one-wp-security-and-firewall
|
2681 |
+
#: admin/wp-security-firewall-menu.php:676
|
2682 |
+
msgid "This feature will prevent people from directly hotlinking images from your site's pages by writing some directives in your .htaccess file."
|
2683 |
+
msgstr "Met deze functie wordt voorkomen dat mensen rechtstreeks afbeeldingen van de pagina's van uw site hotlinken door enkele richtlijnen in uw .htaccess-bestand te schrijven."
|
2684 |
+
|
2685 |
+
# @ all-in-one-wp-security-and-firewall
|
2686 |
+
#: admin/wp-security-firewall-menu.php:681
|
2687 |
+
msgid "Prevent Hotlinking"
|
2688 |
+
msgstr "Voorkomen hotlinken"
|
2689 |
+
|
2690 |
+
# @ all-in-one-wp-security-and-firewall
|
2691 |
+
#: admin/wp-security-firewall-menu.php:696
|
2692 |
+
msgid "Check this if you want to prevent hotlinking to images on your site."
|
2693 |
+
msgstr "Vink dit aan als u wilt voorkomen dat hotlinks worden toegevoegd aan afbeeldingen op uw site."
|
2694 |
+
|
2695 |
+
# @ all-in-one-wp-security-and-firewall
|
2696 |
+
#: admin/wp-security-firewall-menu.php:716
|
2697 |
+
msgid "Nonce check failed for delete all 404 event logs operation!"
|
2698 |
+
msgstr "Nonce check mislukt voor het verwijderen van alle 404 event logs operatie!"
|
2699 |
+
|
2700 |
+
# @ all-in-one-wp-security-and-firewall
|
2701 |
+
#: admin/wp-security-firewall-menu.php:727
|
2702 |
+
msgid "404 Detection Feature - Delete all 404 event logs operation failed!"
|
2703 |
+
msgstr "404 Detectiefunctie - Verwijderen van alle 404-gebeurtenislogboeken is mislukt!"
|
2704 |
+
|
2705 |
+
# @ all-in-one-wp-security-and-firewall
|
2706 |
+
#: admin/wp-security-firewall-menu.php:731
|
2707 |
+
msgid "All 404 event logs were deleted from the DB successfully!"
|
2708 |
+
msgstr "Alle 404-gebeurtenislogboeken zijn met succes uit de database verwijderd!"
|
2709 |
+
|
2710 |
+
# @ all-in-one-wp-security-and-firewall
|
2711 |
+
#: admin/wp-security-firewall-menu.php:757
|
2712 |
+
#: admin/wp-security-user-login-menu.php:110
|
2713 |
+
msgid "You entered a non numeric value for the lockout time length field. It has been set to the default value."
|
2714 |
+
msgstr "U hebt een niet-numerieke waarde ingevoerd voor het veld lockout time length. Het is ingesteld op de standaardwaarde."
|
2715 |
+
|
2716 |
+
# @ all-in-one-wp-security-and-firewall
|
2717 |
+
#: admin/wp-security-firewall-menu.php:763
|
2718 |
+
msgid "You entered an incorrect format for the \"Redirect URL\" field. It has been set to the default value."
|
2719 |
+
msgstr "U hebt een verkeerd formaat ingevoerd voor het veld \"Omleidings-URL\". Het is ingesteld op de standaardwaarde."
|
2720 |
+
|
2721 |
+
# @ all-in-one-wp-security-and-firewall
|
2722 |
+
#: admin/wp-security-firewall-menu.php:795
|
2723 |
+
msgid "404 Detection Configuration"
|
2724 |
+
msgstr "404 Detectieconfiguratie"
|
2725 |
+
|
2726 |
+
# @ all-in-one-wp-security-and-firewall
|
2727 |
+
#: admin/wp-security-firewall-menu.php:798
|
2728 |
+
msgid "A 404 or Not Found error occurs when somebody tries to access a non-existent page on your website."
|
2729 |
+
msgstr "Er treedt een niet gevonden 404-fout op als iemand probeert een niet-bestaande pagina op uw website te openen."
|
2730 |
+
|
2731 |
+
# @ all-in-one-wp-security-and-firewall
|
2732 |
+
#: admin/wp-security-firewall-menu.php:799
|
2733 |
+
msgid "Typically, most 404 errors happen quite innocently when people have mis-typed a URL or used an old link to page which doesn't exist anymore."
|
2734 |
+
msgstr "Meestal gebeuren de meeste 404-fouten vrij onschuldig wanneer mensen een URL verkeerd hebben getypt of een oude link naar een pagina hebben gebruikt die niet meer bestaat."
|
2735 |
+
|
2736 |
+
# @ all-in-one-wp-security-and-firewall
|
2737 |
+
#: admin/wp-security-firewall-menu.php:800
|
2738 |
+
msgid "However, in some cases you may find many repeated 404 errors which occur in a relatively short space of time and from the same IP address which are all attempting to access a variety of non-existent page URLs."
|
2739 |
+
msgstr "In sommige gevallen kunt u echter veel herhaalde 404-fouten vinden die zich in een relatief korte tijdspanne voordoen en van hetzelfde IP-adres die allemaal proberen toegang te krijgen tot een verscheidenheid aan niet-bestaande pagina-URL's."
|
2740 |
+
|
2741 |
+
# @ all-in-one-wp-security-and-firewall
|
2742 |
+
#: admin/wp-security-firewall-menu.php:801
|
2743 |
+
msgid "Such behaviour can mean that a hacker might be trying to find a particular page or URL for sinister reasons."
|
2744 |
+
msgstr "Dergelijk gedrag kan betekenen dat een hacker om een sinistere reden een bepaalde pagina of URL probeert te vinden."
|
2745 |
+
|
2746 |
+
# @ all-in-one-wp-security-and-firewall
|
2747 |
+
#: admin/wp-security-firewall-menu.php:802
|
2748 |
+
msgid "This feature allows you to monitor all 404 events which occur on your site, and it also gives you the option of blocking IP addresses for a configured length of time."
|
2749 |
+
msgstr "Met deze functie kunt u alle 404-gebeurtenissen op uw site volgen en kunt u ook IP-adressen gedurende een ingestelde tijdsduur blokkeren."
|
2750 |
+
|
2751 |
+
# @ all-in-one-wp-security-and-firewall
|
2752 |
+
#: admin/wp-security-firewall-menu.php:803
|
2753 |
+
msgid "If you want to temporarily block an IP address, simply click the \"Temp Block\" link for the applicable IP entry in the \"404 Event Logs\" table below."
|
2754 |
+
msgstr "Als u tijdelijk een IP-adres wilt blokkeren, klikt u eenvoudig op de koppeling \"Temp Block\" voor het toepasselijke IP-item in de tabel \"404 Event Logs\" hieronder."
|
2755 |
+
|
2756 |
+
# @ all-in-one-wp-security-and-firewall
|
2757 |
+
#: admin/wp-security-firewall-menu.php:808
|
2758 |
+
msgid "404 Detection Options"
|
2759 |
+
msgstr "404 Detectieopties"
|
2760 |
+
|
2761 |
+
# @ all-in-one-wp-security-and-firewall
|
2762 |
+
#: admin/wp-security-firewall-menu.php:820
|
2763 |
+
msgid "Enable IP Lockout For 404 Events"
|
2764 |
+
msgstr "IP-vergrendeling inschakelen voor 404-gebeurtenissen"
|
2765 |
+
|
2766 |
+
# @ all-in-one-wp-security-and-firewall
|
2767 |
+
#: admin/wp-security-firewall-menu.php:823
|
2768 |
+
msgid "Check this if you want to enable the lockout of selected IP addresses."
|
2769 |
+
msgstr "Selecteer dit als u de vergrendeling van geselecteerde IP-adressen wilt inschakelen."
|
2770 |
+
|
2771 |
+
# @ all-in-one-wp-security-and-firewall
|
2772 |
+
#: admin/wp-security-firewall-menu.php:828
|
2773 |
+
msgid "When you enable this checkbox, all 404 events on your site will be logged in the table below. You can monitor these events and select some IP addresses to be blocked in the table. All IP addresses you select to be blocked from the \"404 Event Logs\" table section will be unable to access your site."
|
2774 |
+
msgstr "Wanneer u dit selectievakje inschakelt, worden alle 404 gebeurtenissen op uw site in de onderstaande tabel vastgelegd. U kunt deze gebeurtenissen controleren en bepaalde IP-adressen selecteren die in de tabel moeten worden geblokkeerd. Alle IP-adressen die u selecteert om te worden geblokkeerd in het tabelgedeelte \"404 Event Logs\", hebben geen toegang tot uw site."
|
2775 |
+
|
2776 |
+
# @ all-in-one-wp-security-and-firewall
|
2777 |
+
#: admin/wp-security-firewall-menu.php:836
|
2778 |
+
msgid "Enable 404 Event Logging"
|
2779 |
+
msgstr "404 Logregistratie inschakelen"
|
2780 |
+
|
2781 |
+
# @ all-in-one-wp-security-and-firewall
|
2782 |
+
#: admin/wp-security-firewall-menu.php:839
|
2783 |
+
msgid "Check this if you want to enable the logging of 404 events"
|
2784 |
+
msgstr "Selecteer dit als u het loggen van 404-gebeurtenissen wilt inschakelen"
|
2785 |
+
|
2786 |
+
# @ all-in-one-wp-security-and-firewall
|
2787 |
+
#: admin/wp-security-firewall-menu.php:844
|
2788 |
+
msgid "Time Length of 404 Lockout (min)"
|
2789 |
+
msgstr "Tijdslengte van 404 Uitsluiting (min)"
|
2790 |
+
|
2791 |
+
# @ all-in-one-wp-security-and-firewall
|
2792 |
+
#: admin/wp-security-firewall-menu.php:846
|
2793 |
+
msgid "Set the length of time for which a blocked IP address will be prevented from visiting your site"
|
2794 |
+
msgstr "Stel in hoe lang het duurt voordat een geblokkeerd IP-adres uw site weer kan bezoeken"
|
2795 |
+
|
2796 |
+
# @ all-in-one-wp-security-and-firewall
|
2797 |
+
#: admin/wp-security-firewall-menu.php:851
|
2798 |
+
msgid "You can lock any IP address which is recorded in the \"404 Event Logs\" table section below."
|
2799 |
+
msgstr "U kunt elk IP-adres vergrendelen dat is vastgelegd in het onderstaande tabelgedeelte van de \"404 Event Logs\"."
|
2800 |
+
|
2801 |
+
# @ all-in-one-wp-security-and-firewall
|
2802 |
+
#: admin/wp-security-firewall-menu.php:853
|
2803 |
+
msgid "To temporarily lock an IP address, hover over the ID column and click the \"Temp Block\" link for the applicable IP entry."
|
2804 |
+
msgstr "Om tijdelijk een IP-adres te vergrendelen, plaatst u de muisaanwijzer op de kolom ID en klikt u op de koppeling \"Temp Block\" voor het toepasselijke IP-item."
|
2805 |
+
|
2806 |
+
# @ all-in-one-wp-security-and-firewall
|
2807 |
+
#: admin/wp-security-firewall-menu.php:860
|
2808 |
+
msgid "404 Lockout Redirect URL"
|
2809 |
+
msgstr "404 uitsluitingsverwijzings URL"
|
2810 |
+
|
2811 |
+
# @ all-in-one-wp-security-and-firewall
|
2812 |
+
#: admin/wp-security-firewall-menu.php:862
|
2813 |
+
msgid "A blocked visitor will be automatically redirected to this URL."
|
2814 |
+
msgstr "Een geblokkeerde bezoeker wordt automatisch doorgestuurd naar deze URL."
|
2815 |
+
|
2816 |
+
# @ all-in-one-wp-security-and-firewall
|
2817 |
+
#: admin/wp-security-firewall-menu.php:871
|
2818 |
+
msgid "404 Event Logs"
|
2819 |
+
msgstr "404 Gebeurtenislog"
|
2820 |
+
|
2821 |
+
# @ all-in-one-wp-security-and-firewall
|
2822 |
+
#: admin/wp-security-firewall-menu.php:892
|
2823 |
+
#: admin/wp-security-firewall-menu.php:901
|
2824 |
+
msgid "Delete All 404 Event Logs"
|
2825 |
+
msgstr "Verwijder alle 404 gebeurtenislogs"
|
2826 |
+
|
2827 |
+
# @ all-in-one-wp-security-and-firewall
|
2828 |
+
#: admin/wp-security-firewall-menu.php:898
|
2829 |
+
msgid "Click this button if you wish to purge all 404 event logs from the DB."
|
2830 |
+
msgstr "Klik op deze knop als u alle 404-gebeurtenislog uit de database wilt verwijderen."
|
2831 |
+
|
2832 |
+
# @ all-in-one-wp-security-and-firewall
|
2833 |
+
#: admin/wp-security-list-404.php:108
|
2834 |
+
#: admin/wp-security-list-acct-activity.php:79
|
2835 |
+
#: admin/wp-security-list-comment-spammer-ip.php:86
|
2836 |
+
#: admin/wp-security-list-locked-ip.php:82
|
2837 |
+
#: admin/wp-security-list-locked-ip.php:93
|
2838 |
+
#: admin/wp-security-list-login-fails.php:78
|
2839 |
+
#: admin/wp-security-list-registered-users.php:82
|
2840 |
+
#: admin/wp-security-list-registered-users.php:93
|
2841 |
+
msgid "Please select some records using the checkboxes"
|
2842 |
+
msgstr "Selecteer enkele records met behulp van de selectievakjes"
|
2843 |
+
|
2844 |
+
# @ all-in-one-wp-security-and-firewall
|
2845 |
+
#: admin/wp-security-list-acct-activity.php:107
|
2846 |
+
#: admin/wp-security-list-login-fails.php:107
|
2847 |
+
msgid "The selected entries were deleted successfully!"
|
2848 |
+
msgstr "De geselecteerde items zijn succesvol verwijderd!"
|
2849 |
+
|
2850 |
+
# @ all-in-one-wp-security-and-firewall
|
2851 |
+
#: admin/wp-security-list-acct-activity.php:120
|
2852 |
+
#: admin/wp-security-list-login-fails.php:119
|
2853 |
+
msgid "The selected entry was deleted successfully!"
|
2854 |
+
msgstr "Het geselecteerde item is succesvol verwijderd!"
|
2855 |
+
|
2856 |
+
# @ all-in-one-wp-security-and-firewall
|
2857 |
+
#: admin/wp-security-list-comment-spammer-ip.php:139
|
2858 |
+
msgid "The selected IP addresses were saved in the blacklist configuration settings."
|
2859 |
+
msgstr "De geselecteerde IP-adressen zijn opgeslagen in de configuratie-instellingen van de blacklist."
|
2860 |
+
|
2861 |
+
# @ all-in-one-wp-security-and-firewall
|
2862 |
+
#: admin/wp-security-list-comment-spammer-ip.php:153
|
2863 |
+
msgid "The .htaccess file was successfully modified to include the selected IP addresses."
|
2864 |
+
msgstr "Het .htaccess-bestand is met succes gewijzigd om de geselecteerde IP-adressen op te nemen."
|
2865 |
+
|
2866 |
+
# @ all-in-one-wp-security-and-firewall
|
2867 |
+
#: admin/wp-security-list-comment-spammer-ip.php:159
|
2868 |
+
msgid "NOTE: The .htaccess file was not modified because you have disabled the \"Enable IP or User Agent Blacklisting\" check box."
|
2869 |
+
msgstr "OPMERKING: het .htaccess-bestand is niet gewijzigd omdat u het selectievakje \"IP-adres of Gebruikersagent-zwarte lijst toestaan\" hebt uitgeschakeld."
|
2870 |
+
|
2871 |
+
# @ all-in-one-wp-security-and-firewall
|
2872 |
+
#: admin/wp-security-list-comment-spammer-ip.php:160
|
2873 |
+
#, php-format
|
2874 |
+
msgid "To block these IP addresses you will need to enable the above flag in the %s menu"
|
2875 |
+
msgstr "Om deze IP-adressen te blokkeren, moet u de bovenstaande markering in het %s-menu inschakelen"
|
2876 |
+
|
2877 |
+
# @ all-in-one-wp-security-and-firewall
|
2878 |
+
#: admin/wp-security-list-locked-ip.php:117
|
2879 |
+
#: admin/wp-security-user-login-menu.php:527
|
2880 |
+
msgid "The selected IP entries were unlocked successfully!"
|
2881 |
+
msgstr "De geselecteerde IP-vermeldingen zijn succesvol ontgrendeld!"
|
2882 |
+
|
2883 |
+
# @ all-in-one-wp-security-and-firewall
|
2884 |
+
#: admin/wp-security-list-locked-ip.php:126
|
2885 |
+
#: admin/wp-security-user-login-menu.php:536
|
2886 |
+
msgid "The selected IP entry was unlocked successfully!"
|
2887 |
+
msgstr "Het geselecteerde IP-item is succesvol ontgrendeld!"
|
2888 |
+
|
2889 |
+
# @ all-in-one-wp-security-and-firewall
|
2890 |
+
#: admin/wp-security-list-registered-users.php:127
|
2891 |
+
#: admin/wp-security-list-registered-users.php:151
|
2892 |
+
msgid "Your account is now active"
|
2893 |
+
msgstr "Uw account is nu actief"
|
2894 |
+
|
2895 |
+
# @ all-in-one-wp-security-and-firewall
|
2896 |
+
#: admin/wp-security-list-registered-users.php:128
|
2897 |
+
msgid "Your account with username:"
|
2898 |
+
msgstr "Uw account met gebruikersnaam:"
|
2899 |
+
|
2900 |
+
# @ all-in-one-wp-security-and-firewall
|
2901 |
+
#: admin/wp-security-list-registered-users.php:135
|
2902 |
+
msgid "The selected accounts were approved successfully!"
|
2903 |
+
msgstr "De geselecteerde accounts zijn succesvol goedgekeurd!"
|
2904 |
+
|
2905 |
+
# @ all-in-one-wp-security-and-firewall
|
2906 |
+
#: admin/wp-security-list-registered-users.php:139
|
2907 |
+
msgid "The following accounts failed to update successfully: "
|
2908 |
+
msgstr "De volgende accounts konden niet succesvol worden bijgewerkt: "
|
2909 |
+
|
2910 |
+
# @ all-in-one-wp-security-and-firewall
|
2911 |
+
#: admin/wp-security-list-registered-users.php:147
|
2912 |
+
msgid "The selected account was approved successfully!"
|
2913 |
+
msgstr "Het geselecteerde account is succesvol goedgekeurd!"
|
2914 |
+
|
2915 |
+
# @ all-in-one-wp-security-and-firewall
|
2916 |
+
#: admin/wp-security-list-registered-users.php:152
|
2917 |
+
msgid "Your account with username: "
|
2918 |
+
msgstr "Uw account met gebruikersnaam: "
|
2919 |
+
|
2920 |
+
# @ all-in-one-wp-security-and-firewall
|
2921 |
+
#: admin/wp-security-list-registered-users.php:176
|
2922 |
+
msgid "The selected accounts were deleted successfully!"
|
2923 |
+
msgstr "De geselecteerde accounts zijn succesvol verwijderd!"
|
2924 |
+
|
2925 |
+
# @ all-in-one-wp-security-and-firewall
|
2926 |
+
#: admin/wp-security-list-registered-users.php:184
|
2927 |
+
msgid "The selected account was deleted successfully!"
|
2928 |
+
msgstr "Het geselecteerde account is succesvol verwijderd!"
|
2929 |
+
|
2930 |
+
# @ all-in-one-wp-security-and-firewall
|
2931 |
+
#: admin/wp-security-maintenance-menu.php:22
|
2932 |
+
msgid "Visitor Lockout"
|
2933 |
+
msgstr "Blokkeren van bezoeker"
|
2934 |
+
|
2935 |
+
# @ all-in-one-wp-security-and-firewall
|
2936 |
+
#: admin/wp-security-maintenance-menu.php:88
|
2937 |
+
msgid "Site lockout feature settings saved!"
|
2938 |
+
msgstr "Site instellingen voor de blokkeringsfunctie zijn opgeslagen!"
|
2939 |
+
|
2940 |
+
# @ all-in-one-wp-security-and-firewall
|
2941 |
+
#: admin/wp-security-maintenance-menu.php:93
|
2942 |
+
msgid "General Visitor Lockout"
|
2943 |
+
msgstr "Algemene bezoekers uitsluiting"
|
2944 |
+
|
2945 |
+
# @ all-in-one-wp-security-and-firewall
|
2946 |
+
#: admin/wp-security-maintenance-menu.php:99
|
2947 |
+
msgid "This feature allows you to put your site into \"maintenance mode\" by locking down the front-end to all visitors except logged in users with super admin privileges."
|
2948 |
+
msgstr "Met deze functie kunt u uw site in de \"onderhoudsmodus\" plaatsen door de front-end te vergrendelen voor alle bezoekers behalve ingelogde gebruikers met superbeheerdersrechten."
|
2949 |
+
|
2950 |
+
# @ all-in-one-wp-security-and-firewall
|
2951 |
+
#: admin/wp-security-maintenance-menu.php:100
|
2952 |
+
msgid "Locking your site down to general visitors can be useful if you are investigating some issues on your site or perhaps you might be doing some maintenance and wish to keep out all traffic for security reasons."
|
2953 |
+
msgstr "Het vergrendelen van uw site voor algemene bezoekers kan handig zijn als u een aantal problemen op uw site onderzoekt of misschien onderhoudt en u om veiligheidsredenen al het verkeer buiten wilt houden."
|
2954 |
+
|
2955 |
+
# @ all-in-one-wp-security-and-firewall
|
2956 |
+
#: admin/wp-security-maintenance-menu.php:105
|
2957 |
+
msgid "Enable Front-end Lockout"
|
2958 |
+
msgstr "Front-end blokkering inschakelen"
|
2959 |
+
|
2960 |
+
# @ all-in-one-wp-security-and-firewall
|
2961 |
+
#: admin/wp-security-maintenance-menu.php:108
|
2962 |
+
msgid "Check this if you want all visitors except those who are logged in as administrator to be locked out of the front-end of your site."
|
2963 |
+
msgstr "Vink dit aan als u wilt dat alle bezoekers, behalve degenen die zijn aangemeld als beheerder, worden uitgesloten van de front-end van uw site."
|
2964 |
+
|
2965 |
+
# @ all-in-one-wp-security-and-firewall
|
2966 |
+
#: admin/wp-security-maintenance-menu.php:112
|
2967 |
+
msgid "Enter a Message:"
|
2968 |
+
msgstr "Voer een bericht in:"
|
2969 |
+
|
2970 |
+
# @ all-in-one-wp-security-and-firewall
|
2971 |
+
#: admin/wp-security-maintenance-menu.php:124
|
2972 |
+
msgid "Enter a message you wish to display to visitors when your site is in maintenance mode."
|
2973 |
+
msgstr "Voer een bericht in dat u wilt weergeven aan bezoekers wanneer uw site in onderhoudsmodus is."
|
2974 |
+
|
2975 |
+
# @ default
|
2976 |
+
#: admin/wp-security-maintenance-menu.php:131
|
2977 |
+
msgid "Save Site Lockout Settings"
|
2978 |
+
msgstr "Instellingen voor siteblokkering opslaan"
|
2979 |
+
|
2980 |
+
# @ all-in-one-wp-security-and-firewall
|
2981 |
+
#: admin/wp-security-settings-menu.php:25
|
2982 |
+
msgid "General Settings"
|
2983 |
+
msgstr "Algemene instellingen"
|
2984 |
+
|
2985 |
+
# @ all-in-one-wp-security-and-firewall
|
2986 |
+
#: admin/wp-security-settings-menu.php:28
|
2987 |
+
msgid "WP Meta Info"
|
2988 |
+
msgstr "WP Meta informatie"
|
2989 |
+
|
2990 |
+
# @ all-in-one-wp-security-and-firewall
|
2991 |
+
#: admin/wp-security-settings-menu.php:95
|
2992 |
+
msgid "All the security features have been disabled successfully!"
|
2993 |
+
msgstr "Alle beveiligingsfuncties zijn met succes uitgeschakeld!"
|
2994 |
+
|
2995 |
+
# @ all-in-one-wp-security-and-firewall
|
2996 |
+
#: admin/wp-security-settings-menu.php:99
|
2997 |
+
#: admin/wp-security-settings-menu.php:126
|
2998 |
+
msgid "Could not write to the .htaccess file. Please restore your .htaccess file manually using the restore functionality in the \".htaccess File\"."
|
2999 |
+
msgstr "Kon het .htaccess-bestand niet schrijven. Herstel uw .htaccess-file handmatig met behulp van de herstelfunctionaliteit in de \".htaccess-file\"."
|
3000 |
+
|
3001 |
+
# @ all-in-one-wp-security-and-firewall
|
3002 |
+
#: admin/wp-security-settings-menu.php:104
|
3003 |
+
msgid "Could not write to the wp-config.php. Please restore your wp-config.php file manually using the restore functionality in the \"wp-config.php File\"."
|
3004 |
+
msgstr "Kon niet naar de wp-config.php schrijven. Herstel uw wp-config.php-file handmatig met behulp van de herstelfunctionaliteit in de \"wp-config.php-file\"."
|
3005 |
+
|
3006 |
+
# @ all-in-one-wp-security-and-firewall
|
3007 |
+
#: admin/wp-security-settings-menu.php:122
|
3008 |
+
msgid "All firewall rules have been disabled successfully!"
|
3009 |
+
msgstr "Alle firewallregels zijn succesvol uitgeschakeld!"
|
3010 |
+
|
3011 |
+
# @ all-in-one-wp-security-and-firewall
|
3012 |
+
#: admin/wp-security-settings-menu.php:136
|
3013 |
+
msgid "WP Security Plugin"
|
3014 |
+
msgstr "WP-beveiligings plugin"
|
3015 |
+
|
3016 |
+
# @ all-in-one-wp-security-and-firewall
|
3017 |
+
#: admin/wp-security-settings-menu.php:138
|
3018 |
+
msgid "Thank you for using our WordPress security plugin. There are a lot of security features in this plugin."
|
3019 |
+
msgstr "Bedankt voor het gebruik van onze WordPress-beveiligings plugin. Er zijn veel beveiligingsfuncties in deze plugin."
|
3020 |
+
|
3021 |
+
# @ all-in-one-wp-security-and-firewall
|
3022 |
+
#: admin/wp-security-settings-menu.php:139
|
3023 |
+
msgid "Go through each menu items and enable the security options to add more security to your site. Start by activating the basic features first."
|
3024 |
+
msgstr "Doorloop alle menu-items en schakel de beveiligingsopties in om meer beveiliging aan uw site toe te voegen. Begin door eerst de basisfuncties te activeren."
|
3025 |
+
|
3026 |
+
# @ all-in-one-wp-security-and-firewall
|
3027 |
+
#: admin/wp-security-settings-menu.php:140
|
3028 |
+
msgid "It is a good practice to take a backup of your .htaccess file, database and wp-config.php file before activating the security features. This plugin has options that you can use to backup those resources easily."
|
3029 |
+
msgstr "Het is een goede gewoonte om een back-up te maken van uw .htaccess-bestand, database en wp-config.php-bestand voordat u de beveiligingsfuncties activeert. Deze plug-in heeft opties die u kunt gebruiken om gemakkelijk een back-up van die bronnen te maken."
|
3030 |
+
|
3031 |
+
# @ all-in-one-wp-security-and-firewall
|
3032 |
+
#: admin/wp-security-settings-menu.php:143
|
3033 |
+
msgid "Backup your database"
|
3034 |
+
msgstr "Maak een backup van je database"
|
3035 |
+
|
3036 |
+
# @ all-in-one-wp-security-and-firewall
|
3037 |
+
#: admin/wp-security-settings-menu.php:144
|
3038 |
+
msgid "Backup .htaccess file"
|
3039 |
+
msgstr "Back-up .htaccess file"
|
3040 |
+
|
3041 |
+
# @ all-in-one-wp-security-and-firewall
|
3042 |
+
#: admin/wp-security-settings-menu.php:145
|
3043 |
+
msgid "Backup wp-config.php file"
|
3044 |
+
msgstr "Back-up wp-config.php file"
|
3045 |
+
|
3046 |
+
# @ all-in-one-wp-security-and-firewall
|
3047 |
+
#: admin/wp-security-settings-menu.php:151
|
3048 |
+
msgid "Disable Security Features"
|
3049 |
+
msgstr "Beveiligingsfuncties uitschakelen"
|
3050 |
+
|
3051 |
+
# @ all-in-one-wp-security-and-firewall
|
3052 |
+
#: admin/wp-security-settings-menu.php:157
|
3053 |
+
msgid "If you think that some plugin functionality on your site is broken due to a security feature you enabled in this plugin, then use the following option to turn off all the security features of this plugin."
|
3054 |
+
msgstr "Als u denkt dat sommige plug-infunctionaliteiten op uw site zijn verbroken vanwege een beveiligingsfunctie die u in deze plug-in hebt ingeschakeld, gebruikt u dan de volgende optie om alle beveiligingsfuncties van deze plug-in uit te schakelen."
|
3055 |
+
|
3056 |
+
# @ default
|
3057 |
+
#: admin/wp-security-settings-menu.php:161
|
3058 |
+
msgid "Disable All Security Features"
|
3059 |
+
msgstr "Schakel alle beveiligingsfuncties uit"
|
3060 |
+
|
3061 |
+
# @ all-in-one-wp-security-and-firewall
|
3062 |
+
# @ default
|
3063 |
+
#: admin/wp-security-settings-menu.php:167
|
3064 |
+
#: admin/wp-security-settings-menu.php:177
|
3065 |
+
msgid "Disable All Firewall Rules"
|
3066 |
+
msgstr "Schakel alle firewallregels uit"
|
3067 |
+
|
3068 |
+
# @ all-in-one-wp-security-and-firewall
|
3069 |
+
#: admin/wp-security-settings-menu.php:173
|
3070 |
+
msgid "This feature will disable all firewall rules which are currently active in this plugin and it will also delete these rules from your .htacess file. Use it if you think one of the firewall rules is causing an issue on your site."
|
3071 |
+
msgstr "Met deze functie worden alle firewallregels uitgeschakeld die momenteel actief zijn in deze plug-in en deze regels worden ook verwijderd uit uw htacess-file. Gebruik het als u denkt dat een van de firewallregels een probleem op uw site veroorzaakt."
|
3072 |
+
|
3073 |
+
# @ all-in-one-wp-security-and-firewall
|
3074 |
+
#: admin/wp-security-settings-menu.php:206
|
3075 |
+
msgid "Your .htaccess file was successfully backed up! Using an FTP program go to the \"/wp-content/aiowps_backups\" directory to save a copy of the file to your computer."
|
3076 |
+
msgstr "Er is een back-up van uw .htaccess-bestand gemaakt! Ga met behulp van een FTP-programma naar de map \"/ wp-content / aiowps_backups\" om een kopie van het bestand op uw computer op te slaan."
|
3077 |
+
|
3078 |
+
# @ all-in-one-wp-security-and-firewall
|
3079 |
+
#: admin/wp-security-settings-menu.php:212
|
3080 |
+
msgid "htaccess file rename failed during backup. Please check your root directory for the backup file using FTP."
|
3081 |
+
msgstr "Het hernoemen van de htaccess-file is mislukt tijdens de back-up. Controleer de hoofdmap voor het back-upbestand met behulp van FTP."
|
3082 |
+
|
3083 |
+
# @ all-in-one-wp-security-and-firewall
|
3084 |
+
#: admin/wp-security-settings-menu.php:218
|
3085 |
+
msgid "htaccess backup failed."
|
3086 |
+
msgstr "htaccess backup mislukt."
|
3087 |
+
|
3088 |
+
# @ all-in-one-wp-security-and-firewall
|
3089 |
+
#: admin/wp-security-settings-menu.php:233
|
3090 |
+
msgid "Please choose a .htaccess to restore from."
|
3091 |
+
msgstr "Kies alstublieft een .htaccess-file om uit te herstellen."
|
3092 |
+
|
3093 |
+
# @ all-in-one-wp-security-and-firewall
|
3094 |
+
#: admin/wp-security-settings-menu.php:249
|
3095 |
+
msgid "htaccess file restore failed. Please attempt to restore the .htaccess manually using FTP."
|
3096 |
+
msgstr "Het herstellen van de htaccess-file mislukt. Probeer de .htaccess-file handmatig te herstellen met behulp van FTP."
|
3097 |
+
|
3098 |
+
# @ all-in-one-wp-security-and-firewall
|
3099 |
+
#: admin/wp-security-settings-menu.php:253
|
3100 |
+
msgid "Your .htaccess file has successfully been restored!"
|
3101 |
+
msgstr "Uw .htaccess-file is succesvol hersteld!"
|
3102 |
+
|
3103 |
+
# @ all-in-one-wp-security-and-firewall
|
3104 |
+
#: admin/wp-security-settings-menu.php:259
|
3105 |
+
msgid "htaccess Restore operation failed! Please check the contents of the file you are trying to restore from."
|
3106 |
+
msgstr "De htaccess-file herstelbewerking mislukt! Controleer de inhoud van het bestand dat u probeert te herstellen."
|
3107 |
+
|
3108 |
+
# @ all-in-one-wp-security-and-firewall
|
3109 |
+
#: admin/wp-security-settings-menu.php:265
|
3110 |
+
msgid ".htaccess File Operations"
|
3111 |
+
msgstr ".htaccess-file bewerkingen"
|
3112 |
+
|
3113 |
+
# @ all-in-one-wp-security-and-firewall
|
3114 |
+
#: admin/wp-security-settings-menu.php:268
|
3115 |
+
msgid "Your \".htaccess\" file is a key component of your website's security and it can be modified to implement various levels of protection mechanisms."
|
3116 |
+
msgstr "Uw \".htaccess-file\" is een belangrijk onderdeel van de beveiliging van uw website en het kan worden gewijzigd om verschillende niveaus van beveiligingsmechanismen te implementeren."
|
3117 |
+
|
3118 |
+
# @ all-in-one-wp-security-and-firewall
|
3119 |
+
#: admin/wp-security-settings-menu.php:269
|
3120 |
+
msgid "This feature allows you to backup and save your currently active .htaccess file should you need to re-use the the backed up file in the future."
|
3121 |
+
msgstr "Met deze functie kunt u een back-up maken en uw momenteel actieve .htaccess-file opslaan als u het back-upbestand in de toekomst opnieuw moet gebruiken."
|
3122 |
+
|
3123 |
+
# @ all-in-one-wp-security-and-firewall
|
3124 |
+
#: admin/wp-security-settings-menu.php:270
|
3125 |
+
msgid "You can also restore your site's .htaccess settings using a backed up .htaccess file."
|
3126 |
+
msgstr "U kunt ook de .htaccess-instellingen van uw site herstellen met behulp van een .htaccess-bestand waarvan een back-up is gemaakt."
|
3127 |
+
|
3128 |
+
# @ all-in-one-wp-security-and-firewall
|
3129 |
+
#: admin/wp-security-settings-menu.php:284
|
3130 |
+
msgid "Save the current .htaccess file"
|
3131 |
+
msgstr "Sla de huidige .htaccess-file op"
|
3132 |
+
|
3133 |
+
# @ all-in-one-wp-security-and-firewall
|
3134 |
+
#: admin/wp-security-settings-menu.php:288
|
3135 |
+
msgid "Click the button below to backup and save the currently active .htaccess file."
|
3136 |
+
msgstr "Klik op de onderstaande knop om een back-up te maken van de momenteel actieve .htaccess-file en deze op te slaan."
|
3137 |
+
|
3138 |
+
# @ all-in-one-wp-security-and-firewall
|
3139 |
+
#: admin/wp-security-settings-menu.php:289
|
3140 |
+
msgid "Backup .htaccess File"
|
3141 |
+
msgstr "Back-up .htaccess-file"
|
3142 |
+
|
3143 |
+
# @ all-in-one-wp-security-and-firewall
|
3144 |
+
#: admin/wp-security-settings-menu.php:293
|
3145 |
+
msgid "Restore from a backed up .htaccess file"
|
3146 |
+
msgstr "Herstellen vanuit een back-up van een .htaccess-flie"
|
3147 |
+
|
3148 |
+
# @ all-in-one-wp-security-and-firewall
|
3149 |
+
#: admin/wp-security-settings-menu.php:299
|
3150 |
+
msgid ".htaccess file to restore from"
|
3151 |
+
msgstr ".htaccess-file om vanuit te herstellen"
|
3152 |
+
|
3153 |
+
# @ all-in-one-wp-security-and-firewall
|
3154 |
+
#: admin/wp-security-settings-menu.php:305
|
3155 |
+
msgid "After selecting your file, click the button below to restore your site using the backed up htaccess file (htaccess_backup.txt)."
|
3156 |
+
msgstr "Na het selecteren van uw bestand, klikt u op de onderstaande knop om uw site te herstellen met behulp van het back-up htaccess-file (htaccess_backup.txt)."
|
3157 |
+
|
3158 |
+
# @ all-in-one-wp-security-and-firewall
|
3159 |
+
#: admin/wp-security-settings-menu.php:311
|
3160 |
+
msgid "Restore .htaccess File"
|
3161 |
+
msgstr "Terugplaatsen .htaccess-file"
|
3162 |
+
|
3163 |
+
# @ all-in-one-wp-security-and-firewall
|
3164 |
+
#: admin/wp-security-settings-menu.php:315
|
3165 |
+
msgid "View Contents of the currently active .htaccess file"
|
3166 |
+
msgstr "Bekijk de inhoud van de momenteel actieve .htaccess-file"
|
3167 |
+
|
3168 |
+
# @ all-in-one-wp-security-and-firewall
|
3169 |
+
#: admin/wp-security-settings-menu.php:344
|
3170 |
+
msgid "Please choose a wp-config.php file to restore from."
|
3171 |
+
msgstr "Kies een wp-config.php file om van te herstellen."
|
3172 |
+
|
3173 |
+
# @ all-in-one-wp-security-and-firewall
|
3174 |
+
#: admin/wp-security-settings-menu.php:360
|
3175 |
+
msgid "wp-config.php file restore failed. Please attempt to restore this file manually using FTP."
|
3176 |
+
msgstr "Het herstellen van de wp-config.php file is mislukt. Probeer dit bestand handmatig te herstellen met behulp van FTP."
|
3177 |
+
|
3178 |
+
# @ all-in-one-wp-security-and-firewall
|
3179 |
+
#: admin/wp-security-settings-menu.php:364
|
3180 |
+
msgid "Your wp-config.php file has successfully been restored!"
|
3181 |
+
msgstr "Uw wp-config.php file is succesvol hersteld!"
|
3182 |
+
|
3183 |
+
# @ all-in-one-wp-security-and-firewall
|
3184 |
+
#: admin/wp-security-settings-menu.php:370
|
3185 |
+
msgid "wp-config.php Restore operation failed! Please check the contents of the file you are trying to restore from."
|
3186 |
+
msgstr "De wp-config.php-file herstelbewerking is mislukt! Controleer de inhoud van de file die u probeert te herstellen."
|
3187 |
+
|
3188 |
+
# @ all-in-one-wp-security-and-firewall
|
3189 |
+
#: admin/wp-security-settings-menu.php:376
|
3190 |
+
msgid "wp-config.php File Operations"
|
3191 |
+
msgstr "wp-config.php file bewerkingen"
|
3192 |
+
|
3193 |
+
# @ all-in-one-wp-security-and-firewall
|
3194 |
+
#: admin/wp-security-settings-menu.php:379
|
3195 |
+
msgid "Your \"wp-config.php\" file is one of the most important in your WordPress installation. It is a primary configuration file and contains crucial things such as details of your database and other critical components."
|
3196 |
+
msgstr "Uw \"wp-config.php-file\" is een van de belangrijkste in uw WordPress-installatie. Het is een primair configuratiebestand en bevat cruciale dingen zoals details van uw database en andere kritieke componenten."
|
3197 |
+
|
3198 |
+
# @ all-in-one-wp-security-and-firewall
|
3199 |
+
#: admin/wp-security-settings-menu.php:380
|
3200 |
+
msgid "This feature allows you to backup and save your currently active wp-config.php file should you need to re-use the the backed up file in the future."
|
3201 |
+
msgstr "Met deze functie kunt u een back-up maken van uw momenteel actieve wp-config.php-file en deze opslaan als u de back-up file in de toekomst opnieuw moet gebruiken."
|
3202 |
+
|
3203 |
+
# @ all-in-one-wp-security-and-firewall
|
3204 |
+
#: admin/wp-security-settings-menu.php:381
|
3205 |
+
msgid "You can also restore your site's wp-config.php settings using a backed up wp-config.php file."
|
3206 |
+
msgstr "U kunt ook de wp-config.php instellingen van uw site herstellen met een back-up van een wp-config.php-file."
|
3207 |
+
|
3208 |
+
# @ all-in-one-wp-security-and-firewall
|
3209 |
+
#: admin/wp-security-settings-menu.php:395
|
3210 |
+
msgid "Save the current wp-config.php file"
|
3211 |
+
msgstr "Sla de huidige wp-config.php-file op"
|
3212 |
+
|
3213 |
+
# @ all-in-one-wp-security-and-firewall
|
3214 |
+
#: admin/wp-security-settings-menu.php:399
|
3215 |
+
msgid "Click the button below to backup and download the contents of the currently active wp-config.php file."
|
3216 |
+
msgstr "Klik op de onderstaande knop om de inhoud van de momenteel actieve wp-config.php-file te back-uppen en te downloaden."
|
3217 |
+
|
3218 |
+
# @ all-in-one-wp-security-and-firewall
|
3219 |
+
#: admin/wp-security-settings-menu.php:400
|
3220 |
+
msgid "Backup wp-config.php File"
|
3221 |
+
msgstr "Back-up wp-config.php-file"
|
3222 |
+
|
3223 |
+
# @ all-in-one-wp-security-and-firewall
|
3224 |
+
#: admin/wp-security-settings-menu.php:405
|
3225 |
+
msgid "Restore from a backed up wp-config file"
|
3226 |
+
msgstr "Herstellen vanuit een back-up van een wp-config-file"
|
3227 |
+
|
3228 |
+
# @ all-in-one-wp-security-and-firewall
|
3229 |
+
#: admin/wp-security-settings-menu.php:411
|
3230 |
+
msgid "wp-config file to restore from"
|
3231 |
+
msgstr "wp-config-file om vanuit te herstellen"
|
3232 |
+
|
3233 |
+
# @ all-in-one-wp-security-and-firewall
|
3234 |
+
#: admin/wp-security-settings-menu.php:417
|
3235 |
+
msgid "After selecting your file click the button below to restore your site using the backed up wp-config file (wp-config.php.backup.txt)."
|
3236 |
+
msgstr "Nadat u uw bestand hebt geselecteerd, klikt u op de onderstaande knop om uw site te herstellen met behulp van het back-upbestand wp-config (wp-config.php.backup.txt)."
|
3237 |
+
|
3238 |
+
# @ all-in-one-wp-security-and-firewall
|
3239 |
+
#: admin/wp-security-settings-menu.php:423
|
3240 |
+
msgid "Restore wp-config File"
|
3241 |
+
msgstr "Terug plaatsen wp-config-file"
|
3242 |
+
|
3243 |
+
# @ all-in-one-wp-security-and-firewall
|
3244 |
+
#: admin/wp-security-settings-menu.php:427
|
3245 |
+
msgid "View Contents of the currently active wp-config.php file"
|
3246 |
+
msgstr "Bekijk de inhoud van de momenteel actieve wp-config.php-file"
|
3247 |
+
|
3248 |
+
# @ all-in-one-wp-security-and-firewall
|
3249 |
+
#: admin/wp-security-settings-menu.php:462
|
3250 |
+
msgid "WP Generator Meta Tag"
|
3251 |
+
msgstr "WP-generator meta tag"
|
3252 |
+
|
3253 |
+
# @ all-in-one-wp-security-and-firewall
|
3254 |
+
#: admin/wp-security-settings-menu.php:465
|
3255 |
+
msgid "Wordpress generator automatically adds some meta information inside the \"head\" tags of every page on your site's front end. Below is an example of this:"
|
3256 |
+
msgstr "WordPress-generator voegt automatisch wat meta-informatie toe aan de front-tags van elke pagina op de voorkant van uw site. Hieronder is een voorbeeld hiervan:"
|
3257 |
+
|
3258 |
+
# @ all-in-one-wp-security-and-firewall
|
3259 |
+
#: admin/wp-security-settings-menu.php:467
|
3260 |
+
msgid "The above meta information shows which version of WordPress your site is currently running and thus can help hackers or crawlers scan your site to see if you have an older version of WordPress or one with a known exploit."
|
3261 |
+
msgstr "De bovenstaande meta-informatie laat zien welke versie van WordPress uw site momenteel gebruikt en kan zo helpen bij het door hackers of crawlers scannen van uw site om te zien of u een oudere versie van WordPress heeft of een versie met een bekende aftap mogelijkheid."
|
3262 |
+
|
3263 |
+
# @ all-in-one-wp-security-and-firewall
|
3264 |
+
#: admin/wp-security-settings-menu.php:468
|
3265 |
+
msgid "This feature will allow you to remove the WP generator meta info from your site's pages."
|
3266 |
+
msgstr "Met deze functie kunt u de meta-info van de WP-generator verwijderen van de pagina's van uw site."
|
3267 |
+
|
3268 |
+
# @ all-in-one-wp-security-and-firewall
|
3269 |
+
#: admin/wp-security-settings-menu.php:474
|
3270 |
+
msgid "WP Generator Meta Info"
|
3271 |
+
msgstr "WP Generator Meta Info"
|
3272 |
+
|
3273 |
+
# @ all-in-one-wp-security-and-firewall
|
3274 |
+
#: admin/wp-security-settings-menu.php:486
|
3275 |
+
msgid "Remove WP Generator Meta Info"
|
3276 |
+
msgstr "WP Generator Meta Info verwijderen"
|
3277 |
+
|
3278 |
+
# @ all-in-one-wp-security-and-firewall
|
3279 |
+
#: admin/wp-security-settings-menu.php:489
|
3280 |
+
msgid "Check this if you want to remove the meta info produced by WP Generator from all pages"
|
3281 |
+
msgstr "Selecteer dit als u de meta-info die geproduceerd is door de WP Generator van alle pagina's wilt verwijderen"
|
3282 |
+
|
3283 |
+
# @ all-in-one-wp-security-and-firewall
|
3284 |
+
#: admin/wp-security-spam-menu.php:23
|
3285 |
+
msgid "Comment SPAM"
|
3286 |
+
msgstr "Kritieke SPAM"
|
3287 |
+
|
3288 |
+
# @ all-in-one-wp-security-and-firewall
|
3289 |
+
#: admin/wp-security-spam-menu.php:24
|
3290 |
+
msgid "Comment SPAM IP Monitoring"
|
3291 |
+
msgstr "Kritieke SPAM IP bewaking"
|
3292 |
+
|
3293 |
+
# @ all-in-one-wp-security-and-firewall
|
3294 |
+
#: admin/wp-security-spam-menu.php:111
|
3295 |
+
msgid "Comment SPAM Settings"
|
3296 |
+
msgstr "Kritieke SPAM-instellingen"
|
3297 |
+
|
3298 |
+
# @ all-in-one-wp-security-and-firewall
|
3299 |
+
#: admin/wp-security-spam-menu.php:116
|
3300 |
+
msgid "Add Captcha To Comments Form"
|
3301 |
+
msgstr "Captcha aan opmerkingenformulier toevoegen"
|
3302 |
+
|
3303 |
+
# @ all-in-one-wp-security-and-firewall
|
3304 |
+
#: admin/wp-security-spam-menu.php:120
|
3305 |
+
msgid "This feature will add a simple math captcha field in the WordPress comments form."
|
3306 |
+
msgstr "Met deze functie wordt een eenvoudig wiskundig captcha-veld toegevoegd aan het opmerkingenformulier van WordPress."
|
3307 |
+
|
3308 |
+
# @ all-in-one-wp-security-and-firewall
|
3309 |
+
#: admin/wp-security-spam-menu.php:121
|
3310 |
+
msgid "Adding a captcha field in the comment form is a simple way of greatly reducing SPAM comments from bots without using .htaccess rules."
|
3311 |
+
msgstr "Het toevoegen van een captcha-veld in het commentaarformulier is een eenvoudige manier om SPAM-opmerkingen van bots te verminderen zonder de .htaccess-regels te gebruiken."
|
3312 |
+
|
3313 |
+
# @ all-in-one-wp-security-and-firewall
|
3314 |
+
#: admin/wp-security-spam-menu.php:137
|
3315 |
+
msgid "Enable Captcha On Comment Forms"
|
3316 |
+
msgstr "Schakel Captcha in op het opmerkingenformulier"
|
3317 |
+
|
3318 |
+
# @ all-in-one-wp-security-and-firewall
|
3319 |
+
#: admin/wp-security-spam-menu.php:140
|
3320 |
+
msgid "Check this if you want to insert a captcha field on the comment forms"
|
3321 |
+
msgstr "Selecteer dit als u een captcha-veld wilt invoegen op het opmerkingenformulieren"
|
3322 |
+
|
3323 |
+
# @ all-in-one-wp-security-and-firewall
|
3324 |
+
#: admin/wp-security-spam-menu.php:148
|
3325 |
+
msgid "Block Spambot Comments"
|
3326 |
+
msgstr "Spambot-opmerkingen blokkeren"
|
3327 |
+
|
3328 |
+
# @ all-in-one-wp-security-and-firewall
|
3329 |
+
#: admin/wp-security-spam-menu.php:152
|
3330 |
+
msgid "A large portion of WordPress blog comment SPAM is mainly produced by automated bots and not necessarily by humans. "
|
3331 |
+
msgstr "Een groot deel van WordPress blog commentaar SPAM wordt voornamelijk geproduceerd door geautomatiseerde bots en niet noodzakelijk door mensen. "
|
3332 |
+
|
3333 |
+
# @ all-in-one-wp-security-and-firewall
|
3334 |
+
#: admin/wp-security-spam-menu.php:153
|
3335 |
+
msgid "This feature will greatly minimize the useless and unecessary traffic and load on your server resulting from SPAM comments by blocking all comment requests which do not originate from your domain."
|
3336 |
+
msgstr "Deze functie minimaliseert het nutteloze en onnodige verkeer en de belasting van uw server ten gevolge van SPAM-opmerkingen door alle reactieaanvragen te blokkeren die niet afkomstig zijn uit uw domein."
|
3337 |
+
|
3338 |
+
# @ all-in-one-wp-security-and-firewall
|
3339 |
+
#: admin/wp-security-spam-menu.php:154
|
3340 |
+
msgid "In other words, if the comment was not submitted by a human who physically submitted the comment on your site, the request will be blocked."
|
3341 |
+
msgstr "Met andere woorden, als de opmerking niet is ingediend door een persoon die de opmerking fysiek op uw site heeft geplaatst, wordt de aanvraag geblokkeerd."
|
3342 |
+
|
3343 |
+
# @ all-in-one-wp-security-and-firewall
|
3344 |
+
#: admin/wp-security-spam-menu.php:170
|
3345 |
+
msgid "Block Spambots From Posting Comments"
|
3346 |
+
msgstr "Spambots blokkeren uit geplaatste opmerkingen"
|
3347 |
+
|
3348 |
+
# @ all-in-one-wp-security-and-firewall
|
3349 |
+
#: admin/wp-security-spam-menu.php:173
|
3350 |
+
msgid "Check this if you want to apply a firewall rule which will block comments originating from spambots."
|
3351 |
+
msgstr "Selecteer dit als u een firewallregel wilt toepassen die opmerkingen afkomstig van spambots blokkeert."
|
3352 |
+
|
3353 |
+
# @ all-in-one-wp-security-and-firewall
|
3354 |
+
#: admin/wp-security-spam-menu.php:177
|
3355 |
+
msgid "This feature will implement a firewall rule to block all comment attempts which do not originate from your domain."
|
3356 |
+
msgstr "Met deze functie wordt een firewallregel geïmplementeerd om alle opmerkingen te blokkeren die niet afkomstig zijn uit uw domein."
|
3357 |
+
|
3358 |
+
# @ all-in-one-wp-security-and-firewall
|
3359 |
+
#: admin/wp-security-spam-menu.php:178
|
3360 |
+
msgid "A legitimate comment is one which is submitted by a human who physically fills out the comment form and clicks the submit button. For such events, the HTTP_REFERRER is always set to your own domain."
|
3361 |
+
msgstr "Een legitieme opmerking is een opmerking die wordt ingediend door een persoon die het opmerkingenformulier fysiek invult en op de knop Verzenden klikt. Voor dergelijke gebeurtenissen is de HTTP_REFERRER altijd ingesteld op uw eigen domein."
|
3362 |
+
|
3363 |
+
# @ all-in-one-wp-security-and-firewall
|
3364 |
+
#: admin/wp-security-spam-menu.php:179
|
3365 |
+
msgid "A comment submitted by a spambot is done by directly calling the comments.php file, which usually means that the HTTP_REFERRER value is not your domain and often times empty."
|
3366 |
+
msgstr "Een opmerking die door een spambot wordt ingediend, wordt gedaan door rechtstreeks het bestand comments.php op te roepen. Dit betekent meestal dat de waarde HTTP_REFERRER niet uw domein is en meestal leeg is."
|
3367 |
+
|
3368 |
+
# @ all-in-one-wp-security-and-firewall
|
3369 |
+
#: admin/wp-security-spam-menu.php:180
|
3370 |
+
msgid "This feature will check and block comment requests which are not referred by your domain thus greatly reducing your overall blog SPAM and PHP requests done by the server to process these comments."
|
3371 |
+
msgstr "Met deze functie worden opmerkingen gecontroleerd en geblokkeerd die niet door uw domein worden doorgestuurd, waardoor uw algehele blog-SPAM- en PHP-verzoeken van de server om deze opmerkingen te verwerken aanzienlijk worden verminderd."
|
3372 |
+
|
3373 |
+
# @ all-in-one-wp-security-and-firewall
|
3374 |
+
#: admin/wp-security-spam-menu.php:207
|
3375 |
+
msgid "Nonce check failed for list SPAM comment IPs!"
|
3376 |
+
msgstr "Nonce check mislukt voor de lijst SPAM opmerkingen van IP's!"
|
3377 |
+
|
3378 |
+
# @ all-in-one-wp-security-and-firewall
|
3379 |
+
#: admin/wp-security-spam-menu.php:213
|
3380 |
+
msgid "You entered a non numeric value for the minimum SPAM comments per IP field. It has been set to the default value."
|
3381 |
+
msgstr "U hebt een niet-numerieke waarde ingevoerd voor de minimale SPAM-opmerkingen per IP-veld. Het is ingesteld op de standaardwaarde."
|
3382 |
+
|
3383 |
+
# @ all-in-one-wp-security-and-firewall
|
3384 |
+
#: admin/wp-security-spam-menu.php:225
|
3385 |
+
#, php-format
|
3386 |
+
msgid "Displaying results for IP addresses which have posted a minimum of %s SPAM comments"
|
3387 |
+
msgstr "Resultaten weergeven voor IP-adressen die een minimum van %s SPAM-opmerkingen hebben gepost"
|
3388 |
+
|
3389 |
+
# @ all-in-one-wp-security-and-firewall
|
3390 |
+
#: admin/wp-security-spam-menu.php:241
|
3391 |
+
msgid "This tab displays a list of the IP addresses of the people or bots who have left SPAM comments on your site."
|
3392 |
+
msgstr "Op dit tabblad wordt een lijst weergegeven met de IP-adressen van de mensen of bots die SPAM-opmerkingen op uw site hebben achtergelaten."
|
3393 |
+
|
3394 |
+
# @ all-in-one-wp-security-and-firewall
|
3395 |
+
#: admin/wp-security-spam-menu.php:242
|
3396 |
+
msgid "This information can be handy for identifying the most persistent IP addresses or ranges used by spammers."
|
3397 |
+
msgstr "Deze informatie kan handig zijn voor het identificeren van de meest hardnekkige IP-adressen of bereiken die worden gebruikt door spammers."
|
3398 |
+
|
3399 |
+
# @ all-in-one-wp-security-and-firewall
|
3400 |
+
#: admin/wp-security-spam-menu.php:243
|
3401 |
+
msgid "By inspecting the IP address data coming from spammers you will be in a better position to determine which addresses or address ranges you should block by adding them to your blacklist."
|
3402 |
+
msgstr "Door de IP-adresgegevens te controleren die afkomstig zijn van spammers, bent u beter in staat om te bepalen welke adressen of adresreeksen u moet blokkeren door ze toe te voegen aan uw blacklist."
|
3403 |
+
|
3404 |
+
# @ all-in-one-wp-security-and-firewall
|
3405 |
+
#: admin/wp-security-spam-menu.php:244
|
3406 |
+
msgid ""
|
3407 |
+
"To add one or more of the IP addresses displayed in the table below to your blacklist, simply click the \"Block\" link for the individual row or select more than one address \n"
|
3408 |
+
" using the checkboxes and then choose the \"block\" option from the Bulk Actions dropdown list and click the \"Apply\" button."
|
3409 |
+
msgstr ""
|
3410 |
+
"Om een of meer van de IP-adressen die in de onderstaande tabel worden weergegeven toe te voegen aan uw zwarte lijst, klikt u eenvoudig op de koppeling \"Blokkeren\" voor de afzonderlijke rij of selecteert u meer dan één adres\n"
|
3411 |
+
" gebruik de selectievakjes en kies vervolgens de optie \"blokkeren\" in de vervolgkeuzelijst Bulkacties en klik op de knop \"Toepassen\"."
|
3412 |
+
|
3413 |
+
# @ all-in-one-wp-security-and-firewall
|
3414 |
+
#: admin/wp-security-spam-menu.php:250
|
3415 |
+
msgid "List SPAMMER IP Addresses"
|
3416 |
+
msgstr "Lijst SPAMMER IP-adressen"
|
3417 |
+
|
3418 |
+
# @ all-in-one-wp-security-and-firewall
|
3419 |
+
#: admin/wp-security-spam-menu.php:256
|
3420 |
+
msgid "Minimum number of SPAM comments per IP"
|
3421 |
+
msgstr "Minimaal aantal SPAM-opmerkingen per IP"
|
3422 |
+
|
3423 |
+
# @ all-in-one-wp-security-and-firewall
|
3424 |
+
#: admin/wp-security-spam-menu.php:258
|
3425 |
+
msgid "This field allows you to list only those IP addresses which have been used to post X or more SPAM comments."
|
3426 |
+
msgstr "In dit veld kunt u alleen die IP-adressen vermelden die zijn gebruikt om X of meer SPAM-opmerkingen te plaatsen."
|
3427 |
+
|
3428 |
+
# @ all-in-one-wp-security-and-firewall
|
3429 |
+
#: admin/wp-security-spam-menu.php:262
|
3430 |
+
msgid "Example 1: Setting this value to \"0\" or \"1\" will list ALL IP addresses which were used to submit SPAM comments."
|
3431 |
+
msgstr "Voorbeeld 1: door deze waarde in te stellen op \"0\" of \"1\" worden ALLE IP-adressen vermeld die zijn gebruikt om SPAM-opmerkingen in te dienen."
|
3432 |
+
|
3433 |
+
# @ all-in-one-wp-security-and-firewall
|
3434 |
+
#: admin/wp-security-spam-menu.php:263
|
3435 |
+
msgid "Example 2: Setting this value to \"5\" will list only those IP addresses which were used to submit 5 SPAM comments or more on your site."
|
3436 |
+
msgstr "Voorbeeld 2: als u deze waarde instelt op \"5\", worden alleen die IP-adressen weergegeven die zijn gebruikt om 5 SPAM-opmerkingen of meer op uw site in te dienen."
|
3437 |
+
|
3438 |
+
# @ all-in-one-wp-security-and-firewall
|
3439 |
+
#: admin/wp-security-spam-menu.php:270
|
3440 |
+
msgid "Find IP Addresses"
|
3441 |
+
msgstr "Zoek IP-adressen"
|
3442 |
+
|
3443 |
+
# @ all-in-one-wp-security-and-firewall
|
3444 |
+
#: admin/wp-security-spam-menu.php:274
|
3445 |
+
msgid "SPAMMER IP Address Results"
|
3446 |
+
msgstr "SPAMMER IP-adresresultaten"
|
3447 |
+
|
3448 |
+
# @ all-in-one-wp-security-and-firewall
|
3449 |
+
#: admin/wp-security-spam-menu.php:280 classes/wp-security-utility.php:150
|
3450 |
+
msgid "The plugin has detected that you are using a Multi-Site WordPress installation."
|
3451 |
+
msgstr "De plug-in heeft gedetecteerd dat u een Multi-Site WordPress-installatie gebruikt."
|
3452 |
+
|
3453 |
+
# @ all-in-one-wp-security-and-firewall
|
3454 |
+
#: admin/wp-security-spam-menu.php:281
|
3455 |
+
msgid "Only the \"superadmin\" can block IP addresses from the main site."
|
3456 |
+
msgstr "Alleen het \"superadmin\" kan IP-adressen blokkeren van de hoofdsite."
|
3457 |
+
|
3458 |
+
# @ all-in-one-wp-security-and-firewall
|
3459 |
+
#: admin/wp-security-spam-menu.php:282
|
3460 |
+
msgid "Take note of the IP addresses you want blocked and ask the superadmin to add these to the blacklist using the \"Blacklist Manager\" on the main site."
|
3461 |
+
msgstr "Noteer de IP-adressen die u wilt blokkeren en vraag de superadmin om deze toe te voegen aan de zwarte lijst met behulp van de \"Blacklist Manager\" op de hoofdsite."
|
3462 |
+
|
3463 |
+
# @ all-in-one-wp-security-and-firewall
|
3464 |
+
#: admin/wp-security-user-accounts-menu.php:29
|
3465 |
+
msgid "WP Username"
|
3466 |
+
msgstr "WP-gebruikersnaam"
|
3467 |
+
|
3468 |
+
# @ all-in-one-wp-security-and-firewall
|
3469 |
+
#: admin/wp-security-user-accounts-menu.php:30
|
3470 |
+
msgid "Display Name"
|
3471 |
+
msgstr "Naam weergeven"
|
3472 |
+
|
3473 |
+
# @ all-in-one-wp-security-and-firewall
|
3474 |
+
# @ default
|
3475 |
+
#: admin/wp-security-user-accounts-menu.php:31
|
3476 |
+
#: other-includes/wp-security-rename-login-feature.php:845
|
3477 |
+
msgid "Password"
|
3478 |
+
msgstr "Wachtwoord"
|
3479 |
+
|
3480 |
+
# @ all-in-one-wp-security-and-firewall
|
3481 |
+
#: admin/wp-security-user-accounts-menu.php:85
|
3482 |
+
msgid "Admin User Security"
|
3483 |
+
msgstr "Beheerder Gebruikersbeveiliging"
|
3484 |
+
|
3485 |
+
# @ all-in-one-wp-security-and-firewall
|
3486 |
+
#: admin/wp-security-user-accounts-menu.php:88
|
3487 |
+
msgid "By default, WordPress sets the administrator username to \"admin\" at installation time."
|
3488 |
+
msgstr "WordPress stelt de beheerdersbenaming standaard in op \"admin\" tijdens de installatie."
|
3489 |
+
|
3490 |
+
# @ all-in-one-wp-security-and-firewall
|
3491 |
+
#: admin/wp-security-user-accounts-menu.php:89
|
3492 |
+
msgid "A lot of hackers try to take advantage of this information by attempting \"Brute Force Login Attacks\" where they repeatedly try to guess the password by using \"admin\" for username."
|
3493 |
+
msgstr "Veel hackers proberen van deze informatie gebruik te maken door \"Brute Force Login Attacks\" uit te proberen, waarbij ze herhaaldelijk proberen het wachtwoord te raden door \"admin\" als gebruikersnaam te gebruiken."
|
3494 |
+
|
3495 |
+
# @ all-in-one-wp-security-and-firewall
|
3496 |
+
#: admin/wp-security-user-accounts-menu.php:90
|
3497 |
+
msgid "From a security perspective, changing the default \"admin\" user name is one of the first and smartest things you should do on your site."
|
3498 |
+
msgstr "Vanuit beveiligingsoogpunt is het wijzigen van de standaardgebruikersnaam \"admin\" een van de eerste en slimste dingen die u op uw site moet doen."
|
3499 |
+
|
3500 |
+
# @ all-in-one-wp-security-and-firewall
|
3501 |
+
#: admin/wp-security-user-accounts-menu.php:91
|
3502 |
+
msgid "This feature will allow you to change your default \"admin\" user name to a more secure name of your choosing."
|
3503 |
+
msgstr "Met deze functie kunt u uw standaard \"admin\" -gebruikersnaam wijzigen in een veiligere naam naar keuze."
|
3504 |
+
|
3505 |
+
# @ all-in-one-wp-security-and-firewall
|
3506 |
+
#: admin/wp-security-user-accounts-menu.php:98
|
3507 |
+
msgid "List of Administrator Accounts"
|
3508 |
+
msgstr "Lijst met beheerdersaccounts"
|
3509 |
+
|
3510 |
+
# @ all-in-one-wp-security-and-firewall
|
3511 |
+
#: admin/wp-security-user-accounts-menu.php:107
|
3512 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:36
|
3513 |
+
msgid "Change Admin Username"
|
3514 |
+
msgstr "Wijzig beheerdersnaam"
|
3515 |
+
|
3516 |
+
# @ all-in-one-wp-security-and-firewall
|
3517 |
+
#: admin/wp-security-user-accounts-menu.php:115
|
3518 |
+
msgid ""
|
3519 |
+
"Your site currently has an account which uses the default \"admin\" username. \n"
|
3520 |
+
" It is highly recommended that you change this name to something else. \n"
|
3521 |
+
" Use the following field to change the admin username."
|
3522 |
+
msgstr ""
|
3523 |
+
"Uw site heeft momenteel een account die de standaard \"admin\" gebruikersnaam gebruikt.\n"
|
3524 |
+
" Het wordt sterk aanbevolen om deze naam in iets anders te veranderen.\n"
|
3525 |
+
" Gebruik het volgende veld om de gebruikersnaam van de beheerder te wijzigen."
|
3526 |
+
|
3527 |
+
# @ all-in-one-wp-security-and-firewall
|
3528 |
+
#: admin/wp-security-user-accounts-menu.php:123
|
3529 |
+
msgid "New Admin Username"
|
3530 |
+
msgstr "Nieuwe beheerders-gebruikersnaam"
|
3531 |
+
|
3532 |
+
# @ all-in-one-wp-security-and-firewall
|
3533 |
+
#: admin/wp-security-user-accounts-menu.php:125
|
3534 |
+
msgid "Choose a new username for admin."
|
3535 |
+
msgstr "Kies een nieuwe gebruikersnaam voor admin."
|
3536 |
+
|
3537 |
+
# @ all-in-one-wp-security-and-firewall
|
3538 |
+
#: admin/wp-security-user-accounts-menu.php:129
|
3539 |
+
msgid "Change Username"
|
3540 |
+
msgstr "Gebruikersnaam wijzigen"
|
3541 |
+
|
3542 |
+
# @ all-in-one-wp-security-and-firewall
|
3543 |
+
#: admin/wp-security-user-accounts-menu.php:131
|
3544 |
+
msgid "NOTE: If you are currently logged in as \"admin\" you will be automatically logged out after changing your username and will be required to log back in."
|
3545 |
+
msgstr "OPMERKING: Als u momenteel bent aangemeld als \"admin\", wordt u automatisch uitgelogd nadat u uw gebruikersnaam hebt gewijzigd en moet u opnieuw inloggen."
|
3546 |
+
|
3547 |
+
# @ all-in-one-wp-security-and-firewall
|
3548 |
+
#: admin/wp-security-user-accounts-menu.php:138
|
3549 |
+
msgid "No action required! "
|
3550 |
+
msgstr "Geen actie nodig! "
|
3551 |
+
|
3552 |
+
# @ all-in-one-wp-security-and-firewall
|
3553 |
+
#: admin/wp-security-user-accounts-menu.php:140
|
3554 |
+
msgid "Your site does not have any account which uses the default \"admin\" username. "
|
3555 |
+
msgstr "Uw site heeft geen account die de standaard \"admin\" gebruikersnaam gebruikt. "
|
3556 |
+
|
3557 |
+
# @ all-in-one-wp-security-and-firewall
|
3558 |
+
#: admin/wp-security-user-accounts-menu.php:141
|
3559 |
+
msgid "This is good security practice."
|
3560 |
+
msgstr "Dit zijn goede beveiligings actie."
|
3561 |
+
|
3562 |
+
# @ all-in-one-wp-security-and-firewall
|
3563 |
+
#: admin/wp-security-user-accounts-menu.php:153
|
3564 |
+
msgid "Display Name Security"
|
3565 |
+
msgstr "Toon de beveilingsnaam"
|
3566 |
+
|
3567 |
+
# @ all-in-one-wp-security-and-firewall
|
3568 |
+
#: admin/wp-security-user-accounts-menu.php:156
|
3569 |
+
msgid "When you submit a post or answer a comment, WordPress will usually display your \"nickname\"."
|
3570 |
+
msgstr "Wanneer u een bericht verzendt of een opmerking beantwoordt, geeft WordPress meestal uw \"bijnaam\" weer."
|
3571 |
+
|
3572 |
+
# @ all-in-one-wp-security-and-firewall
|
3573 |
+
#: admin/wp-security-user-accounts-menu.php:157
|
3574 |
+
msgid "By default the nickname is set to the login (or user) name of your account."
|
3575 |
+
msgstr "Standaard is de bijnaam ingesteld op de login- (of gebruikers-) naam van uw account."
|
3576 |
+
|
3577 |
+
# @ all-in-one-wp-security-and-firewall
|
3578 |
+
#: admin/wp-security-user-accounts-menu.php:158
|
3579 |
+
msgid "From a security perspective, leaving your nickname the same as your user name is bad practice because it gives a hacker at least half of your account's login credentials."
|
3580 |
+
msgstr "Vanuit beveiligingsoogpunt is het onjuist om uw bijnaam hetzelfde te laten als uw gebruikersnaam, omdat deze een hacker op zijn minst de helft van de aanmeldingsreferenties van uw account geeft."
|
3581 |
+
|
3582 |
+
# @ all-in-one-wp-security-and-firewall
|
3583 |
+
#: admin/wp-security-user-accounts-menu.php:159
|
3584 |
+
msgid "Therefore to further tighten your site's security you are advised to change your <strong>nickname</strong> and <strong>Display name</strong> to be different from your <strong>Username</strong>."
|
3585 |
+
msgstr "Daarom wordt u aangeraden om uw <strong> bijnaam </ strong> en <strong> weergavenaam </ strong> te wijzigen om uw website te beveiligen met uw <strong> gebruikersnaam </ strong>."
|
3586 |
+
|
3587 |
+
# @ all-in-one-wp-security-and-firewall
|
3588 |
+
#: admin/wp-security-user-accounts-menu.php:165
|
3589 |
+
msgid "Modify Accounts With Identical Login Name & Display Name"
|
3590 |
+
msgstr "Wijzig accounts met identieke inlognaam & weergavenaam"
|
3591 |
+
|
3592 |
+
# @ all-in-one-wp-security-and-firewall
|
3593 |
+
#: admin/wp-security-user-accounts-menu.php:174
|
3594 |
+
msgid "Your site currently has the following accounts which have an identical login name and display name."
|
3595 |
+
msgstr "Uw site heeft momenteel de volgende accounts met een identieke inlognaam en weergavenaam."
|
3596 |
+
|
3597 |
+
# @ all-in-one-wp-security-and-firewall
|
3598 |
+
#: admin/wp-security-user-accounts-menu.php:175
|
3599 |
+
msgid "Click on the link to edit the settings of that particular user account"
|
3600 |
+
msgstr "Klik op de link om de instellingen van dat specifieke gebruikersaccount te bewerken"
|
3601 |
+
|
3602 |
+
# @ all-in-one-wp-security-and-firewall
|
3603 |
+
#: admin/wp-security-user-accounts-menu.php:190
|
3604 |
+
msgid "No action required."
|
3605 |
+
msgstr "Geen actie nodig."
|
3606 |
+
|
3607 |
+
# @ all-in-one-wp-security-and-firewall
|
3608 |
+
#: admin/wp-security-user-accounts-menu.php:191
|
3609 |
+
msgid "Your site does not have a user account where the display name is identical to the username."
|
3610 |
+
msgstr "Uw site heeft geen gebruikersaccount waarvan de weergavenaam identiek is aan de gebruikersnaam."
|
3611 |
+
|
3612 |
+
# @ all-in-one-wp-security-and-firewall
|
3613 |
+
#: admin/wp-security-user-accounts-menu.php:202
|
3614 |
+
msgid "Password Tool"
|
3615 |
+
msgstr "Wachtwoord tool"
|
3616 |
+
|
3617 |
+
# @ all-in-one-wp-security-and-firewall
|
3618 |
+
#: admin/wp-security-user-accounts-menu.php:205
|
3619 |
+
msgid "Poor password selection is one of the most common weak points of many sites and is usually the first thing a hacker will try to exploit when attempting to break into your site."
|
3620 |
+
msgstr "Slechte wachtwoordselectie is een van de meest voorkomende zwakke punten van veel sites en is meestal het eerste wat een hacker probeert te misbruiken wanneer hij probeert in te breken op uw site."
|
3621 |
+
|
3622 |
+
# @ all-in-one-wp-security-and-firewall
|
3623 |
+
#: admin/wp-security-user-accounts-menu.php:206
|
3624 |
+
msgid "Many people fall into the trap of using a simple word or series of numbers as their password. Such a predictable and simple password would take a competent hacker merely minutes to guess your password by using a simple script which cycles through the easy and most common combinations."
|
3625 |
+
msgstr "Veel mensen raken in de val bij het gebruik van een simpel woord of een reeks cijfers als wachtwoord. Een dergelijk voorspelbaar en eenvoudig wachtwoord zou een bekwame hacker slechts enkele minuten kosten om uw wachtwoord te raden met behulp van een eenvoudig script dat door de eenvoudige en meest gebruikelijke combinaties loopt."
|
3626 |
+
|
3627 |
+
# @ all-in-one-wp-security-and-firewall
|
3628 |
+
#: admin/wp-security-user-accounts-menu.php:207
|
3629 |
+
msgid "The longer and more complex your password is the harder it is for hackers to \"crack\" because more complex passwords require much greater computing power and time."
|
3630 |
+
msgstr "Hoe langer en complexer uw wachtwoord is, hoe moeilijker het voor hackers is om te \"kraken\", omdat meer complexe wachtwoorden veel meer rekenkracht en tijd vereisen."
|
3631 |
+
|
3632 |
+
# @ all-in-one-wp-security-and-firewall
|
3633 |
+
#: admin/wp-security-user-accounts-menu.php:208
|
3634 |
+
msgid "This section contains a useful password strength tool which you can use to check whether your password is sufficiently strong enough."
|
3635 |
+
msgstr "Dit gedeelte bevat een handig wachtwoordsterktetool dat u kunt gebruiken om te controleren of uw wachtwoord voldoende sterk genoeg is."
|
3636 |
+
|
3637 |
+
# @ all-in-one-wp-security-and-firewall
|
3638 |
+
#: admin/wp-security-user-accounts-menu.php:213
|
3639 |
+
msgid "Password Strength Tool"
|
3640 |
+
msgstr "Wachtwoord sterkte tool"
|
3641 |
+
|
3642 |
+
# @ all-in-one-wp-security-and-firewall
|
3643 |
+
#: admin/wp-security-user-accounts-menu.php:218
|
3644 |
+
msgid "Start typing a password."
|
3645 |
+
msgstr "Begin met het typen van een wachtwoord."
|
3646 |
+
|
3647 |
+
# @ all-in-one-wp-security-and-firewall
|
3648 |
+
#: admin/wp-security-user-accounts-menu.php:221
|
3649 |
+
msgid "It would take a desktop PC approximately"
|
3650 |
+
msgstr "Het zou een desktop-pc ongeveerzoveel tijd kosten"
|
3651 |
+
|
3652 |
+
# @ all-in-one-wp-security-and-firewall
|
3653 |
+
#: admin/wp-security-user-accounts-menu.php:222
|
3654 |
+
msgid "1 sec"
|
3655 |
+
msgstr "1 sec"
|
3656 |
+
|
3657 |
+
# @ all-in-one-wp-security-and-firewall
|
3658 |
+
#: admin/wp-security-user-accounts-menu.php:222
|
3659 |
+
msgid "to crack your password!"
|
3660 |
+
msgstr "om je wachtwoord te kraken!"
|
3661 |
+
|
3662 |
+
# @ all-in-one-wp-security-and-firewall
|
3663 |
+
#: admin/wp-security-user-accounts-menu.php:227
|
3664 |
+
msgid "Password Strength"
|
3665 |
+
msgstr "Wachtwoord sterkte"
|
3666 |
+
|
3667 |
+
# @ all-in-one-wp-security-and-firewall
|
3668 |
+
#: admin/wp-security-user-accounts-menu.php:243
|
3669 |
+
msgid "Nonce check failed on admin username change operation!"
|
3670 |
+
msgstr "Controle nonce is mislukt bij wijziging van de beheerders gebruikersnaam!"
|
3671 |
+
|
3672 |
+
# @ all-in-one-wp-security-and-firewall
|
3673 |
+
#: admin/wp-security-user-accounts-menu.php:250
|
3674 |
+
msgid "Username "
|
3675 |
+
msgstr "Gebruikersnaam "
|
3676 |
+
|
3677 |
+
# @ all-in-one-wp-security-and-firewall
|
3678 |
+
#: admin/wp-security-user-accounts-menu.php:250
|
3679 |
+
msgid " already exists. Please enter another value. "
|
3680 |
+
msgstr " bestaat al. Voer een andere waarde in. "
|
3681 |
+
|
3682 |
+
# @ all-in-one-wp-security-and-firewall
|
3683 |
+
#: admin/wp-security-user-accounts-menu.php:266
|
3684 |
+
msgid "The database update operation of the user account failed!"
|
3685 |
+
msgstr "De database-update van het gebruikersaccount is mislukt!"
|
3686 |
+
|
3687 |
+
# @ all-in-one-wp-security-and-firewall
|
3688 |
+
#: admin/wp-security-user-accounts-menu.php:293
|
3689 |
+
msgid "You entered an invalid username. Please enter another value. "
|
3690 |
+
msgstr "U hebt een ongeldige gebruikersnaam ingevoerd. Voer een andere waarde in. "
|
3691 |
+
|
3692 |
+
# @ all-in-one-wp-security-and-firewall
|
3693 |
+
#: admin/wp-security-user-accounts-menu.php:297
|
3694 |
+
msgid "Please enter a value for your username. "
|
3695 |
+
msgstr "Voer een waarde in voor uw gebruikersnaam. "
|
3696 |
+
|
3697 |
+
# @ all-in-one-wp-security-and-firewall
|
3698 |
+
#: admin/wp-security-user-accounts-menu.php:304
|
3699 |
+
msgid "Username Successfully Changed!"
|
3700 |
+
msgstr "Gebruikersnaam is succesvol gewijzigd!"
|
3701 |
+
|
3702 |
+
# @ all-in-one-wp-security-and-firewall
|
3703 |
+
#: admin/wp-security-user-accounts-menu.php:324
|
3704 |
+
msgid "Account Login Name"
|
3705 |
+
msgstr "Account Login naam"
|
3706 |
+
|
3707 |
+
# @ all-in-one-wp-security-and-firewall
|
3708 |
+
#: admin/wp-security-user-login-menu.php:26
|
3709 |
+
#: admin/wp-security-user-login-menu.php:298
|
3710 |
+
msgid "Failed Login Records"
|
3711 |
+
msgstr "Mislukte Login Records"
|
3712 |
+
|
3713 |
+
# @ all-in-one-wp-security-and-firewall
|
3714 |
+
#: admin/wp-security-user-login-menu.php:27
|
3715 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:50
|
3716 |
+
msgid "Force Logout"
|
3717 |
+
msgstr "Gedwongen afmelden"
|
3718 |
+
|
3719 |
+
# @ all-in-one-wp-security-and-firewall
|
3720 |
+
#: admin/wp-security-user-login-menu.php:28
|
3721 |
+
#: admin/wp-security-user-login-menu.php:432
|
3722 |
+
msgid "Account Activity Logs"
|
3723 |
+
msgstr "Log van accountactiviteit"
|
3724 |
+
|
3725 |
+
# @ all-in-one-wp-security-and-firewall
|
3726 |
+
#: admin/wp-security-user-login-menu.php:96
|
3727 |
+
msgid "You entered a non numeric value for the max login attempts field. It has been set to the default value."
|
3728 |
+
msgstr "U hebt geen numerieke waarde ingevoerd voor het veld Max. loginpogingen. Het is ingesteld op de standaardwaarde."
|
3729 |
+
|
3730 |
+
# @ all-in-one-wp-security-and-firewall
|
3731 |
+
#: admin/wp-security-user-login-menu.php:103
|
3732 |
+
msgid "You entered a non numeric value for the login retry time period field. It has been set to the default value."
|
3733 |
+
msgstr "U hebt geen numerieke waarde ingevoerd voor het veld opnieuw aanmelden tijdsperiode. Het is ingesteld op de standaardwaarde."
|
3734 |
+
|
3735 |
+
# @ all-in-one-wp-security-and-firewall
|
3736 |
+
#: admin/wp-security-user-login-menu.php:159
|
3737 |
+
msgid "Login Lockdown Configuration"
|
3738 |
+
msgstr "Login vergrendel configuratie"
|
3739 |
+
|
3740 |
+
# @ all-in-one-wp-security-and-firewall
|
3741 |
+
#: admin/wp-security-user-login-menu.php:163
|
3742 |
+
msgid "One of the ways hackers try to compromise sites is via a "
|
3743 |
+
msgstr "Een van de manieren waarop hackers proberen sites te compromitteren is via een "
|
3744 |
+
|
3745 |
+
# @ all-in-one-wp-security-and-firewall
|
3746 |
+
#: admin/wp-security-user-login-menu.php:163
|
3747 |
+
msgid "Brute Force Login Attack"
|
3748 |
+
msgstr "Brute force login aanval"
|
3749 |
+
|
3750 |
+
# @ all-in-one-wp-security-and-firewall
|
3751 |
+
#: admin/wp-security-user-login-menu.php:164
|
3752 |
+
msgid "This is where attackers use repeated login attempts until they guess the password."
|
3753 |
+
msgstr "Dit is waar aanvallers herhaalde inlogpogingen gebruiken totdat ze het wachtwoord raden."
|
3754 |
+
|
3755 |
+
# @ all-in-one-wp-security-and-firewall
|
3756 |
+
#: admin/wp-security-user-login-menu.php:165
|
3757 |
+
msgid "Apart from choosing strong passwords, monitoring and blocking IP addresses which are involved in repeated login failures in a short period of time is a very effective way to stop these types of attacks."
|
3758 |
+
msgstr "Afgezien van het kiezen van sterke wachtwoorden is het controleren en blokkeren van IP-adressen die in korte tijd betrokken zijn bij herhaalde inlogproblemen, een zeer effectieve manier om dit soort aanvallen te stoppen."
|
3759 |
+
|
3760 |
+
# @ all-in-one-wp-security-and-firewall
|
3761 |
+
#: admin/wp-security-user-login-menu.php:166
|
3762 |
+
#, php-format
|
3763 |
+
msgid "You may also want to checkout our %s feature for another secure way to protect against these types of attacks."
|
3764 |
+
msgstr "U kunt ook onze %s functie checken voor een andere veilige manier om u te beschermen tegen dit soort aanvallen."
|
3765 |
+
|
3766 |
+
# @ all-in-one-wp-security-and-firewall
|
3767 |
+
#: admin/wp-security-user-login-menu.php:171
|
3768 |
+
msgid "Login Lockdown Options"
|
3769 |
+
msgstr "Aanmeldings vergrendel opties voor inloggen"
|
3770 |
+
|
3771 |
+
# @ all-in-one-wp-security-and-firewall
|
3772 |
+
#: admin/wp-security-user-login-menu.php:183
|
3773 |
+
msgid "Enable Login Lockdown Feature"
|
3774 |
+
msgstr "Schakel Login vergrendel kenmerken in"
|
3775 |
+
|
3776 |
+
# @ all-in-one-wp-security-and-firewall
|
3777 |
+
#: admin/wp-security-user-login-menu.php:186
|
3778 |
+
msgid "Check this if you want to enable the login lockdown feature and apply the settings below"
|
3779 |
+
msgstr "Selecteer dit als u de functie voor het vergrendelen van inloggegevens wilt inschakelen en de onderstaande instellingen wilt toepassen"
|
3780 |
+
|
3781 |
+
# @ all-in-one-wp-security-and-firewall
|
3782 |
+
#: admin/wp-security-user-login-menu.php:190
|
3783 |
+
msgid "Allow Unlock Requests"
|
3784 |
+
msgstr "Laat ontgrendelverzoeken toe"
|
3785 |
+
|
3786 |
+
# @ all-in-one-wp-security-and-firewall
|
3787 |
+
#: admin/wp-security-user-login-menu.php:193
|
3788 |
+
msgid "Check this if you want to allow users to generate an automated unlock request link which will unlock their account"
|
3789 |
+
msgstr "Vink dit aan als u wilt dat gebruikers een automatische ontgrendelverzoeklink kunnen genereren die hun account ontgrendelt"
|
3790 |
+
|
3791 |
+
# @ all-in-one-wp-security-and-firewall
|
3792 |
+
#: admin/wp-security-user-login-menu.php:197
|
3793 |
+
msgid "Max Login Attempts"
|
3794 |
+
msgstr "Maximale inlogpogingen"
|
3795 |
+
|
3796 |
+
# @ all-in-one-wp-security-and-firewall
|
3797 |
+
#: admin/wp-security-user-login-menu.php:199
|
3798 |
+
msgid "Set the value for the maximum login retries before IP address is locked out"
|
3799 |
+
msgstr "Stel de waarde in voor het maximale aantal pogingen om opnieuw in te loggen voordat het IP-adres is geblokkeerd"
|
3800 |
+
|
3801 |
+
# @ all-in-one-wp-security-and-firewall
|
3802 |
+
#: admin/wp-security-user-login-menu.php:203
|
3803 |
+
msgid "Login Retry Time Period (min)"
|
3804 |
+
msgstr "Tijdsperiode voor het opnieuw proberen om in te loggen (min)"
|
3805 |
+
|
3806 |
+
# @ all-in-one-wp-security-and-firewall
|
3807 |
+
#: admin/wp-security-user-login-menu.php:205
|
3808 |
+
msgid "If the maximum number of failed login attempts for a particular IP address occur within this time period the plugin will lock out that address"
|
3809 |
+
msgstr "Als het maximale aantal mislukte inlogpogingen voor een bepaald IP-adres binnen deze tijdsperiode plaatsvindt, blokkeert de plug-in dat adres"
|
3810 |
+
|
3811 |
+
# @ all-in-one-wp-security-and-firewall
|
3812 |
+
#: admin/wp-security-user-login-menu.php:209
|
3813 |
+
msgid "Time Length of Lockout (min)"
|
3814 |
+
msgstr "Duur van de lockout tijd (min)"
|
3815 |
+
|
3816 |
+
# @ all-in-one-wp-security-and-firewall
|
3817 |
+
#: admin/wp-security-user-login-menu.php:211
|
3818 |
+
msgid "Set the length of time for which a particular IP address will be prevented from logging in"
|
3819 |
+
msgstr "Stel de tijdsduur in waarin een bepaald IP-adres zich niet kan aanmelden"
|
3820 |
+
|
3821 |
+
# @ all-in-one-wp-security-and-firewall
|
3822 |
+
#: admin/wp-security-user-login-menu.php:215
|
3823 |
+
msgid "Display Generic Error Message"
|
3824 |
+
msgstr "Toon algemeen foutbericht"
|
3825 |
+
|
3826 |
+
# @ all-in-one-wp-security-and-firewall
|
3827 |
+
#: admin/wp-security-user-login-menu.php:218
|
3828 |
+
msgid "Check this if you want to show a generic error message when a login attempt fails"
|
3829 |
+
msgstr "Selecteer dit als u een generiek foutbericht wilt weergeven wanneer een inlogpoging mislukt"
|
3830 |
+
|
3831 |
+
# @ all-in-one-wp-security-and-firewall
|
3832 |
+
#: admin/wp-security-user-login-menu.php:222
|
3833 |
+
msgid "Instantly Lockout Invalid Usernames"
|
3834 |
+
msgstr "Directe uitsluiting van ongeldige gebruikersnamen"
|
3835 |
+
|
3836 |
+
# @ all-in-one-wp-security-and-firewall
|
3837 |
+
#: admin/wp-security-user-login-menu.php:225
|
3838 |
+
msgid "Check this if you want to instantly lockout login attempts with usernames which do not exist on your system"
|
3839 |
+
msgstr "Vink dit aan als u inlogpogingen onmiddellijk wilt blokkeren met gebruikersnamen die niet bestaan op uw systeem"
|
3840 |
+
|
3841 |
+
# @ all-in-one-wp-security-and-firewall
|
3842 |
+
#: admin/wp-security-user-login-menu.php:230
|
3843 |
+
msgid "Notify By Email"
|
3844 |
+
msgstr "Melden per e-mail"
|
3845 |
+
|
3846 |
+
# @ all-in-one-wp-security-and-firewall
|
3847 |
+
#: admin/wp-security-user-login-menu.php:233
|
3848 |
+
msgid "Check this if you want to receive an email when someone has been locked out due to maximum failed login attempts"
|
3849 |
+
msgstr "Vink dit aan als u een e-mail wilt ontvangen wanneer iemand is geblokkerd vanwege het maximaal aantal mislukte inlogpogingen"
|
3850 |
+
|
3851 |
+
# @ all-in-one-wp-security-and-firewall
|
3852 |
+
#: admin/wp-security-user-login-menu.php:243
|
3853 |
+
msgid "Currently Locked Out IP Address Ranges"
|
3854 |
+
msgstr "Aantal van momenteel geblokkeerde IP-adres"
|
3855 |
+
|
3856 |
+
# @ all-in-one-wp-security-and-firewall
|
3857 |
+
#: admin/wp-security-user-login-menu.php:248
|
3858 |
+
#, php-format
|
3859 |
+
msgid "To see a list of all locked IP addresses and ranges go to the %s tab in the dashboard menu."
|
3860 |
+
msgstr "Als u een lijst met alle vergrendelde IP-adressen en bereiken wilt zien, gaat u naar het tabblad %s in het dashboardmenu."
|
3861 |
+
|
3862 |
+
# @ all-in-one-wp-security-and-firewall
|
3863 |
+
#: admin/wp-security-user-login-menu.php:264
|
3864 |
+
msgid "Nonce check failed for delete all failed login records operation!"
|
3865 |
+
msgstr "Nonce check mislukt voor het verwijderen van alle mislukte login records operatie!"
|
3866 |
+
|
3867 |
+
# @ all-in-one-wp-security-and-firewall
|
3868 |
+
#: admin/wp-security-user-login-menu.php:273
|
3869 |
+
msgid "User Login Feature - Delete all failed login records operation failed!"
|
3870 |
+
msgstr "Gebruikersaanmeldings kenmerken - Verwijder alle records van mislukte inlog pogingen!"
|
3871 |
+
|
3872 |
+
# @ all-in-one-wp-security-and-firewall
|
3873 |
+
#: admin/wp-security-user-login-menu.php:277
|
3874 |
+
msgid "All records from the Failed Logins table were deleted successfully!"
|
3875 |
+
msgstr "Alle records uit de lijst mislukt inlogingen zijn met succes verwijderd!"
|
3876 |
+
|
3877 |
+
# @ all-in-one-wp-security-and-firewall
|
3878 |
+
#: admin/wp-security-user-login-menu.php:292
|
3879 |
+
msgid "This tab displays the failed login attempts for your site."
|
3880 |
+
msgstr "Op dit tabblad worden de mislukte inlogpogingen voor uw site weergegeven."
|
3881 |
+
|
3882 |
+
# @ all-in-one-wp-security-and-firewall
|
3883 |
+
#: admin/wp-security-user-login-menu.php:293
|
3884 |
+
msgid "The information below can be handy if you need to do security investigations because it will show you the IP range, username and ID (if applicable) and the time/date of the failed login attempt."
|
3885 |
+
msgstr "De onderstaande informatie kan handig zijn als u beveiligingsonderzoeken moet uitvoeren omdat deze u het IP-bereik, de gebruikersnaam en ID (indien van toepassing) en de tijd / datum van de mislukte inlogpoging laten zien."
|
3886 |
+
|
3887 |
+
# @ all-in-one-wp-security-and-firewall
|
3888 |
+
#: admin/wp-security-user-login-menu.php:314
|
3889 |
+
#: admin/wp-security-user-login-menu.php:323
|
3890 |
+
msgid "Delete All Failed Login Records"
|
3891 |
+
msgstr "Verwijder alle mislukte inlog records"
|
3892 |
+
|
3893 |
+
# @ all-in-one-wp-security-and-firewall
|
3894 |
+
#: admin/wp-security-user-login-menu.php:320
|
3895 |
+
msgid "Click this button if you wish to delete all failed login records in one go."
|
3896 |
+
msgstr "Klik op deze knop als u alle mislukte in log records in één keer wilt verwijderen."
|
3897 |
+
|
3898 |
+
# @ all-in-one-wp-security-and-firewall
|
3899 |
+
#: admin/wp-security-user-login-menu.php:348
|
3900 |
+
msgid "You entered a non numeric value for the logout time period field. It has been set to the default value."
|
3901 |
+
msgstr "U hebt een geen numerieke waarde ingevoerd voor het veld logout-tijdsperiode. Het is ingesteld op de standaardwaarde."
|
3902 |
+
|
3903 |
+
# @ all-in-one-wp-security-and-firewall
|
3904 |
+
#: admin/wp-security-user-login-menu.php:376
|
3905 |
+
msgid "Setting an expiry period for your WP administration session is a simple way to protect against unauthorized access to your site from your computer."
|
3906 |
+
msgstr "Het instellen van een vervalperiode voor uw WP-beheersessie is een eenvoudige manier om uw computer tegen ongeoorloofde toegang tot uw site te beschermen."
|
3907 |
+
|
3908 |
+
# @ all-in-one-wp-security-and-firewall
|
3909 |
+
#: admin/wp-security-user-login-menu.php:377
|
3910 |
+
msgid "This feature allows you to specify a time period in minutes after which the admin session will expire and the user will be forced to log back in."
|
3911 |
+
msgstr "Met deze functie kunt u een tijdsperiode opgeven in minuten waarna de beheersessie verloopt en de gebruiker gedwongen wordt weer in te loggen."
|
3912 |
+
|
3913 |
+
# @ all-in-one-wp-security-and-firewall
|
3914 |
+
#: admin/wp-security-user-login-menu.php:382
|
3915 |
+
msgid "Force User Logout Options"
|
3916 |
+
msgstr "Geforceerde gebruikers uitlogopties"
|
3917 |
+
|
3918 |
+
# @ all-in-one-wp-security-and-firewall
|
3919 |
+
#: admin/wp-security-user-login-menu.php:394
|
3920 |
+
msgid "Enable Force WP User Logout"
|
3921 |
+
msgstr "Schakel geforceerde WP gebruikers uitlogoptie in"
|
3922 |
+
|
3923 |
+
# @ all-in-one-wp-security-and-firewall
|
3924 |
+
#: admin/wp-security-user-login-menu.php:397
|
3925 |
+
msgid "Check this if you want to force a wp user to be logged out after a configured amount of time"
|
3926 |
+
msgstr "Selecteer dit als u wilt dat een wp-gebruiker na een ingestelde tijd wordt uitgelogd"
|
3927 |
+
|
3928 |
+
# @ all-in-one-wp-security-and-firewall
|
3929 |
+
#: admin/wp-security-user-login-menu.php:401
|
3930 |
+
msgid "Logout the WP User After XX Minutes"
|
3931 |
+
msgstr "WP-gebruiker na XX minuten uitloggen"
|
3932 |
+
|
3933 |
+
# @ all-in-one-wp-security-and-firewall
|
3934 |
+
#: admin/wp-security-user-login-menu.php:403
|
3935 |
+
msgid "(Minutes) The user will be forced to log back in after this time period has elapased."
|
3936 |
+
msgstr "(Minuten) De gebruiker wordt gedwongen zich weer aan te melden nadat deze periode is verstreken."
|
3937 |
+
|
3938 |
+
# @ all-in-one-wp-security-and-firewall
|
3939 |
+
#: admin/wp-security-user-login-menu.php:426
|
3940 |
+
msgid "This tab displays the login activity for WordPress admin accounts registered with your site."
|
3941 |
+
msgstr "Dit tabblad toont de login-activiteit voor WordPress-beheerdersaccounts die bij uw site zijn geregistreerd."
|
3942 |
+
|
3943 |
+
# @ all-in-one-wp-security-and-firewall
|
3944 |
+
#: admin/wp-security-user-login-menu.php:427
|
3945 |
+
msgid "The information below can be handy if you need to do security investigations because it will show you the last 50 recent login events by username, IP address and time/date."
|
3946 |
+
msgstr "De onderstaande informatie kan handig zijn als u beveiligingsonderzoeken moet uitvoeren omdat u de laatste 50 recente aanmeldingsgebeurtenissen te zien krijgt op gebruikersnaam, IP-adres en tijd / datum."
|
3947 |
+
|
3948 |
+
# @ all-in-one-wp-security-and-firewall
|
3949 |
+
#: admin/wp-security-user-login-menu.php:464
|
3950 |
+
msgid "Nonce check failed for users logged in list!"
|
3951 |
+
msgstr "Nonce check mislukt voor ingelogde gebruikerslijst!"
|
3952 |
+
|
3953 |
+
# @ all-in-one-wp-security-and-firewall
|
3954 |
+
#: admin/wp-security-user-login-menu.php:477
|
3955 |
+
msgid "Refresh Logged In User Data"
|
3956 |
+
msgstr "Vernieuwde ingelogde gebruikersgegevens vernieuwen"
|
3957 |
+
|
3958 |
+
# @ all-in-one-wp-security-and-firewall
|
3959 |
+
#: admin/wp-security-user-login-menu.php:481
|
3960 |
+
msgid "Refresh Data"
|
3961 |
+
msgstr "Data vernieuwen"
|
3962 |
+
|
3963 |
+
# @ all-in-one-wp-security-and-firewall
|
3964 |
+
#: admin/wp-security-user-login-menu.php:487
|
3965 |
+
msgid "This tab displays all users who are currently logged into your site."
|
3966 |
+
msgstr "Op dit tabblad worden alle gebruikers weergegeven die op uw site zijn ingelogd."
|
3967 |
+
|
3968 |
+
# @ all-in-one-wp-security-and-firewall
|
3969 |
+
#: admin/wp-security-user-login-menu.php:488
|
3970 |
+
msgid "If you suspect there is a user or users who are logged in which should not be, you can block them by inspecting the IP addresses from the data below and adding them to your blacklist."
|
3971 |
+
msgstr "Als u vermoedt dat er een gebruiker is of gebruikers die zijn ingelogd en dat niet zou moeten zijn, kunt u deze blokkeren door de IP-adressen uit de onderstaande gegevens te controleren en ze toe te voegen aan uw zwarte lijst."
|
3972 |
+
|
3973 |
+
# @ all-in-one-wp-security-and-firewall
|
3974 |
+
#: admin/wp-security-user-login-menu.php:493
|
3975 |
+
msgid "Currently Logged In Users"
|
3976 |
+
msgstr "Momenteel ingelogde gebruikers"
|
3977 |
+
|
3978 |
+
# @ all-in-one-wp-security-and-firewall
|
3979 |
+
#: admin/wp-security-user-login-menu.php:558
|
3980 |
+
msgid "The selected records were deleted successfully!"
|
3981 |
+
msgstr "De geselecteerde records zijn succesvol verwijderd!"
|
3982 |
+
|
3983 |
+
# @ all-in-one-wp-security-and-firewall
|
3984 |
+
#: admin/wp-security-user-login-menu.php:567
|
3985 |
+
msgid "The selected record was deleted successfully!"
|
3986 |
+
msgstr "Het geselecteerde record is succesvol verwijderd!"
|
3987 |
+
|
3988 |
+
# @ all-in-one-wp-security-and-firewall
|
3989 |
+
#: admin/wp-security-user-registration-menu.php:23
|
3990 |
+
msgid "Manual Approval"
|
3991 |
+
msgstr "Handmatige goedkeuring"
|
3992 |
+
|
3993 |
+
# @ all-in-one-wp-security-and-firewall
|
3994 |
+
#: admin/wp-security-user-registration-menu.php:24
|
3995 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:56
|
3996 |
+
msgid "Registration Captcha"
|
3997 |
+
msgstr "Registratie Captcha"
|
3998 |
+
|
3999 |
+
# @ all-in-one-wp-security-and-firewall
|
4000 |
+
#: admin/wp-security-user-registration-menu.php:112
|
4001 |
+
msgid "User Registration Settings"
|
4002 |
+
msgstr "Gebruikersregistratie-instellingen"
|
4003 |
+
|
4004 |
+
# @ all-in-one-wp-security-and-firewall
|
4005 |
+
#: admin/wp-security-user-registration-menu.php:116
|
4006 |
+
msgid "Manually Approve New Registrations"
|
4007 |
+
msgstr "Handmatig nieuwe registraties goedkeuren"
|
4008 |
+
|
4009 |
+
# @ all-in-one-wp-security-and-firewall
|
4010 |
+
#: admin/wp-security-user-registration-menu.php:120
|
4011 |
+
msgid "If your site allows people to create their own accounts via the WordPress registration form, then you can minimize SPAM or bogus registrations by manually approving each registration."
|
4012 |
+
msgstr "Als uw site mensen toestaat om hun eigen accounts aan te maken via het registratieformulier van WordPress, dan kunt u SPAM- of valse registraties minimaliseren door elke registratie handmatig goed te keuren."
|
4013 |
+
|
4014 |
+
# @ all-in-one-wp-security-and-firewall
|
4015 |
+
#: admin/wp-security-user-registration-menu.php:121
|
4016 |
+
msgid "This feature will automatically set a newly registered account to \"pending\" until the administrator activates it. Therefore undesirable registrants will be unable to log in without your express approval."
|
4017 |
+
msgstr "Met deze functie wordt automatisch een nieuw geregistreerde account ingesteld op \"In behandeling\" totdat de beheerder deze activeert. Ongewenste registranten kunnen daarom niet inloggen zonder uw uitdrukkelijke toestemming."
|
4018 |
+
|
4019 |
+
# @ all-in-one-wp-security-and-firewall
|
4020 |
+
#: admin/wp-security-user-registration-menu.php:122
|
4021 |
+
msgid "You can view all accounts which have been newly registered via the handy table below and you can also perform bulk activation/deactivation/deletion tasks on each account."
|
4022 |
+
msgstr "U kunt alle accounts die nieuw zijn geregistreerd bekijken via de onderstaande handige tabel en u kunt ook bulkactivatie- / deactiverings- / verwijderingstaken uitvoeren voor elk account."
|
4023 |
+
|
4024 |
+
# @ all-in-one-wp-security-and-firewall
|
4025 |
+
#: admin/wp-security-user-registration-menu.php:138
|
4026 |
+
msgid "Enable manual approval of new registrations"
|
4027 |
+
msgstr "Schakel handmatige goedkeuring van nieuwe registraties in"
|
4028 |
+
|
4029 |
+
# @ all-in-one-wp-security-and-firewall
|
4030 |
+
#: admin/wp-security-user-registration-menu.php:141
|
4031 |
+
msgid "Check this if you want to automatically disable all newly registered accounts so that you can approve them manually."
|
4032 |
+
msgstr "Selecteer dit als u alle nieuw geregistreerde accounts automatisch wilt uitschakelen, zodat u ze handmatig kunt goedkeuren."
|
4033 |
+
|
4034 |
+
# @ all-in-one-wp-security-and-firewall
|
4035 |
+
#: admin/wp-security-user-registration-menu.php:150
|
4036 |
+
msgid "Approve Registered Users"
|
4037 |
+
msgstr "Goedgekeurde geregistreerde gebruikers"
|
4038 |
+
|
4039 |
+
# @ all-in-one-wp-security-and-firewall
|
4040 |
+
#: admin/wp-security-user-registration-menu.php:195
|
4041 |
+
msgid "This feature allows you to add a captcha form on the WordPress registration page."
|
4042 |
+
msgstr "Met deze functie kunt u een captcha-formulier toevoegen aan de registratiepagina van WordPress."
|
4043 |
+
|
4044 |
+
# @ all-in-one-wp-security-and-firewall
|
4045 |
+
#: admin/wp-security-user-registration-menu.php:196
|
4046 |
+
msgid "Users who attempt to register will also need to enter the answer to a simple mathematical question - if they enter the wrong answer, the plugin will not allow them to register."
|
4047 |
+
msgstr "Gebruikers die proberen zich te registreren, moeten ook het antwoord op een eenvoudige wiskundige vraag invoeren. Als ze een verkeerd antwoord invoeren, kan de plug-in hen niet toestaan zich te registreren."
|
4048 |
+
|
4049 |
+
# @ all-in-one-wp-security-and-firewall
|
4050 |
+
#: admin/wp-security-user-registration-menu.php:197
|
4051 |
+
msgid "Therefore, adding a captcha form on the registration page is another effective yet simple SPAM registration prevention technique."
|
4052 |
+
msgstr "Daarom is het toevoegen van een captcha-formulier op de registratiepagina een andere effectieve maar toch eenvoudige SPAM-registratiepreventietechniek."
|
4053 |
+
|
4054 |
+
# @ all-in-one-wp-security-and-firewall
|
4055 |
+
#: admin/wp-security-user-registration-menu.php:202
|
4056 |
+
msgid "Registration Page Captcha Settings"
|
4057 |
+
msgstr "Registratiepagina Captcha-instellingen"
|
4058 |
+
|
4059 |
+
# @ all-in-one-wp-security-and-firewall
|
4060 |
+
#: admin/wp-security-user-registration-menu.php:214
|
4061 |
+
msgid "Enable Captcha On Registration Page"
|
4062 |
+
msgstr "Captcha op registratiepagina inschakelen"
|
4063 |
+
|
4064 |
+
# @ all-in-one-wp-security-and-firewall
|
4065 |
+
#: admin/wp-security-user-registration-menu.php:217
|
4066 |
+
msgid "Check this if you want to insert a captcha form on the WordPress user registration page (if you allow user registration)."
|
4067 |
+
msgstr "Selecteer dit als u een captcha-formulier wilt invoegen op de gebruikersregistratiepagina van WordPress (als u gebruikersregistratie toestaat)."
|
4068 |
+
|
4069 |
+
# @ all-in-one-wp-security-and-firewall
|
4070 |
+
#: admin/wp-security-whois-menu.php:22
|
4071 |
+
msgid "WhoIS Lookup"
|
4072 |
+
msgstr "WhoIS opzoeken"
|
4073 |
+
|
4074 |
+
# @ all-in-one-wp-security-and-firewall
|
4075 |
+
#: admin/wp-security-whois-menu.php:74
|
4076 |
+
msgid "WHOIS Lookup Information"
|
4077 |
+
msgstr "WHOIS opzoek informatie"
|
4078 |
+
|
4079 |
+
# @ all-in-one-wp-security-and-firewall
|
4080 |
+
#: admin/wp-security-whois-menu.php:77
|
4081 |
+
msgid "This feature allows you to look up more detailed information about an IP address or domain name by querying the WHOIS API."
|
4082 |
+
msgstr "Met deze functie kunt u meer gedetailleerde informatie over een IP-adres of domeinnaam opzoeken door de WHOIS API te raadplegen."
|
4083 |
+
|
4084 |
+
# @ all-in-one-wp-security-and-firewall
|
4085 |
+
#: admin/wp-security-whois-menu.php:83
|
4086 |
+
msgid "Perform a WHOIS Lookup for an IP or Domain Name"
|
4087 |
+
msgstr "Voer een WHOIS-zoekopdracht uit voor een IP- of domeinnaam"
|
4088 |
+
|
4089 |
+
# @ all-in-one-wp-security-and-firewall
|
4090 |
+
#: admin/wp-security-whois-menu.php:89
|
4091 |
+
msgid "Enter IP Address or Domain Name"
|
4092 |
+
msgstr "Voer het IP-adres of de domeinnaam in"
|
4093 |
+
|
4094 |
+
# @ all-in-one-wp-security-and-firewall
|
4095 |
+
#: admin/wp-security-whois-menu.php:91
|
4096 |
+
msgid "Enter an IP address or domain name. Example: 111.11.12.13 OR some-domain-name.com"
|
4097 |
+
msgstr "Voer een IP-adres of domeinnaam in. Voorbeeld: 111.11.12.13 OF een-domeinnaam.com"
|
4098 |
+
|
4099 |
+
# @ all-in-one-wp-security-and-firewall
|
4100 |
+
#: admin/wp-security-whois-menu.php:95
|
4101 |
+
msgid "Perform IP or Domain Lookup"
|
4102 |
+
msgstr "IP of Domein opzoeken uitvoeren"
|
4103 |
+
|
4104 |
+
# @ all-in-one-wp-security-and-firewall
|
4105 |
+
#: admin/wp-security-whois-menu.php:115
|
4106 |
+
msgid "WHOIS lookup successfully completed. Please see the results below:"
|
4107 |
+
msgstr "WHOIS-zoekopdracht is voltooid. Zie de resultaten hieronder:"
|
4108 |
+
|
4109 |
+
# @ all-in-one-wp-security-and-firewall
|
4110 |
+
#: admin/wp-security-whois-menu.php:127
|
4111 |
+
msgid "You have entered an incorrectly formatted IP address or domain name. Please try again."
|
4112 |
+
msgstr "U hebt een onjuist geformatteerd IP-adres of een domeinnaam ingevoerd. Probeer het opnieuw."
|
4113 |
+
|
4114 |
+
# @ all-in-one-wp-security-and-firewall
|
4115 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:29
|
4116 |
+
msgid "Remove WP Generatore Meta Tag"
|
4117 |
+
msgstr "WP-generator-metatag verwijderen"
|
4118 |
+
|
4119 |
+
# @ all-in-one-wp-security-and-firewall
|
4120 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:38
|
4121 |
+
msgid "Change Display Name"
|
4122 |
+
msgstr "Verander de naam weergave"
|
4123 |
+
|
4124 |
+
# @ all-in-one-wp-security-and-firewall
|
4125 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:46
|
4126 |
+
msgid "Lost Password Captcha"
|
4127 |
+
msgstr "Wachtwoord vergeten Captcha"
|
4128 |
+
|
4129 |
+
# @ all-in-one-wp-security-and-firewall
|
4130 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:48
|
4131 |
+
msgid "Login IP Whitelisting"
|
4132 |
+
msgstr "Login IP niet geblokkeerdelijst"
|
4133 |
+
|
4134 |
+
# @ all-in-one-wp-security-and-firewall
|
4135 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:54
|
4136 |
+
msgid "Registration Approval"
|
4137 |
+
msgstr "Registratie Goedkeuring"
|
4138 |
+
|
4139 |
+
# @ all-in-one-wp-security-and-firewall
|
4140 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:70
|
4141 |
+
msgid "WordPress Files Access"
|
4142 |
+
msgstr "WordPress bestanden openen"
|
4143 |
+
|
4144 |
+
# @ all-in-one-wp-security-and-firewall
|
4145 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:74
|
4146 |
+
msgid "IP and User Agent Blacklisting"
|
4147 |
+
msgstr "Zwarte lijst IP adressen en gebruikers"
|
4148 |
+
|
4149 |
+
# @ all-in-one-wp-security-and-firewall
|
4150 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:78
|
4151 |
+
msgid "Enable Basic Firewall"
|
4152 |
+
msgstr "Schakel de basis firewallbescherming in"
|
4153 |
+
|
4154 |
+
# @ all-in-one-wp-security-and-firewall
|
4155 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:79
|
4156 |
+
msgid "Enable Pingback Vulnerability Protection"
|
4157 |
+
msgstr "Schakel Pingback-beveiligingslek in"
|
4158 |
+
|
4159 |
+
# @ all-in-one-wp-security-and-firewall
|
4160 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:80
|
4161 |
+
msgid "Enable IP blocking for 404 detection"
|
4162 |
+
msgstr "IP-blokkering inschakelen voor 404-detectie"
|
4163 |
+
|
4164 |
+
# @ all-in-one-wp-security-and-firewall
|
4165 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:84
|
4166 |
+
msgid "Enable Rename Login Page"
|
4167 |
+
msgstr "Schakel de naam wijziging van de inlogpagina in"
|
4168 |
+
|
4169 |
+
# @ all-in-one-wp-security-and-firewall
|
4170 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:90
|
4171 |
+
msgid "Forbid Proxy Comments"
|
4172 |
+
msgstr "Verhinder Proxy-opmerkingen"
|
4173 |
+
|
4174 |
+
# @ all-in-one-wp-security-and-firewall
|
4175 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:91
|
4176 |
+
msgid "Deny Bad Queries"
|
4177 |
+
msgstr "Weigerdslechte zoekopdrachten"
|
4178 |
+
|
4179 |
+
# @ all-in-one-wp-security-and-firewall
|
4180 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:93
|
4181 |
+
msgid "5G Blacklist"
|
4182 |
+
msgstr "5G B;acklist"
|
4183 |
+
|
4184 |
+
# @ all-in-one-wp-security-and-firewall
|
4185 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:96
|
4186 |
+
msgid "Block Spambots"
|
4187 |
+
msgstr "Spambots blokkeren"
|
4188 |
+
|
4189 |
+
# @ all-in-one-wp-security-and-firewall
|
4190 |
+
#: classes/grade-system/wp-security-feature-item-manager.php:98
|
4191 |
+
msgid "Comment Captcha"
|
4192 |
+
msgstr "Captcha Commentaar"
|
4193 |
+
|
4194 |
+
# @ all-in-one-wp-security-and-firewall
|
4195 |
+
#: classes/grade-system/wp-security-feature-item.php:28
|
4196 |
+
msgid "Basic"
|
4197 |
+
msgstr "Basis"
|
4198 |
+
|
4199 |
+
# @ all-in-one-wp-security-and-firewall
|
4200 |
+
#: classes/grade-system/wp-security-feature-item.php:31
|
4201 |
+
msgid "Intermediate"
|
4202 |
+
msgstr "Tussenvorm"
|
4203 |
+
|
4204 |
+
# @ all-in-one-wp-security-and-firewall
|
4205 |
+
#: classes/grade-system/wp-security-feature-item.php:34
|
4206 |
+
msgid "Advanced"
|
4207 |
+
msgstr "Geavanceerd"
|
4208 |
+
|
4209 |
+
# @ all-in-one-wp-security-and-firewall
|
4210 |
+
#: classes/wp-security-backup.php:177
|
4211 |
+
msgid "All In One WP Security - Site Database Backup"
|
4212 |
+
msgstr "All In One WP Security - Site Database Backup"
|
4213 |
+
|
4214 |
+
# @ all-in-one-wp-security-and-firewall
|
4215 |
+
#: classes/wp-security-backup.php:179
|
4216 |
+
msgid "Attached is your latest DB backup file for site URL"
|
4217 |
+
msgstr "Bijgevoegd is uw nieuwste DB-back-upbestand voor de site-URL"
|
4218 |
+
|
4219 |
+
# @ all-in-one-wp-security-and-firewall
|
4220 |
+
#: classes/wp-security-backup.php:179
|
4221 |
+
msgid " generated on"
|
4222 |
+
msgstr " gegenereerd op"
|
4223 |
+
|
4224 |
+
# @ all-in-one-wp-security-and-firewall
|
4225 |
+
#: classes/wp-security-captcha.php:12
|
4226 |
+
msgid "Please enter an answer in digits:"
|
4227 |
+
msgstr "Geef het antwoord (in cijfers) van de rekensom:"
|
4228 |
+
|
4229 |
+
# @ all-in-one-wp-security-and-firewall
|
4230 |
+
#: classes/wp-security-captcha.php:91
|
4231 |
+
msgid "one"
|
4232 |
+
msgstr "een"
|
4233 |
+
|
4234 |
+
# @ all-in-one-wp-security-and-firewall
|
4235 |
+
#: classes/wp-security-captcha.php:92
|
4236 |
+
msgid "two"
|
4237 |
+
msgstr "twee"
|
4238 |
+
|
4239 |
+
# @ all-in-one-wp-security-and-firewall
|
4240 |
+
#: classes/wp-security-captcha.php:93
|
4241 |
+
msgid "three"
|
4242 |
+
msgstr "drie"
|
4243 |
+
|
4244 |
+
# @ all-in-one-wp-security-and-firewall
|
4245 |
+
#: classes/wp-security-captcha.php:94
|
4246 |
+
msgid "four"
|
4247 |
+
msgstr "vier"
|
4248 |
+
|
4249 |
+
# @ all-in-one-wp-security-and-firewall
|
4250 |
+
#: classes/wp-security-captcha.php:95
|
4251 |
+
msgid "five"
|
4252 |
+
msgstr "vijf"
|
4253 |
+
|
4254 |
+
# @ all-in-one-wp-security-and-firewall
|
4255 |
+
#: classes/wp-security-captcha.php:96
|
4256 |
+
msgid "six"
|
4257 |
+
msgstr "zes"
|
4258 |
+
|
4259 |
+
# @ all-in-one-wp-security-and-firewall
|
4260 |
+
#: classes/wp-security-captcha.php:97
|
4261 |
+
msgid "seven"
|
4262 |
+
msgstr "zeven"
|
4263 |
+
|
4264 |
+
# @ all-in-one-wp-security-and-firewall
|
4265 |
+
#: classes/wp-security-captcha.php:98
|
4266 |
+
msgid "eight"
|
4267 |
+
msgstr "acht"
|
4268 |
+
|
4269 |
+
# @ all-in-one-wp-security-and-firewall
|
4270 |
+
#: classes/wp-security-captcha.php:99
|
4271 |
+
msgid "nine"
|
4272 |
+
msgstr "negen"
|
4273 |
+
|
4274 |
+
# @ all-in-one-wp-security-and-firewall
|
4275 |
+
#: classes/wp-security-captcha.php:100
|
4276 |
+
msgid "ten"
|
4277 |
+
msgstr "tien"
|
4278 |
+
|
4279 |
+
# @ all-in-one-wp-security-and-firewall
|
4280 |
+
#: classes/wp-security-captcha.php:101
|
4281 |
+
msgid "eleven"
|
4282 |
+
msgstr "elf"
|
4283 |
+
|
4284 |
+
# @ all-in-one-wp-security-and-firewall
|
4285 |
+
#: classes/wp-security-captcha.php:102
|
4286 |
+
msgid "twelve"
|
4287 |
+
msgstr "twaalf"
|
4288 |
+
|
4289 |
+
# @ all-in-one-wp-security-and-firewall
|
4290 |
+
#: classes/wp-security-captcha.php:103
|
4291 |
+
msgid "thirteen"
|
4292 |
+
msgstr "dertien"
|
4293 |
+
|
4294 |
+
# @ all-in-one-wp-security-and-firewall
|
4295 |
+
#: classes/wp-security-captcha.php:104
|
4296 |
+
msgid "fourteen"
|
4297 |
+
msgstr "veertien"
|
4298 |
+
|
4299 |
+
# @ all-in-one-wp-security-and-firewall
|
4300 |
+
#: classes/wp-security-captcha.php:105
|
4301 |
+
msgid "fifteen"
|
4302 |
+
msgstr "vijftien"
|
4303 |
+
|
4304 |
+
# @ all-in-one-wp-security-and-firewall
|
4305 |
+
#: classes/wp-security-captcha.php:106
|
4306 |
+
msgid "sixteen"
|
4307 |
+
msgstr "zestien"
|
4308 |
+
|
4309 |
+
# @ all-in-one-wp-security-and-firewall
|
4310 |
+
#: classes/wp-security-captcha.php:107
|
4311 |
+
msgid "seventeen"
|
4312 |
+
msgstr "zeventien"
|
4313 |
+
|
4314 |
+
# @ all-in-one-wp-security-and-firewall
|
4315 |
+
#: classes/wp-security-captcha.php:108
|
4316 |
+
msgid "eighteen"
|
4317 |
+
msgstr "achttien"
|
4318 |
+
|
4319 |
+
# @ all-in-one-wp-security-and-firewall
|
4320 |
+
#: classes/wp-security-captcha.php:109
|
4321 |
+
msgid "nineteen"
|
4322 |
+
msgstr "negentien"
|
4323 |
+
|
4324 |
+
# @ all-in-one-wp-security-and-firewall
|
4325 |
+
#: classes/wp-security-captcha.php:110
|
4326 |
+
msgid "twenty"
|
4327 |
+
msgstr "twintig"
|
4328 |
+
|
4329 |
+
# @ all-in-one-wp-security-and-firewall
|
4330 |
+
#: classes/wp-security-file-scan.php:62
|
4331 |
+
msgid "All In One WP Security - File change detected!"
|
4332 |
+
msgstr "All In One WP Security - Bestandsverandering gedetecteerd!"
|
4333 |
+
|
4334 |
+
# @ all-in-one-wp-security-and-firewall
|
4335 |
+
#: classes/wp-security-file-scan.php:64
|
4336 |
+
msgid "A file change was detected on your system for site URL"
|
4337 |
+
msgstr "Er is een bestandswijziging op uw systeem gedetecteerd voor de site-URL"
|
4338 |
+
|
4339 |
+
# @ all-in-one-wp-security-and-firewall
|
4340 |
+
#: classes/wp-security-file-scan.php:64
|
4341 |
+
msgid ". Scan was generated on"
|
4342 |
+
msgstr ". Scan is gegenereerd op"
|
4343 |
+
|
4344 |
+
# @ all-in-one-wp-security-and-firewall
|
4345 |
+
#: classes/wp-security-file-scan.php:65
|
4346 |
+
msgid "Login to your site to view the scan details."
|
4347 |
+
msgstr "Log in op uw site om de scandetails te bekijken."
|
4348 |
+
|
4349 |
+
# @ all-in-one-wp-security-and-firewall
|
4350 |
+
#: classes/wp-security-general-init-tasks.php:214
|
4351 |
+
msgid "Please enter an answer in the CAPTCHA field."
|
4352 |
+
msgstr "Voer een antwoord in het CAPTCHA-veld in."
|
4353 |
+
|
4354 |
+
# @ all-in-one-wp-security-and-firewall
|
4355 |
+
#: classes/wp-security-general-init-tasks.php:224
|
4356 |
+
msgid "Error: You entered an incorrect CAPTCHA answer. Please go back and try again."
|
4357 |
+
msgstr "Fout: u hebt een onjuist CAPTCHA-antwoord ingevoerd. Ga alsjeblieft terug en probeer het opnieuw."
|
4358 |
+
|
4359 |
+
# @ all-in-one-wp-security-and-firewall
|
4360 |
+
#: classes/wp-security-general-init-tasks.php:252
|
4361 |
+
#: classes/wp-security-user-login.php:70 classes/wp-security-user-login.php:73
|
4362 |
+
#: classes/wp-security-user-registration.php:59
|
4363 |
+
msgid "<strong>ERROR</strong>: Your answer was incorrect - please try again."
|
4364 |
+
msgstr "<strong>FOUT</ strong>: Uw antwoord was onjuist - probeer het opnieuw."
|
4365 |
+
|
4366 |
+
# @ all-in-one-wp-security-and-firewall
|
4367 |
+
#: classes/wp-security-process-renamed-login-page.php:68
|
4368 |
+
msgid "Please log in to access the WordPress admin area."
|
4369 |
+
msgstr "Meld u aan om toegang te krijgen tot het WordPress-beheergebied."
|
4370 |
+
|
4371 |
+
# @ all-in-one-wp-security-and-firewall
|
4372 |
+
#: classes/wp-security-user-login.php:43
|
4373 |
+
msgid ""
|
4374 |
+
"<strong>ERROR</strong>: Login failed because your IP address has been blocked.\n"
|
4375 |
+
" Please contact the administrator."
|
4376 |
+
msgstr ""
|
4377 |
+
"<strong>FOUT</ strong>: Aanmelden mislukt omdat uw IP-adres is geblokkeerd.\n"
|
4378 |
+
" Neem contact op met de beheerder."
|
4379 |
+
|
4380 |
+
# @ all-in-one-wp-security-and-firewall
|
4381 |
+
#: classes/wp-security-user-login.php:83
|
4382 |
+
msgid "<strong>ERROR</strong>: The username field is empty."
|
4383 |
+
msgstr "<strong>FOUT</ strong>: Het veld gebruikersnaam is leeg."
|
4384 |
+
|
4385 |
+
# @ all-in-one-wp-security-and-firewall
|
4386 |
+
#: classes/wp-security-user-login.php:87
|
4387 |
+
msgid "<strong>ERROR</strong>: The password field is empty."
|
4388 |
+
msgstr "<strong>FOUT</ strong>: het wachtwoordveld is leeg."
|
4389 |
+
|
4390 |
+
# @ all-in-one-wp-security-and-firewall
|
4391 |
+
#: classes/wp-security-user-login.php:107
|
4392 |
+
#: classes/wp-security-user-login.php:133
|
4393 |
+
msgid "<strong>ERROR</strong>: Invalid login credentials."
|
4394 |
+
msgstr "<strong>FOUT</ strong>: Ongeldige inloggegevens."
|
4395 |
+
|
4396 |
+
# @ all-in-one-wp-security-and-firewall
|
4397 |
+
#: classes/wp-security-user-login.php:110
|
4398 |
+
msgid "<strong>ERROR</strong>: Invalid username."
|
4399 |
+
msgstr "<strong>FOUT</ strong>: Ongeldige gebruikersnaam."
|
4400 |
+
|
4401 |
+
# @ all-in-one-wp-security-and-firewall
|
4402 |
+
#: classes/wp-security-user-login.php:136
|
4403 |
+
#, php-format
|
4404 |
+
msgid "<strong>ERROR</strong>: Incorrect password. <a href=\"%s\" title=\"Password Lost and Found\">Lost your password</a>?"
|
4405 |
+
msgstr "<strong>FOUT</ strong>: Onjuist wachtwoord. <a href=\"%s\" title=\"Password lost and found\"> Wachtwoord vergeten </a>?"
|
4406 |
+
|
4407 |
+
# @ all-in-one-wp-security-and-firewall
|
4408 |
+
#: classes/wp-security-user-login.php:147
|
4409 |
+
msgid "<strong>ACCOUNT PENDING</strong>: Your account is currently not active. An administrator needs to activate your account before you can login."
|
4410 |
+
msgstr "<strong>ACCOUNT IN BEHANDELING</ strong>: uw account is momenteel niet actief. Een beheerder moet uw account activeren voordat u kunt inloggen."
|
4411 |
+
|
4412 |
+
# @ all-in-one-wp-security-and-firewall
|
4413 |
+
#: classes/wp-security-user-login.php:270
|
4414 |
+
msgid "Site Lockout Notification"
|
4415 |
+
msgstr "Kennisgeving van sitevergrendeling"
|
4416 |
+
|
4417 |
+
# @ all-in-one-wp-security-and-firewall
|
4418 |
+
#: classes/wp-security-user-login.php:271
|
4419 |
+
msgid "A lockdown event has occurred due to too many failed login attempts or invalid username:"
|
4420 |
+
msgstr "Er is een vergrendeling opgetreden vanwege te veel mislukte aanmeldpogingen of ongeldige gebruikersnaam:"
|
4421 |
+
|
4422 |
+
# @ all-in-one-wp-security-and-firewall
|
4423 |
+
#: classes/wp-security-user-login.php:272
|
4424 |
+
msgid "Username: Unknown"
|
4425 |
+
msgstr "Gebruikersnaam: onbekend"
|
4426 |
+
|
4427 |
+
# @ all-in-one-wp-security-and-firewall
|
4428 |
+
#: classes/wp-security-user-login.php:273
|
4429 |
+
msgid "IP Address: "
|
4430 |
+
msgstr "IP-adres: "
|
4431 |
+
|
4432 |
+
# @ all-in-one-wp-security-and-firewall
|
4433 |
+
#: classes/wp-security-user-login.php:274
|
4434 |
+
msgid "IP Range: .*"
|
4435 |
+
msgstr "IP-bereik: . *"
|
4436 |
+
|
4437 |
+
# @ all-in-one-wp-security-and-firewall
|
4438 |
+
#: classes/wp-security-user-login.php:275
|
4439 |
+
msgid "Log into your site's WordPress administration panel to see the duration of the lockout or to unlock the user."
|
4440 |
+
msgstr "Log in op het WordPress administratiepaneel van uw site om de duur van de blokkering te bekijken of om de gebruiker te ontgrendelen."
|
4441 |
+
|
4442 |
+
# @ all-in-one-wp-security-and-firewall
|
4443 |
+
#: classes/wp-security-user-login.php:337
|
4444 |
+
msgid "Unlock Request Notification"
|
4445 |
+
msgstr "Ontgrendel aanvraagmelding"
|
4446 |
+
|
4447 |
+
# @ all-in-one-wp-security-and-firewall
|
4448 |
+
#: classes/wp-security-user-login.php:338
|
4449 |
+
msgid "You have requested for the account with email address to be unlocked. Please click the link below to unlock your account:"
|
4450 |
+
msgstr "U hebt gevraagd om het account met het e-mailadres te ontgrendelen. Klik op de onderstaande link om uw account te ontgrendelen:"
|
4451 |
+
|
4452 |
+
# @ all-in-one-wp-security-and-firewall
|
4453 |
+
#: classes/wp-security-user-login.php:339
|
4454 |
+
msgid "Unlock link: "
|
4455 |
+
msgstr "Ontgrendel link: "
|
4456 |
+
|
4457 |
+
# @ all-in-one-wp-security-and-firewall
|
4458 |
+
#: classes/wp-security-user-login.php:340
|
4459 |
+
msgid "After clicking the above link you will be able to login to the WordPress administration panel."
|
4460 |
+
msgstr "Nadat u op de bovenstaande link hebt geklikt, kunt u inloggen op het WordPress-beheerpaneel."
|
4461 |
+
|
4462 |
+
# @ all-in-one-wp-security-and-firewall
|
4463 |
+
#: classes/wp-security-user-login.php:504
|
4464 |
+
#, php-format
|
4465 |
+
msgid "Your session has expired because it has been over %d minutes since your last login."
|
4466 |
+
msgstr "Uw sessie is verlopen omdat het meer dan %d minuten geleden is dat u voor het laatst bent ingelogd."
|
4467 |
+
|
4468 |
+
# @ all-in-one-wp-security-and-firewall
|
4469 |
+
#: classes/wp-security-user-login.php:505
|
4470 |
+
#: classes/wp-security-user-login.php:509
|
4471 |
+
msgid "Please log back in to continue."
|
4472 |
+
msgstr "Log opnieuw in om verder te gaan."
|
4473 |
+
|
4474 |
+
# @ all-in-one-wp-security-and-firewall
|
4475 |
+
#: classes/wp-security-user-login.php:508
|
4476 |
+
msgid "You were logged out because you just changed the \"admin\" username."
|
4477 |
+
msgstr "Je bent uitgelogd omdat je zojuist de gebruikersnaam voor \"admin\" hebt gewijzigd."
|
4478 |
+
|
4479 |
+
# @ all-in-one-wp-security-and-firewall
|
4480 |
+
#: classes/wp-security-user-login.php:534
|
4481 |
+
msgid "Request Unlock"
|
4482 |
+
msgstr "Verzoek om ontgrendeling"
|
4483 |
+
|
4484 |
+
# @ all-in-one-wp-security-and-firewall
|
4485 |
+
#: classes/wp-security-utility-ip-address.php:82
|
4486 |
+
#: classes/wp-security-utility-ip-address.php:101
|
4487 |
+
#: classes/wp-security-utility-ip-address.php:116
|
4488 |
+
#: classes/wp-security-utility-ip-address.php:131
|
4489 |
+
msgid " is not a valid ip address format."
|
4490 |
+
msgstr " is geen geldig IP-adresformaat."
|
4491 |
+
|
4492 |
+
# @ all-in-one-wp-security-and-firewall
|
4493 |
+
#: classes/wp-security-utility-ip-address.php:139
|
4494 |
+
msgid "You cannot ban your own IP address: "
|
4495 |
+
msgstr "U kunt uw eigen IP-adres niet verbieden: "
|
4496 |
+
|
4497 |
+
# @ all-in-one-wp-security-and-firewall
|
4498 |
+
#: classes/wp-security-utility.php:151
|
4499 |
+
msgid "This feature can only be configured by the \"superadmin\" on the main site."
|
4500 |
+
msgstr "Deze functie kan alleen worden geconfigureerd door het \"superadmin\" op de hoofdsite."
|
4501 |
+
|
4502 |
+
# @ default
|
4503 |
+
#: other-includes/wp-security-rename-login-feature.php:98
|
4504 |
+
#: other-includes/wp-security-unlock-request.php:13
|
4505 |
+
msgid "http://wordpress.org/"
|
4506 |
+
msgstr "http://wordpress.org/"
|
4507 |
+
|
4508 |
+
# @ default
|
4509 |
+
#: other-includes/wp-security-rename-login-feature.php:99
|
4510 |
+
#: other-includes/wp-security-unlock-request.php:14
|
4511 |
+
msgid "Powered by WordPress"
|
4512 |
+
msgstr "Powered by WordPress"
|
4513 |
+
|
4514 |
+
# @ default
|
4515 |
+
#: other-includes/wp-security-rename-login-feature.php:215
|
4516 |
+
msgid "Are you lost?"
|
4517 |
+
msgstr "Ben je verloren?"
|
4518 |
+
|
4519 |
+
# @ default
|
4520 |
+
#: other-includes/wp-security-rename-login-feature.php:215
|
4521 |
+
#, php-format
|
4522 |
+
msgid "← Back to %s"
|
4523 |
+
msgstr "↞ Terug naar %s"
|
4524 |
+
|
4525 |
+
# @ default
|
4526 |
+
#: other-includes/wp-security-rename-login-feature.php:273
|
4527 |
+
msgid "<strong>ERROR</strong>: Enter a username or e-mail address."
|
4528 |
+
msgstr "<strong>FOUT</ strong>: Voer een gebruikersnaam of e-mailadres in."
|
4529 |
+
|
4530 |
+
# @ default
|
4531 |
+
#: other-includes/wp-security-rename-login-feature.php:277
|
4532 |
+
msgid "<strong>ERROR</strong>: There is no user registered with that email address."
|
4533 |
+
msgstr "<strong>FOUT</ strong>: Er is geen gebruiker geregistreerd met dat e-mailadres."
|
4534 |
+
|
4535 |
+
# @ default
|
4536 |
+
#: other-includes/wp-security-rename-login-feature.php:294
|
4537 |
+
msgid "<strong>ERROR</strong>: Invalid username or e-mail."
|
4538 |
+
msgstr "<strong>FOUT</ strong>: Ongeldige gebruikersnaam of e-mail."
|
4539 |
+
|
4540 |
+
# @ default
|
4541 |
+
#: other-includes/wp-security-rename-login-feature.php:331
|
4542 |
+
msgid "Password reset is not allowed for this user"
|
4543 |
+
msgstr "Wachtwoord resetten is niet toegestaan voor deze gebruiker"
|
4544 |
+
|
4545 |
+
# @ default
|
4546 |
+
#: other-includes/wp-security-rename-login-feature.php:356
|
4547 |
+
msgid "Someone requested that the password be reset for the following account:"
|
4548 |
+
msgstr "Iemand heeft verzocht om het wachtwoord opnieuw in te stellen voor het volgende account:"
|
4549 |
+
|
4550 |
+
# @ default
|
4551 |
+
#: other-includes/wp-security-rename-login-feature.php:358
|
4552 |
+
#, php-format
|
4553 |
+
msgid "Username: %s"
|
4554 |
+
msgstr "Gebruikersnaam: %s"
|
4555 |
+
|
4556 |
+
# @ default
|
4557 |
+
#: other-includes/wp-security-rename-login-feature.php:359
|
4558 |
+
msgid "If this was a mistake, just ignore this email and nothing will happen."
|
4559 |
+
msgstr "Als dit een vergissing was, negeer deze e-mail dan en er gebeurt niets."
|
4560 |
+
|
4561 |
+
# @ default
|
4562 |
+
#: other-includes/wp-security-rename-login-feature.php:360
|
4563 |
+
msgid "To reset your password, visit the following address:"
|
4564 |
+
msgstr "Ga naar het volgende adres om uw wachtwoord opnieuw in te stellen:"
|
4565 |
+
|
4566 |
+
# @ default
|
4567 |
+
#: other-includes/wp-security-rename-login-feature.php:370
|
4568 |
+
#, php-format
|
4569 |
+
msgid "[%s] Password Reset"
|
4570 |
+
msgstr "[%s] Wachtwoord resetten"
|
4571 |
+
|
4572 |
+
# @ default
|
4573 |
+
#: other-includes/wp-security-rename-login-feature.php:391
|
4574 |
+
msgid "The e-mail could not be sent."
|
4575 |
+
msgstr "De e-mail kan niet worden verzonden."
|
4576 |
+
|
4577 |
+
# @ default
|
4578 |
+
#: other-includes/wp-security-rename-login-feature.php:391
|
4579 |
+
msgid "Possible reason: your host may have disabled the mail() function."
|
4580 |
+
msgstr "Mogelijke reden: uw gastheer kan de functie mail() hebben uitgeschakeld."
|
4581 |
+
|
4582 |
+
# @ default
|
4583 |
+
#: other-includes/wp-security-rename-login-feature.php:496
|
4584 |
+
msgid "Sorry, that key does not appear to be valid."
|
4585 |
+
msgstr "Sorry, die sleutel lijkt niet geldig te zijn."
|
4586 |
+
|
4587 |
+
# @ default
|
4588 |
+
#: other-includes/wp-security-rename-login-feature.php:498
|
4589 |
+
msgid "Sorry, that key has expired. Please try again."
|
4590 |
+
msgstr "Sorry, die sleutel is verlopen. Probeer het opnieuw."
|
4591 |
+
|
4592 |
+
# @ default
|
4593 |
+
#: other-includes/wp-security-rename-login-feature.php:518
|
4594 |
+
msgid "Lost Password"
|
4595 |
+
msgstr "Wachtwoord vergeten"
|
4596 |
+
|
4597 |
+
# @ default
|
4598 |
+
#: other-includes/wp-security-rename-login-feature.php:518
|
4599 |
+
msgid "Please enter your username or email address. You will receive a link to create a new password via email."
|
4600 |
+
msgstr "Voer uw gebruikersnaam of e-mailadres in. U ontvangt een link om via e-mail een nieuw wachtwoord aan te maken."
|
4601 |
+
|
4602 |
+
# @ default
|
4603 |
+
#: other-includes/wp-security-rename-login-feature.php:526
|
4604 |
+
msgid "Username or E-mail:"
|
4605 |
+
msgstr "Gebruikersnaam of emailadres:"
|
4606 |
+
|
4607 |
+
# @ default
|
4608 |
+
#: other-includes/wp-security-rename-login-feature.php:537
|
4609 |
+
msgid "Get New Password"
|
4610 |
+
msgstr "Een nieuw wachtwoord verkrijgen"
|
4611 |
+
|
4612 |
+
# @ default
|
4613 |
+
#: other-includes/wp-security-rename-login-feature.php:541
|
4614 |
+
#: other-includes/wp-security-rename-login-feature.php:590
|
4615 |
+
#: other-includes/wp-security-rename-login-feature.php:621
|
4616 |
+
#: other-includes/wp-security-rename-login-feature.php:703
|
4617 |
+
msgid "Log in"
|
4618 |
+
msgstr "Inloggen"
|
4619 |
+
|
4620 |
+
# @ default
|
4621 |
+
#: other-includes/wp-security-rename-login-feature.php:544
|
4622 |
+
#: other-includes/wp-security-rename-login-feature.php:624
|
4623 |
+
#: other-includes/wp-security-rename-login-feature.php:699
|
4624 |
+
#: other-includes/wp-security-rename-login-feature.php:875
|
4625 |
+
msgid "Register"
|
4626 |
+
msgstr "Registreren"
|
4627 |
+
|
4628 |
+
# @ default
|
4629 |
+
#: other-includes/wp-security-rename-login-feature.php:576
|
4630 |
+
msgid "The passwords do not match."
|
4631 |
+
msgstr "De wachtwoorden komen niet overeen."
|
4632 |
+
|
4633 |
+
# @ default
|
4634 |
+
#: other-includes/wp-security-rename-login-feature.php:590
|
4635 |
+
msgid "Password Reset"
|
4636 |
+
msgstr "Wachtwoord resetten"
|
4637 |
+
|
4638 |
+
# @ default
|
4639 |
+
#: other-includes/wp-security-rename-login-feature.php:590
|
4640 |
+
msgid "Your password has been reset."
|
4641 |
+
msgstr "Uw wachtwoord is opnieuw ingesteld."
|
4642 |
+
|
4643 |
+
# @ default
|
4644 |
+
#: other-includes/wp-security-rename-login-feature.php:598
|
4645 |
+
#: other-includes/wp-security-rename-login-feature.php:617
|
4646 |
+
msgid "Reset Password"
|
4647 |
+
msgstr "Wachtwoord opnieuw instellen"
|
4648 |
+
|
4649 |
+
# @ default
|
4650 |
+
#: other-includes/wp-security-rename-login-feature.php:598
|
4651 |
+
msgid "Enter your new password below."
|
4652 |
+
msgstr "Voer je nieuw wachtwoord hieronder in."
|
4653 |
+
|
4654 |
+
# @ default
|
4655 |
+
#: other-includes/wp-security-rename-login-feature.php:605
|
4656 |
+
msgid "New password"
|
4657 |
+
msgstr "Nieuw wachtwoord"
|
4658 |
+
|
4659 |
+
# @ default
|
4660 |
+
#: other-includes/wp-security-rename-login-feature.php:609
|
4661 |
+
msgid "Confirm new password"
|
4662 |
+
msgstr "Bevestig het nieuwe wachtwoord"
|
4663 |
+
|
4664 |
+
# @ default
|
4665 |
+
#: other-includes/wp-security-rename-login-feature.php:613
|
4666 |
+
msgid "Strength indicator"
|
4667 |
+
msgstr "Sterkte indicator"
|
4668 |
+
|
4669 |
+
# @ default
|
4670 |
+
#: other-includes/wp-security-rename-login-feature.php:614
|
4671 |
+
msgid "Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! \" ? $ % ^ & )."
|
4672 |
+
msgstr "Tip: het wachtwoord moet uit minimaal zeven tekens bestaan. Om het sterker te maken, gebruik hoofdletters en kleine letters, cijfers en symbolen zoals! \"? $ % ^ &)."
|
4673 |
+
|
4674 |
+
# @ default
|
4675 |
+
#: other-includes/wp-security-rename-login-feature.php:676
|
4676 |
+
msgid "Registration Form"
|
4677 |
+
msgstr "Registratieformulier"
|
4678 |
+
|
4679 |
+
# @ default
|
4680 |
+
#: other-includes/wp-security-rename-login-feature.php:676
|
4681 |
+
msgid "Register For This Site"
|
4682 |
+
msgstr "Registreer voor deze website"
|
4683 |
+
|
4684 |
+
# @ default
|
4685 |
+
#: other-includes/wp-security-rename-login-feature.php:681
|
4686 |
+
#: other-includes/wp-security-rename-login-feature.php:841
|
4687 |
+
msgid "Username"
|
4688 |
+
msgstr "Gebruikersnaam"
|
4689 |
+
|
4690 |
+
# @ default
|
4691 |
+
#: other-includes/wp-security-rename-login-feature.php:685
|
4692 |
+
msgid "E-mail"
|
4693 |
+
msgstr "E-mail"
|
4694 |
+
|
4695 |
+
# @ default
|
4696 |
+
#: other-includes/wp-security-rename-login-feature.php:696
|
4697 |
+
msgid "A password will be e-mailed to you."
|
4698 |
+
msgstr "Een wachtwoord wordt naar uw mailadres verzonden."
|
4699 |
+
|
4700 |
+
# @ default
|
4701 |
+
#: other-includes/wp-security-rename-login-feature.php:704
|
4702 |
+
#: other-includes/wp-security-rename-login-feature.php:880
|
4703 |
+
msgid "Password Lost and Found"
|
4704 |
+
msgstr "Wachtwoord verloren en gevonden"
|
4705 |
+
|
4706 |
+
# @ default
|
4707 |
+
#: other-includes/wp-security-rename-login-feature.php:704
|
4708 |
+
#: other-includes/wp-security-rename-login-feature.php:880
|
4709 |
+
msgid "Lost your password?"
|
4710 |
+
msgstr "Wachtwoord vergeten?"
|
4711 |
+
|
4712 |
+
# @ default
|
4713 |
+
#: other-includes/wp-security-rename-login-feature.php:748
|
4714 |
+
msgid "<strong>ERROR</strong>: Cookies are blocked or not supported by your browser. You must <a href='http://www.google.com/cookies.html'>enable cookies</a> to use WordPress."
|
4715 |
+
msgstr "<strong>FOUT</ strong>: cookies worden geblokkeerd of worden niet ondersteund door uw browser. U moet <a href='http://www.google.com/cookies.html'>cookies inschakelen </a> om WordPress te gebruiken."
|
4716 |
+
|
4717 |
+
# @ default
|
4718 |
+
#: other-includes/wp-security-rename-login-feature.php:766
|
4719 |
+
msgid "You have logged in successfully."
|
4720 |
+
msgstr "Je bent succesvol ingelogd."
|
4721 |
+
|
4722 |
+
# @ default
|
4723 |
+
#: other-includes/wp-security-rename-login-feature.php:800
|
4724 |
+
msgid "Session expired. Please log in again. You will not move away from this page."
|
4725 |
+
msgstr "Sessie verlopen. Log alsjeblieft nogmaals in. Je gaat niet weg van deze pagina."
|
4726 |
+
|
4727 |
+
# @ default
|
4728 |
+
#: other-includes/wp-security-rename-login-feature.php:804
|
4729 |
+
msgid "You are now logged out."
|
4730 |
+
msgstr "Je bent nu uitgelogd."
|
4731 |
+
|
4732 |
+
# @ default
|
4733 |
+
#: other-includes/wp-security-rename-login-feature.php:806
|
4734 |
+
msgid "User registration is currently not allowed."
|
4735 |
+
msgstr "Gebruikersregistratie is momenteel niet toegestaan."
|
4736 |
+
|
4737 |
+
# @ default
|
4738 |
+
#: other-includes/wp-security-rename-login-feature.php:808
|
4739 |
+
msgid "Check your e-mail for the confirmation link."
|
4740 |
+
msgstr "Bekijk je e-mail voor de bevestigingslink."
|
4741 |
+
|
4742 |
+
# @ default
|
4743 |
+
#: other-includes/wp-security-rename-login-feature.php:810
|
4744 |
+
msgid "Check your e-mail for your new password."
|
4745 |
+
msgstr "Controleer uw e-mail voor uw nieuwe wachtwoord."
|
4746 |
+
|
4747 |
+
# @ default
|
4748 |
+
#: other-includes/wp-security-rename-login-feature.php:812
|
4749 |
+
msgid "Registration complete. Please check your e-mail."
|
4750 |
+
msgstr "Registratie compleet. Controleer uw e-mail."
|
4751 |
+
|
4752 |
+
# @ default
|
4753 |
+
#: other-includes/wp-security-rename-login-feature.php:814
|
4754 |
+
msgid "<strong>You have successfully updated WordPress!</strong> Please log back in to experience the awesomeness."
|
4755 |
+
msgstr "<strong>U heeft WordPress met succes geüpdatet!</ strong> log opnieuw in om de ontzagwekkende ervaring te ervaren."
|
4756 |
+
|
4757 |
+
# @ default
|
4758 |
+
#: other-includes/wp-security-rename-login-feature.php:831
|
4759 |
+
#: other-includes/wp-security-rename-login-feature.php:858
|
4760 |
+
msgid "Log In"
|
4761 |
+
msgstr "Inloggen"
|
4762 |
+
|
4763 |
+
# @ default
|
4764 |
+
#: other-includes/wp-security-rename-login-feature.php:856
|
4765 |
+
msgid "Remember Me"
|
4766 |
+
msgstr "Onthoud mij"
|
4767 |
+
|
4768 |
+
# @ all-in-one-wp-security-and-firewall
|
4769 |
+
#: other-includes/wp-security-unlock-request.php:48
|
4770 |
+
msgid "Please enter a valid email address"
|
4771 |
+
msgstr "Vul een geldig e-mailadres in"
|
4772 |
+
|
4773 |
+
# @ all-in-one-wp-security-and-firewall
|
4774 |
+
#: other-includes/wp-security-unlock-request.php:59
|
4775 |
+
msgid "User account not found!"
|
4776 |
+
msgstr "Gebruikersaccount niet gevonden!"
|
4777 |
+
|
4778 |
+
# @ all-in-one-wp-security-and-firewall
|
4779 |
+
#: other-includes/wp-security-unlock-request.php:70
|
4780 |
+
msgid "Error: No locked entry was found in the DB with your IP address range!"
|
4781 |
+
msgstr "Fout: er is geen vergrendelde invoer gevonden in de database met uw IP-adresbereik!"
|
4782 |
+
|
4783 |
+
# @ all-in-one-wp-security-and-firewall
|
4784 |
+
#: other-includes/wp-security-unlock-request.php:98
|
4785 |
+
msgid "Email Address"
|
4786 |
+
msgstr "E-mailadres"
|
{tags/4.0.8/languages → languages}/all-in-one-wp-security-and-firewall-pt_BR.mo
RENAMED
File without changes
|
{tags/4.0.8/languages → languages}/all-in-one-wp-security-and-firewall-pt_BR.po
RENAMED
File without changes
|
{tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-ru_RU.mo
RENAMED
File without changes
|
{tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-ru_RU.po
RENAMED
File without changes
|
{tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-sv_SE.mo
RENAMED
File without changes
|
{tags/4.0.1/languages → languages}/all-in-one-wp-security-and-firewall-sv_SE.po
RENAMED
File without changes
|
{tags/4.2.8/languages → languages}/all-in-one-wp-security-and-firewall-zh_CN.mo
RENAMED
File without changes
|
{tags/4.2.8/languages → languages}/all-in-one-wp-security-and-firewall-zh_CN.po
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/languages → languages}/all-in-one-wp-security-and-firewall.pot
RENAMED
File without changes
|
{tags/2.0/lib → languages}/index.html
RENAMED
File without changes
|
{tags/2.0/logs → lib}/index.html
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/LICENSE
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/handler.template.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/npdata.ser
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.ae.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.aero.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.ag.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.asia.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.at.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.au.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.be.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.biz.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.br.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.ca.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.cat.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.ch.php
RENAMED
File without changes
|
{tags/4.3.1/lib → lib}/whois/whois.cl.php
RENAMED
File without changes
|
{tags/4.3.1/lib → lib}/whois/whois.client.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.cn.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.co.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.co.za.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.coop.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.cz.php
RENAMED
File without changes
|
{tags/4.3.1/lib → lib}/whois/whois.de.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.edu.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.eu.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.fi.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.fj.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.fm.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.fr.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.afternic.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.alldomains.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.ascio.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.assorted.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.corporatedomains.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.directnic.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.domaindiscover.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.domainpeople.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.dotster.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.dreamhost.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.enom.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.fabulous.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.fastdomain.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.gandi.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.genericb.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.godaddy.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.iana.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.interdomain.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.itsyourdomain.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.joker.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.markmonitor.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.melbourneit.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.moniker.php
RENAMED
File without changes
|
{tags/4.3.1/lib → lib}/whois/whois.gtld.namejuice.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.nameking.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.names4ever.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.namevault.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.networksolutions.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.nicco.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.nicline.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.onlinenic.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.opensrs.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.ovh.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.psiusa.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.publicdomainregistry.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.register.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.rrpproxy.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.schlund.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.srsplus.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.tmagnic.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.tvcorp.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.gtld.wildwestdomains.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.hu.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.icon.png
RENAMED
File without changes
|
{tags/4.2.8/lib → lib}/whois/whois.idna.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.ie.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.in.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.info.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.int.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.ip.afrinic.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.ip.apnic.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.ip.arin.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.ip.krnic.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.ip.lacnic.php
RENAMED
File without changes
|
{tags/4.3.1/lib → lib}/whois/whois.ip.lib.php
RENAMED
File without changes
|
{tags/4.3.1/lib → lib}/whois/whois.ip.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.ip.ripe.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.ir.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.is.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.it.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.jp.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.lt.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.lu.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.ly.php
RENAMED
File without changes
|
{tags/4.2.8/lib → lib}/whois/whois.main.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.me.php
RENAMED
File without changes
|
{tags/4.3.1/lib → lib}/whois/whois.mobi.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.museum.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.mx.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.name.php
RENAMED
File without changes
|
{tags/4.3.1/lib → lib}/whois/whois.nl.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.nu.php
RENAMED
File without changes
|
{tags/4.3.1/lib → lib}/whois/whois.nz.php
RENAMED
File without changes
|
{tags/4.3.1/lib → lib}/whois/whois.org.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.org.za.php
RENAMED
File without changes
|
{tags/4.3.1/lib → lib}/whois/whois.parser.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.pl.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.pro.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.pt.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.ro.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.ru.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.rwhois.php
RENAMED
File without changes
|
{tags/4.3.1/lib → lib}/whois/whois.sc.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.se.php
RENAMED
File without changes
|
{tags/4.3.1/lib → lib}/whois/whois.servers.php
RENAMED
File without changes
|
{tags/4.3.1/lib → lib}/whois/whois.si.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.su.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.tel.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.travel.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.uk.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.us.php
RENAMED
File without changes
|
{tags/4.3.1/lib → lib}/whois/whois.utils.php
RENAMED
File without changes
|
{tags/4.3.1/lib → lib}/whois/whois.ve.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.ws.php
RENAMED
File without changes
|
{tags/1.0/lib → lib}/whois/whois.zanet.php
RENAMED
File without changes
|
tags/1.0/license.txt → license.txt
RENAMED
File without changes
|
{tags/4.2.8/logs → logs}/.htaccess
RENAMED
File without changes
|
{tags/2.0/other-includes → logs}/index.html
RENAMED
File without changes
|
{tags/1.0/logs → logs}/wp-security-log-cron-job.txt
RENAMED
File without changes
|
{tags/1.0/logs → logs}/wp-security-log.txt
RENAMED
File without changes
|
{tags/2.1.1/admin → other-includes}/index.html
RENAMED
File without changes
|
other-includes/wp-security-rename-login-feature.php
ADDED
@@ -0,0 +1,1136 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WordPress User Page
|
4 |
+
*
|
5 |
+
* Handles authentication, registering, resetting passwords, forgot password,
|
6 |
+
* and other user handling.
|
7 |
+
*
|
8 |
+
* @package WordPress
|
9 |
+
*/
|
10 |
+
|
11 |
+
|
12 |
+
// Redirect to https login if forced to use SSL
|
13 |
+
if ( force_ssl_admin() && ! is_ssl() ) {
|
14 |
+
if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {
|
15 |
+
wp_safe_redirect( set_url_scheme( $_SERVER['REQUEST_URI'], 'https' ) );
|
16 |
+
exit();
|
17 |
+
} else {
|
18 |
+
wp_safe_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
|
19 |
+
exit();
|
20 |
+
}
|
21 |
+
}
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Output the login page header.
|
25 |
+
*
|
26 |
+
* @param string $title Optional. WordPress login Page title to display in the `<title>` element.
|
27 |
+
* Default 'Log In'.
|
28 |
+
* @param string $message Optional. Message to display in header. Default empty.
|
29 |
+
* @param WP_Error $wp_error Optional. The error to pass. Default empty.
|
30 |
+
*/
|
31 |
+
function login_header( $title = 'Log In', $message = '', $wp_error = '' ) {
|
32 |
+
global $error, $interim_login, $action;
|
33 |
+
|
34 |
+
// Don't index any of these forms
|
35 |
+
add_action( 'login_head', 'wp_no_robots' );
|
36 |
+
|
37 |
+
add_action( 'login_head', 'wp_login_viewport_meta' );
|
38 |
+
|
39 |
+
if ( empty($wp_error) )
|
40 |
+
$wp_error = new WP_Error();
|
41 |
+
|
42 |
+
// Shake it!
|
43 |
+
$shake_error_codes = array( 'empty_password', 'empty_email', 'invalid_email', 'invalidcombo', 'empty_username', 'invalid_username', 'incorrect_password' );
|
44 |
+
/**
|
45 |
+
* Filter the error codes array for shaking the login form.
|
46 |
+
*
|
47 |
+
* @since 3.0.0
|
48 |
+
*
|
49 |
+
* @param array $shake_error_codes Error codes that shake the login form.
|
50 |
+
*/
|
51 |
+
$shake_error_codes = apply_filters( 'shake_error_codes', $shake_error_codes );
|
52 |
+
|
53 |
+
if ( $shake_error_codes && $wp_error->get_error_code() && in_array( $wp_error->get_error_code(), $shake_error_codes ) )
|
54 |
+
add_action( 'login_head', 'wp_shake_js', 12 );
|
55 |
+
|
56 |
+
$login_title = get_bloginfo( 'name', 'display' );
|
57 |
+
|
58 |
+
/* translators: Login screen title. 1: Login screen name, 2: Network or site name */
|
59 |
+
$login_title = sprintf( __( '%1$s ‹ %2$s — WordPress' ), $title, $login_title );
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Filters the title tag content for login page.
|
63 |
+
*
|
64 |
+
* @since 4.9.0
|
65 |
+
*
|
66 |
+
* @param string $login_title The page title, with extra context added.
|
67 |
+
* @param string $title The original page title.
|
68 |
+
*/
|
69 |
+
$login_title = apply_filters( 'login_title', $login_title, $title );
|
70 |
+
|
71 |
+
?><!DOCTYPE html>
|
72 |
+
<!--[if IE 8]>
|
73 |
+
<html xmlns="http://www.w3.org/1999/xhtml" class="ie8" <?php language_attributes(); ?>>
|
74 |
+
<![endif]-->
|
75 |
+
<!--[if !(IE 8) ]><!-->
|
76 |
+
<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
|
77 |
+
<!--<![endif]-->
|
78 |
+
<head>
|
79 |
+
<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
|
80 |
+
<title><?php echo $login_title; ?></title>
|
81 |
+
<?php
|
82 |
+
|
83 |
+
wp_enqueue_style( 'login' );
|
84 |
+
|
85 |
+
/*
|
86 |
+
* Remove all stored post data on logging out.
|
87 |
+
* This could be added by add_action('login_head'...) like wp_shake_js(),
|
88 |
+
* but maybe better if it's not removable by plugins
|
89 |
+
*/
|
90 |
+
if ( 'loggedout' == $wp_error->get_error_code() ) {
|
91 |
+
?>
|
92 |
+
<script>if("sessionStorage" in window){try{for(var key in sessionStorage){if(key.indexOf("wp-autosave-")!=-1){sessionStorage.removeItem(key)}}}catch(e){}};</script>
|
93 |
+
<?php
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Enqueue scripts and styles for the login page.
|
98 |
+
*
|
99 |
+
* @since 3.1.0
|
100 |
+
*/
|
101 |
+
do_action( 'login_enqueue_scripts' );
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Fires in the login page header after scripts are enqueued.
|
105 |
+
*
|
106 |
+
* @since 2.1.0
|
107 |
+
*/
|
108 |
+
do_action( 'login_head' );
|
109 |
+
|
110 |
+
if ( is_multisite() ) {
|
111 |
+
$login_header_url = network_home_url();
|
112 |
+
$login_header_title = get_network()->site_name;
|
113 |
+
} else {
|
114 |
+
$login_header_url = __( 'https://wordpress.org/' );
|
115 |
+
$login_header_title = __( 'Powered by WordPress' );
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Filter link URL of the header logo above login form.
|
120 |
+
*
|
121 |
+
* @since 2.1.0
|
122 |
+
*
|
123 |
+
* @param string $login_header_url Login header logo URL.
|
124 |
+
*/
|
125 |
+
$login_header_url = apply_filters( 'login_headerurl', $login_header_url );
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Filter the title attribute of the header logo above login form.
|
129 |
+
*
|
130 |
+
* @since 2.1.0
|
131 |
+
*
|
132 |
+
* @param string $login_header_title Login header logo title attribute.
|
133 |
+
*/
|
134 |
+
$login_header_title = apply_filters( 'login_headertitle', $login_header_title );
|
135 |
+
|
136 |
+
/*
|
137 |
+
* To match the URL/title set above, Multisite sites have the blog name,
|
138 |
+
* while single sites get the header title.
|
139 |
+
*/
|
140 |
+
if ( is_multisite() ) {
|
141 |
+
$login_header_text = get_bloginfo( 'name', 'display' );
|
142 |
+
} else {
|
143 |
+
$login_header_text = $login_header_title;
|
144 |
+
}
|
145 |
+
|
146 |
+
$classes = array( 'login-action-' . $action, 'wp-core-ui' );
|
147 |
+
if ( is_rtl() )
|
148 |
+
$classes[] = 'rtl';
|
149 |
+
if ( $interim_login ) {
|
150 |
+
$classes[] = 'interim-login';
|
151 |
+
?>
|
152 |
+
<style type="text/css">html{background-color: transparent;}</style>
|
153 |
+
<?php
|
154 |
+
|
155 |
+
if ( 'success' === $interim_login )
|
156 |
+
$classes[] = 'interim-login-success';
|
157 |
+
}
|
158 |
+
$classes[] =' locale-' . sanitize_html_class( strtolower( str_replace( '_', '-', get_locale() ) ) );
|
159 |
+
|
160 |
+
/**
|
161 |
+
* Filter the login page body classes.
|
162 |
+
*
|
163 |
+
* @since 3.5.0
|
164 |
+
*
|
165 |
+
* @param array $classes An array of body classes.
|
166 |
+
* @param string $action The action that brought the visitor to the login page.
|
167 |
+
*/
|
168 |
+
$classes = apply_filters( 'login_body_class', $classes, $action );
|
169 |
+
|
170 |
+
?>
|
171 |
+
</head>
|
172 |
+
<body class="login <?php echo esc_attr( implode( ' ', $classes ) ); ?>">
|
173 |
+
<?php
|
174 |
+
/**
|
175 |
+
* Fires in the login page header after the body tag is opened.
|
176 |
+
*
|
177 |
+
* @since 4.6.0
|
178 |
+
*/
|
179 |
+
do_action( 'login_header' );
|
180 |
+
?>
|
181 |
+
<div id="login">
|
182 |
+
<h1><a href="<?php echo esc_url( $login_header_url ); ?>" title="<?php echo esc_attr( $login_header_title ); ?>" tabindex="-1"><?php echo $login_header_text; ?></a></h1>
|
183 |
+
<?php
|
184 |
+
|
185 |
+
unset( $login_header_url, $login_header_title );
|
186 |
+
|
187 |
+
/**
|
188 |
+
* Filter the message to display above the login form.
|
189 |
+
*
|
190 |
+
* @since 2.1.0
|
191 |
+
*
|
192 |
+
* @param string $message Login message text.
|
193 |
+
*/
|
194 |
+
|
195 |
+
$message = apply_filters( 'login_message', $message );
|
196 |
+
if ( !empty( $message ) )
|
197 |
+
echo $message . "\n";
|
198 |
+
|
199 |
+
// In case a plugin uses $error rather than the $wp_errors object
|
200 |
+
if ( !empty( $error ) ) {
|
201 |
+
$wp_error->add('error', $error);
|
202 |
+
unset($error);
|
203 |
+
}
|
204 |
+
|
205 |
+
if ( $wp_error->get_error_code() ) {
|
206 |
+
$errors = '';
|
207 |
+
$messages = '';
|
208 |
+
foreach ( $wp_error->get_error_codes() as $code ) {
|
209 |
+
$severity = $wp_error->get_error_data( $code );
|
210 |
+
foreach ( $wp_error->get_error_messages( $code ) as $error_message ) {
|
211 |
+
if ( 'message' == $severity )
|
212 |
+
$messages .= ' ' . $error_message . "<br />\n";
|
213 |
+
else
|
214 |
+
$errors .= ' ' . $error_message . "<br />\n";
|
215 |
+
}
|
216 |
+
}
|
217 |
+
if ( ! empty( $errors ) ) {
|
218 |
+
/**
|
219 |
+
* Filter the error messages displayed above the login form.
|
220 |
+
*
|
221 |
+
* @since 2.1.0
|
222 |
+
*
|
223 |
+
* @param string $errors Login error message.
|
224 |
+
*/
|
225 |
+
echo '<div id="login_error">' . apply_filters( 'login_errors', $errors ) . "</div>\n";
|
226 |
+
}
|
227 |
+
if ( ! empty( $messages ) ) {
|
228 |
+
/**
|
229 |
+
* Filter instructional messages displayed above the login form.
|
230 |
+
*
|
231 |
+
* @since 2.5.0
|
232 |
+
*
|
233 |
+
* @param string $messages Login messages.
|
234 |
+
*/
|
235 |
+
echo '<p class="message">' . apply_filters( 'login_messages', $messages ) . "</p>\n";
|
236 |
+
}
|
237 |
+
}
|
238 |
+
} // End of login_header()
|
239 |
+
|
240 |
+
/**
|
241 |
+
* Outputs the footer for the login page.
|
242 |
+
*
|
243 |
+
* @param string $input_id Which input to auto-focus
|
244 |
+
*/
|
245 |
+
function login_footer($input_id = '') {
|
246 |
+
global $interim_login;
|
247 |
+
|
248 |
+
// Don't allow interim logins to navigate away from the page.
|
249 |
+
if ( ! $interim_login ): ?>
|
250 |
+
<p id="backtoblog"><a href="<?php echo esc_url( home_url( '/' ) ); ?>"><?php
|
251 |
+
/* translators: %s: site title */
|
252 |
+
printf( _x( '← Back to %s', 'site' ), get_bloginfo( 'title', 'display' ) );
|
253 |
+
?></a></p>
|
254 |
+
<?php
|
255 |
+
if(function_exists('the_privacy_policy_link')){
|
256 |
+
the_privacy_policy_link( '<div class="privacy-policy-page-link">', '</div>' );
|
257 |
+
}
|
258 |
+
?>
|
259 |
+
<?php endif; ?>
|
260 |
+
|
261 |
+
</div>
|
262 |
+
|
263 |
+
<?php if ( !empty($input_id) ) : ?>
|
264 |
+
<script type="text/javascript">
|
265 |
+
try{document.getElementById('<?php echo $input_id; ?>').focus();}catch(e){}
|
266 |
+
if(typeof wpOnload=='function')wpOnload();
|
267 |
+
</script>
|
268 |
+
<?php endif; ?>
|
269 |
+
|
270 |
+
<?php
|
271 |
+
/**
|
272 |
+
* Fires in the login page footer.
|
273 |
+
*
|
274 |
+
* @since 3.1.0
|
275 |
+
*/
|
276 |
+
do_action( 'login_footer' ); ?>
|
277 |
+
<div class="clear"></div>
|
278 |
+
</body>
|
279 |
+
</html>
|
280 |
+
<?php
|
281 |
+
}
|
282 |
+
|
283 |
+
/**
|
284 |
+
* @since 3.0.0
|
285 |
+
*/
|
286 |
+
function wp_shake_js() {
|
287 |
+
?>
|
288 |
+
<script type="text/javascript">
|
289 |
+
addLoadEvent = function(func){if(typeof jQuery!="undefined")jQuery(document).ready(func);else if(typeof wpOnload!='function'){wpOnload=func;}else{var oldonload=wpOnload;wpOnload=function(){oldonload();func();}}};
|
290 |
+
function s(id,pos){g(id).left=pos+'px';}
|
291 |
+
function g(id){return document.getElementById(id).style;}
|
292 |
+
function shake(id,a,d){c=a.shift();s(id,c);if(a.length>0){setTimeout(function(){shake(id,a,d);},d);}else{try{g(id).position='static';wp_attempt_focus();}catch(e){}}}
|
293 |
+
addLoadEvent(function(){ var p=new Array(15,30,15,0,-15,-30,-15,0);p=p.concat(p.concat(p));var i=document.forms[0].id;g(i).position='relative';shake(i,p,20);});
|
294 |
+
</script>
|
295 |
+
<?php
|
296 |
+
}
|
297 |
+
|
298 |
+
/**
|
299 |
+
* @since 3.7.0
|
300 |
+
*/
|
301 |
+
function wp_login_viewport_meta() {
|
302 |
+
?>
|
303 |
+
<meta name="viewport" content="width=device-width" />
|
304 |
+
<?php
|
305 |
+
}
|
306 |
+
|
307 |
+
/**
|
308 |
+
* Handles sending password retrieval email to user.
|
309 |
+
*
|
310 |
+
* @return bool|WP_Error True: when finish. WP_Error on error
|
311 |
+
*/
|
312 |
+
function retrieve_password() {
|
313 |
+
$errors = new WP_Error();
|
314 |
+
|
315 |
+
if ( empty( $_POST['user_login'] ) || ! is_string( $_POST['user_login'] ) ) {
|
316 |
+
$errors->add('empty_username', __('<strong>ERROR</strong>: Enter a username or email address.' ));
|
317 |
+
} elseif ( strpos( $_POST['user_login'], '@' ) ) {
|
318 |
+
$user_data = get_user_by( 'email', trim( wp_unslash( $_POST['user_login'] ) ) );
|
319 |
+
if ( empty( $user_data ) )
|
320 |
+
$errors->add('invalid_email', __('<strong>ERROR</strong>: There is no user registered with that email address.' ));
|
321 |
+
} else {
|
322 |
+
$login = trim($_POST['user_login']);
|
323 |
+
$user_data = get_user_by('login', $login);
|
324 |
+
}
|
325 |
+
|
326 |
+
/**
|
327 |
+
* Fires before errors are returned from a password reset request.
|
328 |
+
*
|
329 |
+
* @since 2.1.0
|
330 |
+
* @since 4.4.0 Added the `$errors` parameter.
|
331 |
+
*
|
332 |
+
* @param WP_Error $errors A WP_Error object containing any errors generated
|
333 |
+
* by using invalid credentials.
|
334 |
+
*/
|
335 |
+
do_action( 'lostpassword_post', $errors );
|
336 |
+
|
337 |
+
if ( $errors->get_error_code() )
|
338 |
+
return $errors;
|
339 |
+
|
340 |
+
if ( !$user_data ) {
|
341 |
+
$errors->add('invalidcombo', __('<strong>ERROR</strong>: Invalid username or email.' ));
|
342 |
+
return $errors;
|
343 |
+
}
|
344 |
+
|
345 |
+
// Redefining user_login ensures we return the right case in the email.
|
346 |
+
$user_login = $user_data->user_login;
|
347 |
+
$user_email = $user_data->user_email;
|
348 |
+
$key = get_password_reset_key( $user_data );
|
349 |
+
|
350 |
+
if ( is_wp_error( $key ) ) {
|
351 |
+
return $key;
|
352 |
+
}
|
353 |
+
|
354 |
+
if ( is_multisite() ) {
|
355 |
+
$site_name = get_network()->site_name;
|
356 |
+
} else {
|
357 |
+
/*
|
358 |
+
* The blogname option is escaped with esc_html on the way into the database
|
359 |
+
* in sanitize_option we want to reverse this for the plain text arena of emails.
|
360 |
+
*/
|
361 |
+
$site_name = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
|
362 |
+
}
|
363 |
+
|
364 |
+
$message = __( 'Someone has requested a password reset for the following account:' ) . "\r\n\r\n";
|
365 |
+
/* translators: %s: site name */
|
366 |
+
$message .= sprintf( __( 'Site Name: %s'), $site_name ) . "\r\n\r\n";
|
367 |
+
/* translators: %s: user login */
|
368 |
+
$message .= sprintf( __( 'Username: %s'), $user_login ) . "\r\n\r\n";
|
369 |
+
$message .= __( 'If this was a mistake, just ignore this email and nothing will happen.' ) . "\r\n\r\n";
|
370 |
+
$message .= __( 'To reset your password, visit the following address:' ) . "\r\n\r\n";
|
371 |
+
$message .= '<' . network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user_login ), 'login' ) . ">\r\n";
|
372 |
+
|
373 |
+
/* translators: Password reset email subject. %s: Site name */
|
374 |
+
$title = sprintf( __( '[%s] Password Reset' ), $site_name );
|
375 |
+
|
376 |
+
/**
|
377 |
+
* Filters the subject of the password reset email.
|
378 |
+
*
|
379 |
+
* @since 2.8.0
|
380 |
+
* @since 4.4.0 Added the `$user_login` and `$user_data` parameters.
|
381 |
+
*
|
382 |
+
* @param string $title Default email title.
|
383 |
+
* @param string $user_login The username for the user.
|
384 |
+
* @param WP_User $user_data WP_User object.
|
385 |
+
*/
|
386 |
+
$title = apply_filters( 'retrieve_password_title', $title, $user_login, $user_data );
|
387 |
+
|
388 |
+
/**
|
389 |
+
* Filter the message body of the password reset mail.
|
390 |
+
*
|
391 |
+
* If the filtered message is empty, the password reset email will not be sent.
|
392 |
+
*
|
393 |
+
* @since 2.8.0
|
394 |
+
* @since 4.1.0 Added `$user_login` and `$user_data` parameters.
|
395 |
+
*
|
396 |
+
* @param string $message Default mail message.
|
397 |
+
* @param string $key The activation key.
|
398 |
+
* @param string $user_login The username for the user.
|
399 |
+
* @param WP_User $user_data WP_User object.
|
400 |
+
*/
|
401 |
+
$message = apply_filters( 'retrieve_password_message', $message, $key, $user_login, $user_data );
|
402 |
+
|
403 |
+
if ( $message && !wp_mail( $user_email, wp_specialchars_decode( $title ), $message ) )
|
404 |
+
wp_die( __('The email could not be sent.' ) . "<br />\n" . __('Possible reason: your host may have disabled the mail() function.' ) );
|
405 |
+
|
406 |
+
return true;
|
407 |
+
}
|
408 |
+
|
409 |
+
//
|
410 |
+
// Main
|
411 |
+
//
|
412 |
+
|
413 |
+
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login';
|
414 |
+
$errors = new WP_Error();
|
415 |
+
|
416 |
+
if ( isset($_GET['key']) )
|
417 |
+
$action = 'resetpass';
|
418 |
+
|
419 |
+
// validate action so as to default to the login screen
|
420 |
+
if ( !in_array( $action, array( 'postpass', 'logout', 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register', 'login', 'confirmaction' ), true ) && false === has_filter( 'login_form_' . $action ) )
|
421 |
+
$action = 'login';
|
422 |
+
|
423 |
+
nocache_headers();
|
424 |
+
|
425 |
+
header('Content-Type: '.get_bloginfo('html_type').'; charset='.get_bloginfo('charset'));
|
426 |
+
|
427 |
+
if ( defined( 'RELOCATE' ) && RELOCATE ) { // Move flag is set
|
428 |
+
if ( isset( $_SERVER['PATH_INFO'] ) && ($_SERVER['PATH_INFO'] != $_SERVER['PHP_SELF']) )
|
429 |
+
$_SERVER['PHP_SELF'] = str_replace( $_SERVER['PATH_INFO'], '', $_SERVER['PHP_SELF'] );
|
430 |
+
|
431 |
+
$url = dirname( set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] ) );
|
432 |
+
if ( $url != get_option( 'siteurl' ) )
|
433 |
+
update_option( 'siteurl', $url );
|
434 |
+
}
|
435 |
+
|
436 |
+
//Set a cookie now to see if they are supported by the browser.
|
437 |
+
$secure = ( 'https' === parse_url( wp_login_url(), PHP_URL_SCHEME ) );
|
438 |
+
setcookie( TEST_COOKIE, 'WP Cookie check', 0, COOKIEPATH, COOKIE_DOMAIN, $secure );
|
439 |
+
if ( SITECOOKIEPATH != COOKIEPATH )
|
440 |
+
setcookie( TEST_COOKIE, 'WP Cookie check', 0, SITECOOKIEPATH, COOKIE_DOMAIN, $secure );
|
441 |
+
|
442 |
+
$lang = ! empty( $_GET['wp_lang'] ) ? sanitize_text_field( $_GET['wp_lang'] ) : '';
|
443 |
+
$switched_locale = switch_to_locale( $lang );
|
444 |
+
|
445 |
+
/**
|
446 |
+
* Fires when the login form is initialized.
|
447 |
+
*
|
448 |
+
* @since 3.2.0
|
449 |
+
*/
|
450 |
+
do_action( 'login_init' );
|
451 |
+
|
452 |
+
/**
|
453 |
+
* Fires before a specified login form action.
|
454 |
+
*
|
455 |
+
* The dynamic portion of the hook name, `$action`, refers to the action
|
456 |
+
* that brought the visitor to the login form. Actions include 'postpass',
|
457 |
+
* 'logout', 'lostpassword', etc.
|
458 |
+
*
|
459 |
+
* @since 2.8.0
|
460 |
+
*/
|
461 |
+
do_action( "login_form_{$action}" );
|
462 |
+
|
463 |
+
$http_post = ('POST' == $_SERVER['REQUEST_METHOD']);
|
464 |
+
$interim_login = isset($_REQUEST['interim-login']);
|
465 |
+
|
466 |
+
/**
|
467 |
+
* Filters the separator used between login form navigation links.
|
468 |
+
*
|
469 |
+
* @since 4.9.0
|
470 |
+
*
|
471 |
+
* @param string $login_link_separator The separator used between login form navigation links.
|
472 |
+
*/
|
473 |
+
$login_link_separator = apply_filters( 'login_link_separator', ' | ' );
|
474 |
+
|
475 |
+
switch ($action) {
|
476 |
+
|
477 |
+
case 'postpass' :
|
478 |
+
if ( ! array_key_exists( 'post_password', $_POST ) ) {
|
479 |
+
wp_safe_redirect( wp_get_referer() );
|
480 |
+
exit();
|
481 |
+
}
|
482 |
+
|
483 |
+
require_once ABSPATH . WPINC . '/class-phpass.php';
|
484 |
+
$hasher = new PasswordHash( 8, true );
|
485 |
+
|
486 |
+
/**
|
487 |
+
* Filter the life span of the post password cookie.
|
488 |
+
*
|
489 |
+
* By default, the cookie expires 10 days from creation. To turn this
|
490 |
+
* into a session cookie, return 0.
|
491 |
+
*
|
492 |
+
* @since 3.7.0
|
493 |
+
*
|
494 |
+
* @param int $expires The expiry time, as passed to setcookie().
|
495 |
+
*/
|
496 |
+
$expire = apply_filters( 'post_password_expires', time() + 10 * DAY_IN_SECONDS );
|
497 |
+
$referer = wp_get_referer();
|
498 |
+
if ( $referer ) {
|
499 |
+
$secure = ( 'https' === parse_url( $referer, PHP_URL_SCHEME ) );
|
500 |
+
} else {
|
501 |
+
$secure = false;
|
502 |
+
}
|
503 |
+
setcookie( 'wp-postpass_' . COOKIEHASH, $hasher->HashPassword( wp_unslash( $_POST['post_password'] ) ), $expire, COOKIEPATH, COOKIE_DOMAIN, $secure );
|
504 |
+
|
505 |
+
if ( $switched_locale ) {
|
506 |
+
restore_previous_locale();
|
507 |
+
}
|
508 |
+
|
509 |
+
wp_safe_redirect( wp_get_referer() );
|
510 |
+
exit();
|
511 |
+
|
512 |
+
case 'logout' :
|
513 |
+
check_admin_referer('log-out');
|
514 |
+
|
515 |
+
$user = wp_get_current_user();
|
516 |
+
|
517 |
+
wp_logout();
|
518 |
+
|
519 |
+
if ( ! empty( $_REQUEST['redirect_to'] ) ) {
|
520 |
+
$redirect_to = $requested_redirect_to = $_REQUEST['redirect_to'];
|
521 |
+
} else {
|
522 |
+
$redirect_to = 'wp-login.php?loggedout=true';
|
523 |
+
$requested_redirect_to = '';
|
524 |
+
}
|
525 |
+
|
526 |
+
if ( $switched_locale ) {
|
527 |
+
restore_previous_locale();
|
528 |
+
}
|
529 |
+
|
530 |
+
/**
|
531 |
+
* Filter the log out redirect URL.
|
532 |
+
*
|
533 |
+
* @since 4.2.0
|
534 |
+
*
|
535 |
+
* @param string $redirect_to The redirect destination URL.
|
536 |
+
* @param string $requested_redirect_to The requested redirect destination URL passed as a parameter.
|
537 |
+
* @param WP_User $user The WP_User object for the user that's logging out.
|
538 |
+
*/
|
539 |
+
$redirect_to = apply_filters( 'logout_redirect', $redirect_to, $requested_redirect_to, $user );
|
540 |
+
wp_safe_redirect( $redirect_to );
|
541 |
+
exit();
|
542 |
+
|
543 |
+
case 'lostpassword' :
|
544 |
+
case 'retrievepassword' :
|
545 |
+
|
546 |
+
if ( $http_post ) {
|
547 |
+
$errors = retrieve_password();
|
548 |
+
if ( !is_wp_error($errors) ) {
|
549 |
+
$redirect_to = !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : 'wp-login.php?checkemail=confirm';
|
550 |
+
wp_safe_redirect( $redirect_to );
|
551 |
+
exit();
|
552 |
+
}
|
553 |
+
}
|
554 |
+
|
555 |
+
if ( isset( $_GET['error'] ) ) {
|
556 |
+
if ( 'invalidkey' == $_GET['error'] ) {
|
557 |
+
$errors->add( 'invalidkey', __( 'Your password reset link appears to be invalid. Please request a new link below.' ) );
|
558 |
+
} elseif ( 'expiredkey' == $_GET['error'] ) {
|
559 |
+
$errors->add( 'expiredkey', __( 'Your password reset link has expired. Please request a new link below.' ) );
|
560 |
+
}
|
561 |
+
}
|
562 |
+
|
563 |
+
$lostpassword_redirect = ! empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
|
564 |
+
/**
|
565 |
+
* Filter the URL redirected to after submitting the lostpassword/retrievepassword form.
|
566 |
+
*
|
567 |
+
* @since 3.0.0
|
568 |
+
*
|
569 |
+
* @param string $lostpassword_redirect The redirect destination URL.
|
570 |
+
*/
|
571 |
+
$redirect_to = apply_filters( 'lostpassword_redirect', $lostpassword_redirect );
|
572 |
+
|
573 |
+
/**
|
574 |
+
* Fires before the lost password form.
|
575 |
+
*
|
576 |
+
* @since 1.5.1
|
577 |
+
*/
|
578 |
+
do_action( 'lost_password' );
|
579 |
+
|
580 |
+
login_header(__('Lost Password' ), '<p class="message">' . __('Please enter your username or email address. You will receive a link to create a new password via email.' ) . '</p>', $errors);
|
581 |
+
|
582 |
+
$user_login = '';
|
583 |
+
|
584 |
+
if ( isset( $_POST['user_login'] ) && is_string( $_POST['user_login'] ) ) {
|
585 |
+
$user_login = wp_unslash( $_POST['user_login'] );
|
586 |
+
}
|
587 |
+
|
588 |
+
?>
|
589 |
+
|
590 |
+
<form name="lostpasswordform" id="lostpasswordform" action="<?php echo esc_url( network_site_url( 'wp-login.php?action=lostpassword', 'login_post' ) ); ?>" method="post">
|
591 |
+
<p>
|
592 |
+
<label for="user_login" ><?php _e('Username or Email Address'); ?><br />
|
593 |
+
<input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr($user_login); ?>" size="20" /></label>
|
594 |
+
</p>
|
595 |
+
<?php
|
596 |
+
/**
|
597 |
+
* Fires inside the lostpassword form tags, before the hidden fields.
|
598 |
+
*
|
599 |
+
* @since 2.1.0
|
600 |
+
*/
|
601 |
+
do_action( 'lostpassword_form' ); ?>
|
602 |
+
<input type="hidden" name="redirect_to" value="<?php echo esc_attr( $redirect_to ); ?>" />
|
603 |
+
<p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e('Get New Password'); ?>" /></p>
|
604 |
+
</form>
|
605 |
+
|
606 |
+
<p id="nav">
|
607 |
+
<a href="<?php echo esc_url( wp_login_url() ); ?>"><?php _e('Log in') ?></a>
|
608 |
+
<?php
|
609 |
+
if ( get_option( 'users_can_register' ) ) :
|
610 |
+
$registration_url = sprintf( '<a href="%s">%s</a>', esc_url( wp_registration_url() ), __( 'Register' ) );
|
611 |
+
|
612 |
+
echo esc_html( $login_link_separator );
|
613 |
+
|
614 |
+
/** This filter is documented in wp-includes/general-template.php */
|
615 |
+
echo apply_filters( 'register', $registration_url );
|
616 |
+
endif;
|
617 |
+
?>
|
618 |
+
</p>
|
619 |
+
|
620 |
+
<?php
|
621 |
+
login_footer('user_login');
|
622 |
+
|
623 |
+
if ( $switched_locale ) {
|
624 |
+
restore_previous_locale();
|
625 |
+
}
|
626 |
+
|
627 |
+
break;
|
628 |
+
|
629 |
+
case 'resetpass' :
|
630 |
+
case 'rp' :
|
631 |
+
list( $rp_path ) = explode( '?', wp_unslash( $_SERVER['REQUEST_URI'] ) );
|
632 |
+
$rp_cookie = 'wp-resetpass-' . COOKIEHASH;
|
633 |
+
if ( isset( $_GET['key'] ) ) {
|
634 |
+
$value = sprintf( '%s:%s', wp_unslash( $_GET['login'] ), wp_unslash( $_GET['key'] ) );
|
635 |
+
setcookie( $rp_cookie, $value, 0, $rp_path, COOKIE_DOMAIN, is_ssl(), true );
|
636 |
+
wp_safe_redirect( remove_query_arg( array( 'key', 'login' ) ) );
|
637 |
+
exit;
|
638 |
+
}
|
639 |
+
|
640 |
+
if ( isset( $_COOKIE[ $rp_cookie ] ) && 0 < strpos( $_COOKIE[ $rp_cookie ], ':' ) ) {
|
641 |
+
list( $rp_login, $rp_key ) = explode( ':', wp_unslash( $_COOKIE[ $rp_cookie ] ), 2 );
|
642 |
+
$user = check_password_reset_key( $rp_key, $rp_login );
|
643 |
+
if ( isset( $_POST['pass1'] ) && ! hash_equals( $rp_key, $_POST['rp_key'] ) ) {
|
644 |
+
$user = false;
|
645 |
+
}
|
646 |
+
} else {
|
647 |
+
$user = false;
|
648 |
+
}
|
649 |
+
|
650 |
+
if ( ! $user || is_wp_error( $user ) ) {
|
651 |
+
setcookie( $rp_cookie, ' ', time() - YEAR_IN_SECONDS, $rp_path, COOKIE_DOMAIN, is_ssl(), true );
|
652 |
+
if ( $user && $user->get_error_code() === 'expired_key' )
|
653 |
+
wp_redirect( site_url( 'wp-login.php?action=lostpassword&error=expiredkey' ) );
|
654 |
+
else
|
655 |
+
wp_redirect( site_url( 'wp-login.php?action=lostpassword&error=invalidkey' ) );
|
656 |
+
exit;
|
657 |
+
}
|
658 |
+
|
659 |
+
$errors = new WP_Error();
|
660 |
+
|
661 |
+
if ( isset($_POST['pass1']) && $_POST['pass1'] != $_POST['pass2'] )
|
662 |
+
$errors->add( 'password_reset_mismatch', __( 'The passwords do not match.' ) );
|
663 |
+
|
664 |
+
/**
|
665 |
+
* Fires before the password reset procedure is validated.
|
666 |
+
*
|
667 |
+
* @since 3.5.0
|
668 |
+
*
|
669 |
+
* @param object $errors WP Error object.
|
670 |
+
* @param WP_User|WP_Error $user WP_User object if the login and reset key match. WP_Error object otherwise.
|
671 |
+
*/
|
672 |
+
do_action( 'validate_password_reset', $errors, $user );
|
673 |
+
|
674 |
+
if ( ( ! $errors->get_error_code() ) && isset( $_POST['pass1'] ) && !empty( $_POST['pass1'] ) ) {
|
675 |
+
reset_password($user, $_POST['pass1']);
|
676 |
+
setcookie( $rp_cookie, ' ', time() - YEAR_IN_SECONDS, $rp_path, COOKIE_DOMAIN, is_ssl(), true );
|
677 |
+
login_header( __( 'Password Reset' ), '<p class="message reset-pass">' . __( 'Your password has been reset.' ) . ' <a href="' . esc_url( wp_login_url() ) . '">' . __( 'Log in' ) . '</a></p>' );
|
678 |
+
login_footer();
|
679 |
+
exit;
|
680 |
+
}
|
681 |
+
|
682 |
+
wp_enqueue_script('utils');
|
683 |
+
wp_enqueue_script('user-profile');
|
684 |
+
|
685 |
+
login_header(__('Reset Password' ), '<p class="message reset-pass">' . __('Enter your new password below.' ) . '</p>', $errors );
|
686 |
+
|
687 |
+
?>
|
688 |
+
<form name="resetpassform" id="resetpassform" action="<?php echo esc_url( network_site_url( 'wp-login.php?action=resetpass', 'login_post' ) ); ?>" method="post" autocomplete="off">
|
689 |
+
<input type="hidden" id="user_login" value="<?php echo esc_attr( $rp_login ); ?>" autocomplete="off" />
|
690 |
+
|
691 |
+
<div class="user-pass1-wrap">
|
692 |
+
<p>
|
693 |
+
<label for="pass1"><?php _e( 'New password' ) ?></label>
|
694 |
+
</p>
|
695 |
+
|
696 |
+
<div class="wp-pwd">
|
697 |
+
<div class="password-input-wrapper">
|
698 |
+
<input type="password" data-reveal="1" data-pw="<?php echo esc_attr( wp_generate_password( 16 ) ); ?>" name="pass1" id="pass1" class="input password-input" size="24" value="" autocomplete="off" aria-describedby="pass-strength-result" />
|
699 |
+
<span class="button button-secondary wp-hide-pw hide-if-no-js">
|
700 |
+
<span class="dashicons dashicons-hidden"></span>
|
701 |
+
</span>
|
702 |
+
</div>
|
703 |
+
<div id="pass-strength-result" class="hide-if-no-js" aria-live="polite"><?php _e( 'Strength indicator' ); ?></div>
|
704 |
+
</div>
|
705 |
+
<div class="pw-weak">
|
706 |
+
<label>
|
707 |
+
<input type="checkbox" name="pw_weak" class="pw-checkbox" />
|
708 |
+
<?php _e( 'Confirm use of weak password' ); ?>
|
709 |
+
</label>
|
710 |
+
</div>
|
711 |
+
</div>
|
712 |
+
<p class="user-pass2-wrap">
|
713 |
+
<label for="pass2"><?php _e('Confirm new password') ?></label><br />
|
714 |
+
<input type="password" name="pass2" id="pass2" class="input" size="20" value="" autocomplete="off" />
|
715 |
+
</p>
|
716 |
+
|
717 |
+
<p class="description indicator-hint"><?php echo wp_get_password_hint(); ?></p>
|
718 |
+
<br class="clear" />
|
719 |
+
|
720 |
+
<?php
|
721 |
+
/**
|
722 |
+
* Fires following the 'Strength indicator' meter in the user password reset form.
|
723 |
+
*
|
724 |
+
* @since 3.9.0
|
725 |
+
*
|
726 |
+
* @param WP_User $user User object of the user whose password is being reset.
|
727 |
+
*/
|
728 |
+
do_action( 'resetpass_form', $user );
|
729 |
+
?>
|
730 |
+
<input type="hidden" name="rp_key" value="<?php echo esc_attr( $rp_key ); ?>" />
|
731 |
+
<p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e('Reset Password'); ?>" /></p>
|
732 |
+
</form>
|
733 |
+
|
734 |
+
<p id="nav">
|
735 |
+
<a href="<?php echo esc_url( wp_login_url() ); ?>"><?php _e( 'Log in' ); ?></a>
|
736 |
+
<?php
|
737 |
+
if ( get_option( 'users_can_register' ) ) :
|
738 |
+
$registration_url = sprintf( '<a href="%s">%s</a>', esc_url( wp_registration_url() ), __( 'Register' ) );
|
739 |
+
|
740 |
+
echo esc_html( $login_link_separator );
|
741 |
+
|
742 |
+
/** This filter is documented in wp-includes/general-template.php */
|
743 |
+
echo apply_filters( 'register', $registration_url );
|
744 |
+
endif;
|
745 |
+
?>
|
746 |
+
</p>
|
747 |
+
|
748 |
+
<?php
|
749 |
+
login_footer('user_pass');
|
750 |
+
|
751 |
+
if ( $switched_locale ) {
|
752 |
+
restore_previous_locale();
|
753 |
+
}
|
754 |
+
|
755 |
+
break;
|
756 |
+
|
757 |
+
case 'register' :
|
758 |
+
if ( is_multisite() ) {
|
759 |
+
/**
|
760 |
+
* Filter the Multisite sign up URL.
|
761 |
+
*
|
762 |
+
* @since 3.0.0
|
763 |
+
*
|
764 |
+
* @param string $sign_up_url The sign up URL.
|
765 |
+
*/
|
766 |
+
wp_redirect( apply_filters( 'wp_signup_location', network_site_url( 'wp-signup.php' ) ) );
|
767 |
+
exit;
|
768 |
+
}
|
769 |
+
|
770 |
+
if ( !get_option('users_can_register') ) {
|
771 |
+
wp_redirect( site_url('wp-login.php?registration=disabled') );
|
772 |
+
exit();
|
773 |
+
}
|
774 |
+
|
775 |
+
$user_login = '';
|
776 |
+
$user_email = '';
|
777 |
+
if ( $http_post ) {
|
778 |
+
if ( isset( $_POST['user_login'] ) && is_string( $_POST['user_login'] ) ) {
|
779 |
+
$user_login = $_POST['user_login'];
|
780 |
+
}
|
781 |
+
|
782 |
+
if ( isset( $_POST['user_email'] ) && is_string( $_POST['user_email'] ) ) {
|
783 |
+
$user_email = wp_unslash( $_POST['user_email'] );
|
784 |
+
}
|
785 |
+
|
786 |
+
$errors = register_new_user($user_login, $user_email);
|
787 |
+
if ( !is_wp_error($errors) ) {
|
788 |
+
$redirect_to = !empty( $_POST['redirect_to'] ) ? $_POST['redirect_to'] : 'wp-login.php?checkemail=registered';
|
789 |
+
wp_safe_redirect( $redirect_to );
|
790 |
+
exit();
|
791 |
+
}
|
792 |
+
}
|
793 |
+
|
794 |
+
$registration_redirect = ! empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
|
795 |
+
/**
|
796 |
+
* Filter the registration redirect URL.
|
797 |
+
*
|
798 |
+
* @since 3.0.0
|
799 |
+
*
|
800 |
+
* @param string $registration_redirect The redirect destination URL.
|
801 |
+
*/
|
802 |
+
$redirect_to = apply_filters( 'registration_redirect', $registration_redirect );
|
803 |
+
login_header(__('Registration Form' ), '<p class="message register">' . __('Register For This Site' ) . '</p>', $errors);
|
804 |
+
?>
|
805 |
+
|
806 |
+
<form name="registerform" id="registerform" action="<?php echo esc_url( site_url( 'wp-login.php?action=register', 'login_post' ) ); ?>" method="post" novalidate="novalidate">
|
807 |
+
<p>
|
808 |
+
<label for="user_login"><?php _e('Username') ?><br />
|
809 |
+
<input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr(wp_unslash($user_login)); ?>" size="20" /></label>
|
810 |
+
</p>
|
811 |
+
<p>
|
812 |
+
<label for="user_email"><?php _e('Email') ?><br />
|
813 |
+
<input type="email" name="user_email" id="user_email" class="input" value="<?php echo esc_attr( wp_unslash( $user_email ) ); ?>" size="25" /></label>
|
814 |
+
</p>
|
815 |
+
<?php
|
816 |
+
/**
|
817 |
+
* Fires following the 'Email' field in the user registration form.
|
818 |
+
*
|
819 |
+
* @since 2.1.0
|
820 |
+
*/
|
821 |
+
do_action( 'register_form' );
|
822 |
+
?>
|
823 |
+
<p id="reg_passmail"><?php _e( 'Registration confirmation will be emailed to you.' ); ?></p>
|
824 |
+
<br class="clear" />
|
825 |
+
<input type="hidden" name="redirect_to" value="<?php echo esc_attr( $redirect_to ); ?>" />
|
826 |
+
<p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e('Register'); ?>" /></p>
|
827 |
+
</form>
|
828 |
+
|
829 |
+
<p id="nav">
|
830 |
+
<a href="<?php echo esc_url( wp_login_url() ); ?>"><?php _e( 'Log in' ); ?></a>
|
831 |
+
<?php echo esc_html( $login_link_separator ); ?>
|
832 |
+
<a href="<?php echo esc_url( wp_lostpassword_url() ); ?>"><?php _e( 'Lost your password?' ); ?></a>
|
833 |
+
</p>
|
834 |
+
|
835 |
+
<?php
|
836 |
+
login_footer('user_login');
|
837 |
+
|
838 |
+
if ( $switched_locale ) {
|
839 |
+
restore_previous_locale();
|
840 |
+
}
|
841 |
+
|
842 |
+
break;
|
843 |
+
|
844 |
+
case 'confirmaction' :
|
845 |
+
if ( ! isset( $_GET['request_id'] ) ) {
|
846 |
+
wp_die( __( 'Invalid request.' ) );
|
847 |
+
}
|
848 |
+
|
849 |
+
$request_id = (int) $_GET['request_id'];
|
850 |
+
|
851 |
+
if ( isset( $_GET['confirm_key'] ) ) {
|
852 |
+
$key = sanitize_text_field( wp_unslash( $_GET['confirm_key'] ) );
|
853 |
+
$result = wp_validate_user_request_key( $request_id, $key );
|
854 |
+
} else {
|
855 |
+
$result = new WP_Error( 'invalid_key', __( 'Invalid key' ) );
|
856 |
+
}
|
857 |
+
|
858 |
+
if ( is_wp_error( $result ) ) {
|
859 |
+
wp_die( $result );
|
860 |
+
}
|
861 |
+
|
862 |
+
/**
|
863 |
+
* Fires an action hook when the account action has been confirmed by the user.
|
864 |
+
*
|
865 |
+
* Using this you can assume the user has agreed to perform the action by
|
866 |
+
* clicking on the link in the confirmation email.
|
867 |
+
*
|
868 |
+
* After firing this action hook the page will redirect to wp-login a callback
|
869 |
+
* redirects or exits first.
|
870 |
+
*
|
871 |
+
* @param int $request_id Request ID.
|
872 |
+
*/
|
873 |
+
do_action( 'user_request_action_confirmed', $request_id );
|
874 |
+
|
875 |
+
$message = _wp_privacy_account_request_confirmed_message( $request_id );
|
876 |
+
|
877 |
+
login_header( __( 'User action confirmed.' ), $message );
|
878 |
+
login_footer();
|
879 |
+
exit;
|
880 |
+
|
881 |
+
case 'login' :
|
882 |
+
default:
|
883 |
+
$secure_cookie = '';
|
884 |
+
$customize_login = isset( $_REQUEST['customize-login'] );
|
885 |
+
if ( $customize_login )
|
886 |
+
wp_enqueue_script( 'customize-base' );
|
887 |
+
|
888 |
+
// If the user wants ssl but the session is not ssl, force a secure cookie.
|
889 |
+
if ( !empty($_POST['log']) && !force_ssl_admin() ) {
|
890 |
+
$user_name = sanitize_user($_POST['log']);
|
891 |
+
$user = get_user_by( 'login', $user_name );
|
892 |
+
|
893 |
+
if ( ! $user && strpos( $user_name, '@' ) ) {
|
894 |
+
$user = get_user_by( 'email', $user_name );
|
895 |
+
}
|
896 |
+
|
897 |
+
if ( $user ) {
|
898 |
+
if ( get_user_option('use_ssl', $user->ID) ) {
|
899 |
+
$secure_cookie = true;
|
900 |
+
force_ssl_admin(true);
|
901 |
+
}
|
902 |
+
}
|
903 |
+
}
|
904 |
+
|
905 |
+
if ( isset( $_REQUEST['redirect_to'] ) ) {
|
906 |
+
$redirect_to = $_REQUEST['redirect_to'];
|
907 |
+
// Redirect to https if user wants ssl
|
908 |
+
if ( $secure_cookie && false !== strpos($redirect_to, 'wp-admin') )
|
909 |
+
$redirect_to = preg_replace('|^http://|', 'https://', $redirect_to);
|
910 |
+
} else {
|
911 |
+
$redirect_to = admin_url();
|
912 |
+
}
|
913 |
+
|
914 |
+
$reauth = empty($_REQUEST['reauth']) ? false : true;
|
915 |
+
|
916 |
+
$user = wp_signon( array(), $secure_cookie );
|
917 |
+
|
918 |
+
if ( empty( $_COOKIE[ LOGGED_IN_COOKIE ] ) ) {
|
919 |
+
if ( headers_sent() ) {
|
920 |
+
/* translators: 1: Browser cookie documentation URL, 2: Support forums URL */
|
921 |
+
$user = new WP_Error( 'test_cookie', sprintf( __( '<strong>ERROR</strong>: Cookies are blocked due to unexpected output. For help, please see <a href="%1$s">this documentation</a> or try the <a href="%2$s">support forums</a>.' ),
|
922 |
+
__( 'https://codex.wordpress.org/Cookies' ), __( 'https://wordpress.org/support/' ) ) );
|
923 |
+
} elseif ( isset( $_POST['testcookie'] ) && empty( $_COOKIE[ TEST_COOKIE ] ) ) {
|
924 |
+
// If cookies are disabled we can't log in even with a valid user+pass
|
925 |
+
/* translators: 1: Browser cookie documentation URL */
|
926 |
+
$user = new WP_Error( 'test_cookie', sprintf( __( '<strong>ERROR</strong>: Cookies are blocked or not supported by your browser. You must <a href="%s">enable cookies</a> to use WordPress.' ),
|
927 |
+
__( 'https://codex.wordpress.org/Cookies' ) ) );
|
928 |
+
}
|
929 |
+
}
|
930 |
+
|
931 |
+
$requested_redirect_to = isset( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
|
932 |
+
/**
|
933 |
+
* Filter the login redirect URL.
|
934 |
+
*
|
935 |
+
* @since 3.0.0
|
936 |
+
*
|
937 |
+
* @param string $redirect_to The redirect destination URL.
|
938 |
+
* @param string $requested_redirect_to The requested redirect destination URL passed as a parameter.
|
939 |
+
* @param WP_User|WP_Error $user WP_User object if login was successful, WP_Error object otherwise.
|
940 |
+
*/
|
941 |
+
$redirect_to = apply_filters( 'login_redirect', $redirect_to, $requested_redirect_to, $user );
|
942 |
+
|
943 |
+
if ( !is_wp_error($user) && !$reauth ) {
|
944 |
+
if ( $interim_login ) {
|
945 |
+
$message = '<p class="message">' . __('You have logged in successfully.' ) . '</p>';
|
946 |
+
$interim_login = 'success';
|
947 |
+
login_header( '', $message ); ?>
|
948 |
+
</div>
|
949 |
+
<?php
|
950 |
+
/** This action is documented in wp-login.php */
|
951 |
+
do_action( 'login_footer' ); ?>
|
952 |
+
<?php if ( $customize_login ) : ?>
|
953 |
+
<script type="text/javascript">setTimeout( function(){ new wp.customize.Messenger({ url: '<?php echo wp_customize_url(); ?>', channel: 'login' }).send('login') }, 1000 );</script>
|
954 |
+
<?php endif; ?>
|
955 |
+
</body></html>
|
956 |
+
<?php exit;
|
957 |
+
}
|
958 |
+
|
959 |
+
if ( ( empty( $redirect_to ) || $redirect_to == 'wp-admin/' || $redirect_to == admin_url() ) ) {
|
960 |
+
// If the user doesn't belong to a blog, send them to user admin. If the user can't edit posts, send them to their profile.
|
961 |
+
if ( is_multisite() && !get_active_blog_for_user($user->ID) && !is_super_admin( $user->ID ) )
|
962 |
+
$redirect_to = user_admin_url();
|
963 |
+
elseif ( is_multisite() && !$user->has_cap('read') )
|
964 |
+
$redirect_to = get_dashboard_url( $user->ID );
|
965 |
+
elseif ( !$user->has_cap('edit_posts') )
|
966 |
+
$redirect_to = $user->has_cap( 'read' ) ? admin_url( 'profile.php' ) : home_url();
|
967 |
+
|
968 |
+
wp_redirect( $redirect_to );
|
969 |
+
exit();
|
970 |
+
}
|
971 |
+
wp_safe_redirect($redirect_to);
|
972 |
+
exit();
|
973 |
+
}
|
974 |
+
|
975 |
+
$errors = $user;
|
976 |
+
// Clear errors if loggedout is set.
|
977 |
+
if ( !empty($_GET['loggedout']) || $reauth )
|
978 |
+
$errors = new WP_Error();
|
979 |
+
|
980 |
+
if ( $interim_login ) {
|
981 |
+
if ( ! $errors->get_error_code() )
|
982 |
+
$errors->add('expired', __('Your session has expired. Please log in to continue where you left off.' ), 'message');
|
983 |
+
} else {
|
984 |
+
// Some parts of this script use the main login form to display a message
|
985 |
+
if ( isset($_GET['loggedout']) && true == $_GET['loggedout'] )
|
986 |
+
$errors->add('loggedout', __('You are now logged out.' ), 'message');
|
987 |
+
elseif ( isset($_GET['registration']) && 'disabled' == $_GET['registration'] )
|
988 |
+
$errors->add('registerdisabled', __('User registration is currently not allowed.' ));
|
989 |
+
elseif ( isset($_GET['checkemail']) && 'confirm' == $_GET['checkemail'] )
|
990 |
+
$errors->add('confirm', __('Check your email for the confirmation link.' ), 'message');
|
991 |
+
elseif ( isset($_GET['checkemail']) && 'newpass' == $_GET['checkemail'] )
|
992 |
+
$errors->add('newpass', __('Check your email for your new password.' ), 'message');
|
993 |
+
elseif ( isset($_GET['checkemail']) && 'registered' == $_GET['checkemail'] )
|
994 |
+
$errors->add('registered', __('Registration complete. Please check your email.' ), 'message');
|
995 |
+
elseif ( strpos( $redirect_to, 'about.php?updated' ) )
|
996 |
+
$errors->add('updated', __( '<strong>You have successfully updated WordPress!</strong> Please log back in to see what’s new.' ), 'message' );
|
997 |
+
}
|
998 |
+
|
999 |
+
/**
|
1000 |
+
* Filter the login page errors.
|
1001 |
+
*
|
1002 |
+
* @since 3.6.0
|
1003 |
+
*
|
1004 |
+
* @param object $errors WP Error object.
|
1005 |
+
* @param string $redirect_to Redirect destination URL.
|
1006 |
+
*/
|
1007 |
+
$errors = apply_filters( 'wp_login_errors', $errors, $redirect_to );
|
1008 |
+
|
1009 |
+
// Clear any stale cookies.
|
1010 |
+
if ( $reauth )
|
1011 |
+
wp_clear_auth_cookie();
|
1012 |
+
|
1013 |
+
login_header(__('Log In' ), '', $errors);
|
1014 |
+
|
1015 |
+
if ( isset($_POST['log']) )
|
1016 |
+
$user_login = ( 'incorrect_password' == $errors->get_error_code() || 'empty_password' == $errors->get_error_code() ) ? esc_attr(wp_unslash($_POST['log'])) : '';
|
1017 |
+
$rememberme = ! empty( $_POST['rememberme'] );
|
1018 |
+
|
1019 |
+
if ( ! empty( $errors->errors ) ) {
|
1020 |
+
$aria_describedby_error = ' aria-describedby="login_error"';
|
1021 |
+
} else {
|
1022 |
+
$aria_describedby_error = '';
|
1023 |
+
}
|
1024 |
+
|
1025 |
+
//aiowps - this check is necessary because otherwise if variables are undefined we get a warning!
|
1026 |
+
if(empty($user_login)){
|
1027 |
+
$user_login = '';
|
1028 |
+
}
|
1029 |
+
if(empty($error)){
|
1030 |
+
$error = '';
|
1031 |
+
}
|
1032 |
+
?>
|
1033 |
+
|
1034 |
+
<form name="loginform" id="loginform" action="<?php echo esc_url( site_url( 'wp-login.php', 'login_post' ) ); ?>" method="post">
|
1035 |
+
<p>
|
1036 |
+
<label for="user_login"><?php _e('Username or Email Address'); ?><br />
|
1037 |
+
<input type="text" name="log" id="user_login"<?php echo $aria_describedby_error; ?> class="input" value="<?php echo esc_attr( $user_login ); ?>" size="20" /></label>
|
1038 |
+
</p>
|
1039 |
+
<p>
|
1040 |
+
<label for="user_pass"><?php _e('Password'); ?><br />
|
1041 |
+
<input type="password" name="pwd" id="user_pass"<?php echo $aria_describedby_error; ?> class="input" value="" size="20" /></label>
|
1042 |
+
</p>
|
1043 |
+
<?php
|
1044 |
+
/**
|
1045 |
+
* Fires following the 'Password' field in the login form.
|
1046 |
+
*
|
1047 |
+
* @since 2.1.0
|
1048 |
+
*/
|
1049 |
+
do_action( 'login_form' );
|
1050 |
+
?>
|
1051 |
+
<p class="forgetmenot"><label for="rememberme"><input name="rememberme" type="checkbox" id="rememberme" value="forever" <?php checked( $rememberme ); ?> /> <?php esc_html_e('Remember Me'); ?></label></p>
|
1052 |
+
<p class="submit">
|
1053 |
+
<input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e('Log In'); ?>" />
|
1054 |
+
<?php if ( $interim_login ) { ?>
|
1055 |
+
<input type="hidden" name="interim-login" value="1" />
|
1056 |
+
<?php } else { ?>
|
1057 |
+
<input type="hidden" name="redirect_to" value="<?php echo esc_attr($redirect_to); ?>" />
|
1058 |
+
<?php } ?>
|
1059 |
+
<?php if ( $customize_login ) : ?>
|
1060 |
+
<input type="hidden" name="customize-login" value="1" />
|
1061 |
+
<?php endif; ?>
|
1062 |
+
<input type="hidden" name="testcookie" value="1" />
|
1063 |
+
</p>
|
1064 |
+
</form>
|
1065 |
+
|
1066 |
+
<?php if ( ! $interim_login ) { ?>
|
1067 |
+
<p id="nav">
|
1068 |
+
<?php if ( ! isset( $_GET['checkemail'] ) || ! in_array( $_GET['checkemail'], array( 'confirm', 'newpass' ) ) ) :
|
1069 |
+
if ( get_option( 'users_can_register' ) ) :
|
1070 |
+
$registration_url = sprintf( '<a href="%s">%s</a>', esc_url( wp_registration_url() ), __( 'Register' ) );
|
1071 |
+
|
1072 |
+
/** This filter is documented in wp-includes/general-template.php */
|
1073 |
+
echo apply_filters( 'register', $registration_url );
|
1074 |
+
|
1075 |
+
echo esc_html( $login_link_separator );
|
1076 |
+
endif;
|
1077 |
+
?>
|
1078 |
+
<a href="<?php echo esc_url( wp_lostpassword_url() ); ?>"><?php _e( 'Lost your password?' ); ?></a>
|
1079 |
+
<?php endif; ?>
|
1080 |
+
</p>
|
1081 |
+
<?php } ?>
|
1082 |
+
|
1083 |
+
<script type="text/javascript">
|
1084 |
+
function wp_attempt_focus(){
|
1085 |
+
setTimeout( function(){ try{
|
1086 |
+
<?php if ( $user_login ) { ?>
|
1087 |
+
d = document.getElementById('user_pass');
|
1088 |
+
d.value = '';
|
1089 |
+
<?php } else { ?>
|
1090 |
+
d = document.getElementById('user_login');
|
1091 |
+
<?php if ( 'invalid_username' == $errors->get_error_code() ) { ?>
|
1092 |
+
if( d.value != '' )
|
1093 |
+
d.value = '';
|
1094 |
+
<?php
|
1095 |
+
}
|
1096 |
+
}?>
|
1097 |
+
d.focus();
|
1098 |
+
d.select();
|
1099 |
+
} catch(e){}
|
1100 |
+
}, 200);
|
1101 |
+
}
|
1102 |
+
|
1103 |
+
<?php
|
1104 |
+
/**
|
1105 |
+
* Filters whether to print the call to `wp_attempt_focus()` on the login screen.
|
1106 |
+
*
|
1107 |
+
* @since 4.8.0
|
1108 |
+
*
|
1109 |
+
* @param bool $print Whether to print the function call. Default true.
|
1110 |
+
*/
|
1111 |
+
if ( apply_filters( 'enable_login_autofocus', true ) && ! $error ) { ?>
|
1112 |
+
wp_attempt_focus();
|
1113 |
+
<?php } ?>
|
1114 |
+
if(typeof wpOnload=='function')wpOnload();
|
1115 |
+
<?php if ( $interim_login ) { ?>
|
1116 |
+
(function(){
|
1117 |
+
try {
|
1118 |
+
var i, links = document.getElementsByTagName('a');
|
1119 |
+
for ( i in links ) {
|
1120 |
+
if ( links[i].href )
|
1121 |
+
links[i].target = '_blank';
|
1122 |
+
}
|
1123 |
+
} catch(e){}
|
1124 |
+
}());
|
1125 |
+
<?php } ?>
|
1126 |
+
</script>
|
1127 |
+
|
1128 |
+
<?php
|
1129 |
+
login_footer();
|
1130 |
+
|
1131 |
+
if ( $switched_locale ) {
|
1132 |
+
restore_previous_locale();
|
1133 |
+
}
|
1134 |
+
|
1135 |
+
break;
|
1136 |
+
} // end action switch
|
{tags/4.3.7.1/trunk/other-includes → other-includes}/wp-security-stop-users-enumeration.php
RENAMED
File without changes
|
{tags/4.3.7.1/trunk/other-includes → other-includes}/wp-security-unlock-request.php
RENAMED
File without changes
|
{tags/1.8/other-includes → other-includes}/wp-security-visitor-lockout-page.php
RENAMED
File without changes
|
readme.txt
ADDED
@@ -0,0 +1,836 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
=== All In One WP Security & Firewall ===
|
2 |
+
Contributors: Tips and Tricks HQ, wpsolutions, Peter Petreski, Ruhul Amin, mbrsolution, chesio
|
3 |
+
Donate link: https://www.tipsandtricks-hq.com
|
4 |
+
Tags: security, secure, Anti Virus, antivirus, ban, ban hacker, virus, firewall, firewall security, login, lockdown, htaccess, hack, malware, vulnerability, protect, protection, phishing, database, backup, plugin, sql injection, ssl, restrict, login captcha, bot, hotlink, 404 detection, admin, rename, all in one, scan, scanner, iframe,
|
5 |
+
Requires at least: 4.7
|
6 |
+
Tested up to: 5.0
|
7 |
+
Stable tag: trunk
|
8 |
+
License: GPLv3
|
9 |
+
|
10 |
+
A comprehensive, user-friendly, all in one WordPress security and firewall plugin for your site.
|
11 |
+
|
12 |
+
== Privacy Policy ==
|
13 |
+
This plugin may collect IP addresses for security reasons such as mitigating brute force login threats and malicious activity.
|
14 |
+
The collected information is stored on your server. No information is transmitted to third parties or remote server locations.
|
15 |
+
|
16 |
+
== Description ==
|
17 |
+
= A COMPREHENSIVE, EASY TO USE, STABLE AND WELL SUPPORTED WORDPRESS SECURITY PLUGIN =
|
18 |
+
|
19 |
+
WordPress itself is a very secure platform. However, it helps to add some extra security and firewall to your site by using a security plugin that enforces a lot of good security practices.
|
20 |
+
|
21 |
+
The All In One WordPress Security plugin will take your website security to a whole new level.
|
22 |
+
|
23 |
+
This plugin is designed and written by experts and is easy to use and understand.
|
24 |
+
|
25 |
+
It reduces security risk by checking for vulnerabilities, and by implementing and enforcing the latest recommended WordPress security practices and techniques.
|
26 |
+
|
27 |
+
https://www.youtube.com/watch?v=CJvCTlVtazA
|
28 |
+
|
29 |
+
All In One WP Security also uses an unprecedented security points grading system to measure how well you are protecting your site based on the security features you have activated.
|
30 |
+
|
31 |
+
Our security and firewall rules are categorized into "basic", "intermediate" and "advanced". This way you can apply the firewall rules progressively without breaking your site's functionality.
|
32 |
+
|
33 |
+
The All In One WordPress Security plugin doesn't slow down your site and it is 100% free.
|
34 |
+
|
35 |
+
Visit the [WordPress Security Plugin](https://www.tipsandtricks-hq.com/wordpress-security-and-firewall-plugin) page for more details.
|
36 |
+
|
37 |
+
Below is a list of the security and firewall features offered in this plugin:
|
38 |
+
|
39 |
+
= User Accounts Security =
|
40 |
+
* Detect if there is a user account which has the default "admin" username and easily change the username to a value of your choice.
|
41 |
+
* The plugin will also detect if you have any WordPress user accounts which have identical login and display names. Having account's where display name is identical to login name is bad security practice because
|
42 |
+
you are making it 50% easier for hackers because they already know the login name.
|
43 |
+
* Password strength tool to allow you to create very strong passwords.
|
44 |
+
* Stop user enumeration. So users/bots cannot discover user info via author permalink.
|
45 |
+
|
46 |
+
= User Login Security =
|
47 |
+
* Protect against "Brute Force Login Attack" with the Login Lockdown feature. Users with a certain IP address or range will be locked out of the system for a predetermined amount of time based on the configuration settings and you can also choose to be notified
|
48 |
+
via email whenever somebody gets locked out due to too many login attempts.
|
49 |
+
|
50 |
+
* As the administrator you can view a list of all locked out users which are displayed in an easily readable and navigable table which also allows you to unlock individual or bulk IP addresses at the click of a button.
|
51 |
+
* Force logout of all users after a configurable time period
|
52 |
+
* Monitor/View failed login attempts which show the user's IP address, User ID/Username and Date/Time of the failed login attempt
|
53 |
+
|
54 |
+
* Monitor/View the account activity of all user accounts on your system by keeping track of the username, IP address, login date/time, and logout date/time.
|
55 |
+
* Ability to automatically lockout IP address ranges which attempt to login with an invalid username.
|
56 |
+
* Ability to see a list of all the users who are currently logged into your site.
|
57 |
+
* Allows you to specify one or more IP addresses in a special whitelist. The whitelisted IP addresses will have access to your WP login page.
|
58 |
+
* Add Google reCaptcha or plain maths captcha to WordPress Login form.
|
59 |
+
* Add Google reCaptcha or plain maths captcha to the forgot password form of your WP Login system.
|
60 |
+
|
61 |
+
= User Registration Security =
|
62 |
+
* Enable manual approval of WordPress user accounts. If your site allows people to create their own accounts via the WordPress registration form, then you can minimize SPAM or bogus registrations by manually approving each registration.
|
63 |
+
* Ability to add Google reCaptcha or plain maths captcha to the WordPress's user registration page to protect you from spam user registration.
|
64 |
+
* Ability to add Honeypot to the WordPress's user registration form to reduce registration attempts by robots.
|
65 |
+
|
66 |
+
= Database Security =
|
67 |
+
* Easily set the default WP prefix to a value of your choice with the click of a button.
|
68 |
+
* Schedule automatic backups and email notifications or make an instant DB backup whenever you want with one click.
|
69 |
+
|
70 |
+
= File System Security =
|
71 |
+
* Identify files or folders which have permission settings which are not secure and set the permissions to the recommend secure values with click of a button.
|
72 |
+
* Protect your PHP code by disabling file editing from the WordPress administration area.
|
73 |
+
* Easily view and monitor all host system logs from a single menu page and stay informed of any issues or problems occurring on your server so you can address them quickly.
|
74 |
+
* Prevent people from accessing the readme.html, license.txt and wp-config-sample.php files of your WordPress site.
|
75 |
+
|
76 |
+
= htaccess and wp-config.php File Backup and Restore =
|
77 |
+
* Easily backup your original .htaccess and wp-config.php files in case you will need to use them to restore broken functionality.
|
78 |
+
* Modify the contents of the currently active .htaccess or wp-config.php files from the admin dashboard with only a few clicks
|
79 |
+
|
80 |
+
= Blacklist Functionality =
|
81 |
+
* Ban users by specifying IP addresses or use a wild card to specify IP ranges.
|
82 |
+
* Ban users by specifying user agents.
|
83 |
+
|
84 |
+
= Firewall Functionality =
|
85 |
+
|
86 |
+
This plugin allows you to easily add a lot of firewall protection to your site via htaccess file. An htaccess file is processed by your web server before any other code on your site.
|
87 |
+
So these firewall rules will stop malicious script(s) before it gets a chance to reach the WordPress code on your site.
|
88 |
+
|
89 |
+
* Access control facility.
|
90 |
+
* Instantly activate a selection of firewall settings ranging from basic, intermediate and advanced.
|
91 |
+
* Enable the famous "6G Blacklist" Firewall rules courtesy of [Perishable Press](http://perishablepress.com/)
|
92 |
+
* Forbid proxy comment posting.
|
93 |
+
* Block access to debug log file.
|
94 |
+
* Disable trace and track.
|
95 |
+
* Deny bad or malicious query strings.
|
96 |
+
* Protect against Cross Site Scripting (XSS) by activating the comprehensive advanced character string filter.
|
97 |
+
or malicious bots who do not have a special cookie in their browser. You (the site admin) will know how to set this special cookie and be able to log into your site.
|
98 |
+
* WordPress PingBack Vulnerability Protection feature. This firewall feature allows the user to prohibit access to the xmlrpc.php file in order to protect against certain vulnerabilities in the pingback functionality. This is also helpful to block bots from constantly accessing the xmlrpc.php file and wasting your server resource.
|
99 |
+
* Ability to block fake Googlebots from crawling your site.
|
100 |
+
* Ability to prevent image hotlinking. Use this to prevent others from hotlinking your images.
|
101 |
+
* Ability to log all 404 events on your site. You can also choose to automatically block IP addresses that are hitting too many 404s.
|
102 |
+
* Ability to add custom rules to block access to various resources of your site.
|
103 |
+
|
104 |
+
= Brute force login attack prevention =
|
105 |
+
* Instantly block Brute Force Login Attacks via our special Cookie-Based Brute Force Login Prevention feature. This firewall functionality will block all login attempts from people and bots.
|
106 |
+
* Ability to add a simple math captcha to the WordPress login form to fight against brute force login attacks.
|
107 |
+
* Ability to hide admin login page. Rename your WordPress login page URL so that bots and hackers cannot access your real WordPress login URL. This feature allows you to change the default login page (wp-login.php) to something you configure.
|
108 |
+
* Ability to use Login Honeypot which will helps reduce brute force login attempts by robots.
|
109 |
+
|
110 |
+
= WhoIs Lookup =
|
111 |
+
* Perform a WhoIs lookup of a suspicious host or IP address and get full details.
|
112 |
+
|
113 |
+
= Security Scanner =
|
114 |
+
* The file change detection scanner can alert you if any files have changed in your WordPress system. You can then investigate and see if that was a legitimate change or some bad code was injected.
|
115 |
+
* Database scanner feature can be used to scan your database tables. It will look for any common suspicious-looking strings, javascript and html code in some of the WordPress core tables.
|
116 |
+
|
117 |
+
= Comment SPAM Security =
|
118 |
+
* Monitor the most active IP addresses which persistently produce the most SPAM comments and instantly block them with the click of a button.
|
119 |
+
* Prevent comments from being submitted if it doesn't originate from your domain (this should reduce some SPAM bot comment posting on your site).
|
120 |
+
* Add a captcha to your wordpress comment form to add security against comment spam.
|
121 |
+
* Automatically and permanently block IP addresses which have exceeded a certain number of comments labeled as SPAM.
|
122 |
+
|
123 |
+
= Front-end Text Copy Protection =
|
124 |
+
* Ability to disable the right click, text selection and copy option for your front-end.
|
125 |
+
|
126 |
+
= Regular updates and additions of new security features =
|
127 |
+
* WordPress Security is something that evolves over time. We will be updating the All In One WP Security plugin with new security features (and fixes if required) on a regular basis so you can rest assured that your site will be on the cutting edge of security protection techniques.
|
128 |
+
|
129 |
+
= Works with Most Popular WordPress Plugins =
|
130 |
+
* It should work smoothly with most popular WordPress plugins.
|
131 |
+
|
132 |
+
= Additional Features =
|
133 |
+
* Ability to remove the WordPress Generator Meta information from the HTML source of your site.
|
134 |
+
* Ability to remove the WordPress Version information from the JS and CSS file includes of your site.
|
135 |
+
* Ability to prevent people from accessing the readme.html, license.txt and wp-config-sample.php files
|
136 |
+
* Ability to temporarily lock down the front end of your site from general visitors while you do various backend tasks (investigate security attacks, perform site upgrades, do maintenance work etc.)
|
137 |
+
* Ability to export/import the security settings.
|
138 |
+
* Prevent other sites from displaying your content via a frame or iframe.
|
139 |
+
|
140 |
+
= Plugin Support =
|
141 |
+
* If you have a question or problem with the All In One Security plugin, post it on the support forum and we will help you.
|
142 |
+
|
143 |
+
= Developers =
|
144 |
+
* If you are a developer and you need some extra hooks or filters for this plugin then let us know.
|
145 |
+
* Github repository - https://github.com/Arsenal21/all-in-one-wordpress-security
|
146 |
+
|
147 |
+
= Translations =
|
148 |
+
* All In One WP Security plugin can be translated to any language.
|
149 |
+
|
150 |
+
Currently available translations:
|
151 |
+
|
152 |
+
- English
|
153 |
+
- German
|
154 |
+
- Spanish
|
155 |
+
- French
|
156 |
+
- Hungarian
|
157 |
+
- Italian
|
158 |
+
- Swedish
|
159 |
+
- Russian
|
160 |
+
- Chinese
|
161 |
+
- Portuguese (Brazil)
|
162 |
+
- Persian
|
163 |
+
|
164 |
+
Visit the [WordPress Security Plugin](https://www.tipsandtricks-hq.com/wordpress-security-and-firewall-plugin) page for more details.
|
165 |
+
|
166 |
+
== Installation ==
|
167 |
+
|
168 |
+
To begin making your WordPress site more secure:
|
169 |
+
|
170 |
+
1. Upload the 'all-in-one-wp-security.zip' file from the Plugins->Add New page in the WordPress administration panel.
|
171 |
+
2. Activate the plugin through the 'Plugins' menu in WordPress
|
172 |
+
3. Go to Settings menu under 'WP Security' and start activating the security features of the plugin.
|
173 |
+
|
174 |
+
== Usage ==
|
175 |
+
|
176 |
+
Go to the settings menu after you activate the plugin and follow the instructions.
|
177 |
+
|
178 |
+
== Screenshots ==
|
179 |
+
Check the following page for screenshots:
|
180 |
+
https://www.tipsandtricks-hq.com/wordpress-security-and-firewall-plugin
|
181 |
+
|
182 |
+
== Frequently Asked Questions ==
|
183 |
+
Check the following page for F.A.Q (see the faq section):
|
184 |
+
https://www.tipsandtricks-hq.com/wordpress-security-and-firewall-plugin
|
185 |
+
|
186 |
+
== Upgrade Notice ==
|
187 |
+
None
|
188 |
+
|
189 |
+
== Changelog ==
|
190 |
+
= 4.3.8.1 =
|
191 |
+
- Minor bug fix - added missing check to enqueue recaptcha script only if that feature is enabled.
|
192 |
+
|
193 |
+
= 4.3.8 =
|
194 |
+
- Added ability to hide secret rename login page link when sending emails to people asking for personal data export.
|
195 |
+
- Fixed Google reCaptcha not showing on comment page.
|
196 |
+
- Fixed activation handler and creation of DB tables to handle multi-site activations more robustly.
|
197 |
+
- Improved reCaptcha code to prevent the occasional occurrence of "Uncaught Error: reCAPTCHA placeholder element must be an element or id" error.
|
198 |
+
- Added extra check for PHP_OS value to prevent Apple "DARWIN" being interpreted as windows server.
|
199 |
+
- Corrected some minor translation issues on rename login page.
|
200 |
+
- Increased priority of authenticate hook for captcha check.
|
201 |
+
- Updated the Dutch Language file.
|
202 |
+
|
203 |
+
= 4.3.7.2 =
|
204 |
+
- More "get_home_path" fatal error preventions.
|
205 |
+
|
206 |
+
= 4.3.7.1 =
|
207 |
+
- Fixed fatal error regarding "get_home_path" function.
|
208 |
+
|
209 |
+
|
210 |
+
= 4.3.7 =
|
211 |
+
- Added Google reCaptcha feature for login forms.
|
212 |
+
- Improved code which checks if site is main for multi-site installations.
|
213 |
+
- Removed the text domain string from the translation functions in the wp-security-rename-login-feature.php file.
|
214 |
+
- Changed .htaccess path location to use get_home_path().
|
215 |
+
- Fixed minor woocommerce captcha bug
|
216 |
+
|
217 |
+
= 4.3.6 =
|
218 |
+
- Added new tab called "WP REST API" in the Miscellaneous menu and created separate feature which disables unauthorized REST access for non-logged in users independent of the users enumeration feature.
|
219 |
+
- Improved dashboard page widget area display.
|
220 |
+
- Small translation string fix in the rename login page feature.
|
221 |
+
|
222 |
+
= 4.3.5 =
|
223 |
+
- Fix - Error: Call to undefined function the_privacy_policy_link() in older versions of WordPress.
|
224 |
+
- Added a check to disable file change detection feature and prevent fatal errors when FilesystemIterator is not available due to old versions of PHP.
|
225 |
+
- Improved get_login_fail_count method in the AIOWPSecurity_User_Login class which will fix cases where login lockdown
|
226 |
+
was not working on some servers due to timestamp difference between PHP current_time( 'mysql' ) and mysql now().
|
227 |
+
|
228 |
+
= 4.3.4 =
|
229 |
+
- Modified rename login page to handle GDPR Export/Erase Personal Data request.
|
230 |
+
- Fixed woocommerce registration page captcha bug.
|
231 |
+
- Improved users enumeration so that authenticated requests to the REST API are allowed but others are blocked.
|
232 |
+
- Improved logic in Renamed Login Page settings such that unnecessary call of AIOWPSecurity_Utility_Htaccess::write_to_htaccess() function is avoided.
|
233 |
+
|
234 |
+
= 4.3.3.1 =
|
235 |
+
- Fixed a typo with the newly added action hook - aiowps_before_wp_die_renamed_login
|
236 |
+
|
237 |
+
= 4.3.3 =
|
238 |
+
- Fixed bug - aiowps will now allow access to admin-post.php from front-end when rename login feature is active.
|
239 |
+
- Modified login lockdown feature so that the exact IP address is locked down and not the IP range.
|
240 |
+
- Added new filter (aiowps_ip_blocked_output_page) which allows user to filter the complete output when someone's IP has been locked out.
|
241 |
+
- Added new action hook (aiopws_before_wp_die_renamed_login) for the renamed login feature which fires just before the wp_die event which produces the "Not available" behaviour.
|
242 |
+
- Removed unused code.
|
243 |
+
- Modified get_user_ip_address to get the first IP address in cases where there are multiple comma separated addresses provided - example X-Forwarded-For.
|
244 |
+
|
245 |
+
= 4.3.2 =
|
246 |
+
- Added new IP address settings page which user the ability to configure which $_SERVER global the IP address will be retrieved from. (New setting found in WP Security >> Settings >> Advanced Settings)
|
247 |
+
- Fixed bug in .htaccess rules caused when 6G and IP blacklist firewall rules were simultaneously enabled.
|
248 |
+
- Fixed bug where captcha answer was being ignored on woocommerce login page.
|
249 |
+
- Added support for unlock requests made from woocomerce account login page when rename login feature is active.
|
250 |
+
- Added useful debug code for troubleshooting in the fake googlebot function.
|
251 |
+
- Some general code cleanup and improvement.
|
252 |
+
- Added code to prevent direct access data leaks.
|
253 |
+
- Added captcha settings for BBPress new topic form.
|
254 |
+
- Fixed minor bug in dashboard page when checking if htaccess rules applied.
|
255 |
+
- Added a check for Windows server installation in File Permissions feature - this feature is not applicable for Windows servers.
|
256 |
+
- Added check to display comment captcha only when user not logged in.
|
257 |
+
|
258 |
+
= 4.3.1 =
|
259 |
+
- Improved white list directives to cater for Apache 2.4 and earlier versions.
|
260 |
+
- Added 3 filters for the manual account registration approval email: aiowps_register_approval_email_subject, aiowps_register_approval_email_msg, aiowps_register_approval_email_from_name
|
261 |
+
- Added configuration option to allow custom firewall rules to be applied at beginning of all rules applied by aiowps.
|
262 |
+
- Changed record insertions to DB table aiowps_failed_logins to store the full IP address instead of IP range.
|
263 |
+
|
264 |
+
= 4.3.0 =
|
265 |
+
- Updated wp-security-rename-login-feature.php to include latest WordPress core changes.
|
266 |
+
- Added captcha for woocommerce login and registration forms.
|
267 |
+
- Fixed "mixed line endings" warnings for whois library.
|
268 |
+
- Moved DB cleanup task cron job from daily to hourly.
|
269 |
+
- Updated the reapply htaccess function so it doesn't create the header already sent error.
|
270 |
+
|
271 |
+
= 4.2.9 =
|
272 |
+
- Changed the parameter in current_user_can function to use an administrator capability instead of the "administrator" role name.
|
273 |
+
- Added some new hooks to the AIOWPSecurity_WP_Loaded_Tasks called aiowps_wp_loaded_tasks_start and aiowps_wp_loaded_tasks_end.
|
274 |
+
- Improved get_locked_ips() function and added $wpdb->prepare statement.
|
275 |
+
- Added more missing translation domain parameters for translatable strings in the rename login page.
|
276 |
+
- Deleted local copy of the Persian and Italian language files. These translations are available on translate.wordpress.org.
|
277 |
+
- Domain path and text domain added to plugin header.
|
278 |
+
- Changed the get_user_ip_address functions so that $_SERVER['REMOTE_ADDR'] is the primary method used to obtain IP address.
|
279 |
+
- Added enumeration block via REST API (wp >= 4.7)
|
280 |
+
|
281 |
+
= 4.2.8 =
|
282 |
+
- Improved "User Registration" feature to bypass the pending approval status for new users created in admin side.
|
283 |
+
- Fixed bug in whois library.
|
284 |
+
- Added translation domain parameter for translatable strings in the rename login page.
|
285 |
+
- Updated the chinese language file.
|
286 |
+
|
287 |
+
= 4.2.7 =
|
288 |
+
- The PHPWhois library updated to their latest version to include a security patch.
|
289 |
+
|
290 |
+
= 4.2.6 =
|
291 |
+
- Added new Login Lockdown whitelist feature which allows immunity for IP address or ranges from being locked by the lockdown feature.
|
292 |
+
- Fixed bug - Replaced date_i18n with current_time to prevent cases where some localizations produce foreign characters in date stamp output.
|
293 |
+
- Added a new feature to add Honeypot to the WordPress's user registration form (this can help reduce registration attempts by robots).
|
294 |
+
- Added "Export to CSV" buttons for 404 Event Logs, Account Activity Logs and Failed Login Records.
|
295 |
+
- Minor update to 6G rules.
|
296 |
+
- Minor spelling and wording fixes and changes.
|
297 |
+
|
298 |
+
= 4.2.5 =
|
299 |
+
- Fixed bug - added code which caters for mysql view definitions when DB prefix is changed.
|
300 |
+
- Fixed a typo in the user login security menu.
|
301 |
+
- Fixed storage of time stamp in lockdown table to match the local Wordpress server time and be consistent with the timestamp stored in the failed logins table.
|
302 |
+
- Prevent direct access to wp-security-core.php
|
303 |
+
- Updated the POT file.
|
304 |
+
|
305 |
+
= 4.2.4 =
|
306 |
+
- Fix error on block_ip_if_locked(), doesn't exit with a wp_user. This is needed for other plugins that create the $user (aka ldap auth plugins).
|
307 |
+
- Fix login error message for users with pending account approval.
|
308 |
+
- Wordpress 4.7 compatibility.
|
309 |
+
|
310 |
+
= 4.2.3 =
|
311 |
+
- Fixed bug when math captcha was displayed on Woocommerce registration page.
|
312 |
+
- Fixed login page bug for cases where email address and captcha are used to submit login form (thanks to @chesio for fix).
|
313 |
+
- Logs directory now contains a .htaccess file with proper deny directives.
|
314 |
+
- Small UX improvement: add for attribute to captcha label.
|
315 |
+
- Added check for IIS server in get_server_type function.
|
316 |
+
|
317 |
+
= 4.2.2 =
|
318 |
+
- Debug logger class improvements.
|
319 |
+
- Added a message in the debug settings area to state that the log files are reset on every plugin update.
|
320 |
+
- Always return an array from scan_dir_sort_date() to prevent PHP notices.
|
321 |
+
- Improvements for Automated DB backups filling up space - old backup file will be deleted first.
|
322 |
+
- Thanks to RIPS Analyzer for sending us the vulnerability report.
|
323 |
+
|
324 |
+
= 4.2.1 =
|
325 |
+
- Improve output of .htaccess to include <IfModule mod_rewrite.c> checks and RewriteEngine On directives.
|
326 |
+
- Fall back to default DB backup interval in case of invalid value.
|
327 |
+
- The aiowps_delete_backup_files() function will produce a debug log message on every call (to help with troubleshooting when needed).
|
328 |
+
|
329 |
+
= 4.2.0 =
|
330 |
+
- WPML plugin compatibility fix for the renamed admin login page feature.
|
331 |
+
- Fixed a few potential XSS vulnerabilities.
|
332 |
+
|
333 |
+
= 4.1.9 =
|
334 |
+
- Small improvement to the new "immediate blocking of specific usernames" feature.
|
335 |
+
|
336 |
+
= 4.1.8 =
|
337 |
+
- New feature to allow immediate blocking of specific usernames.
|
338 |
+
- Only activate copy (right-click) protection for non-admin users.
|
339 |
+
- Fixed bug where logout link in admin bar does not get updated on after the $_POST submit to reflect the new rename login setting.
|
340 |
+
- Fixed small bug in return_regularized_url function.
|
341 |
+
- Improvement/bug fix: When currently logged in user attempts to access renamed login page, redirect them to dashboard.
|
342 |
+
- Removed Spanish language files so they can be automatically pulled from WordPress.org.
|
343 |
+
- Drop unnecessary WHERE clause in some backend listings.
|
344 |
+
- Improvement: do not schedule a cronjob, if it is already scheduled.
|
345 |
+
|
346 |
+
= 4.1.7 =
|
347 |
+
- Added sanitisation for log file data in textarea.
|
348 |
+
- Disabled autocomplete for Captcha field.
|
349 |
+
|
350 |
+
= 4.1.6 =
|
351 |
+
- Added cleanup code for captcha string info transients.
|
352 |
+
- Minor change to the username label in the renamed login page to keep it inline with the standard WordPress login page.
|
353 |
+
- Fixed a potential vulnerability when viewing AIOWPS log files in the Dashboard menu. Thanks to Manuel LLOP for pointing this out.
|
354 |
+
|
355 |
+
= 4.1.5 =
|
356 |
+
- Fixed bug where username is an email and captcha was being ignored.
|
357 |
+
- Reduce memory footprint of database backup.
|
358 |
+
- Improvements: Make hard-coded strings localizable.
|
359 |
+
- Partial Apache 2.3 compatibility.
|
360 |
+
- Improved: Hide WP version number by replacing it with a hash. This way, WordPress version number is not exposed, but browser caching is not obscured by missing version numbers.
|
361 |
+
|
362 |
+
= 4.1.4 =
|
363 |
+
- Improved and tweaked the login captcha feature to avoid some issues people had with the last modification.
|
364 |
+
- Deleted reference to ini_get('safe_mode') to avoid fatal errors for newer versions of PHP where that setting has been totally removed.
|
365 |
+
|
366 |
+
= 4.1.3 =
|
367 |
+
- Added new checkbox for XMLRPC to disable only pingback methods but leave other XMLRPC functionality accessible. This will be useful for people who use Jetpack or Wordpress iOS or other apps.
|
368 |
+
- Updated the French language file.
|
369 |
+
- Fix: decbin doesn't add leading zero. Comparing empty strings return bad results.
|
370 |
+
- Fix: bugfix in the login captcha. Thanks to Sipke Mellema for pointing it out.
|
371 |
+
|
372 |
+
= 4.1.2 =
|
373 |
+
- Fixed bug introduced by last file change scanner code changes.
|
374 |
+
- Fixed bug in SPAM comment blocking functionality.
|
375 |
+
- Fixed fatal error case when Divi theme and front end lockout is enabled.
|
376 |
+
|
377 |
+
= 4.1.1 =
|
378 |
+
- Fixed Fatal error conflict between Rename Login feature and Yoast SEO and some themes when attempting to access wp-admin page directly.
|
379 |
+
- Added "Pending Approval" message when manual registration approval feature is enabled and a user registers.
|
380 |
+
- Fix (minor): No need to use strcmp to compare integer values.
|
381 |
+
- Updated and simplified wp-security-stop-users-enumeration.php for bug (thanks to @davidegiunchidiennea)
|
382 |
+
- Minor code cleanup (Thanks to @chesio for the following changes).
|
383 |
+
- File scanner codebase cleanup.
|
384 |
+
- Fix: properly report invalid email addresses in file scanner configuration.
|
385 |
+
- Code clean-up in AIOWPSecurity_Scan::do_file_change_scan() method.
|
386 |
+
- Tweak: Compare file scan data faster.
|
387 |
+
|
388 |
+
= 4.1.0 =
|
389 |
+
- Fixed bug in Maintenance menu page when trying to attach a media file to the message text box.
|
390 |
+
- Added a new filter (called "aiowps_ip_blocked_error_msg") which allows the modification of the error message displayed on the login page when an IP address has been blocked by the login lockdown feature.
|
391 |
+
- Updated French language translation. Thanks to Claude Ribaux for providing the translation files.
|
392 |
+
- Thanks to @chesio for making the following two changes.
|
393 |
+
- Replaced deprecated call to get_currentuserinfo() function.
|
394 |
+
- Minor code fixes in the backup class file.
|
395 |
+
- Fix: display correct (error) message when write_to_htaccess() fails.
|
396 |
+
- Tweak: database backup filename is more human-readable.
|
397 |
+
Before: 24x7eg8l6i-database-backup-1463042767.zip
|
398 |
+
After: database-backup-20160512-104607-24x7eg8l6i.zip
|
399 |
+
|
400 |
+
= 4.0.9 =
|
401 |
+
- Made file change scanner code more robust for cases when open_basedir restriction is in effect. (Thanks to Manuel Jeanne for pointing this out).
|
402 |
+
- Added code which will remove WordPress version info during CSS and JS script loading if you have the "Remove WP Generator Meta Info" option checked. (Thanks to aldemarcalazans for pointing this out).
|
403 |
+
- Fixed some potential SQL injection vulnerabilities. (Thanks to Julio Potier for pointing these out).
|
404 |
+
- Changed the feature category of blacklist manger from "Intermediate" to "Advanced".
|
405 |
+
- Tweak: Remove "@" from list of characters blocked by advanced character string filter. (Because it is often used in retina-ready images).
|
406 |
+
- Fix: Use home URL instead of site URL in lock notification email subject. Thanks to @chesio for fixing this.
|
407 |
+
|
408 |
+
= 4.0.8 =
|
409 |
+
- Added ability to identify IP addresses during user registration and option to block selected IPs.
|
410 |
+
- Added login form captcha functionality for sub-sites in a multi-site installation. (see the Brute Force menu)
|
411 |
+
- Fixed multi-site bug related to manual user-chosen DB prefix change.
|
412 |
+
- Added extra XSS protection inside admin menu pages for the "tab" query parameter.
|
413 |
+
- Added a note to the features that has the potential to lock you out if it doesn't work correctly on your site.
|
414 |
+
- Updated Brazil-Portuguese language file.
|
415 |
+
- Fixed issue with firewall custom rules being corrupted by magic quotes. Thanks to @chesio for fixing this.
|
416 |
+
|
417 |
+
= 4.0.7 =
|
418 |
+
- Added a new action hook "aiopws_before_set_404" which triggers just before the AIOWPS sets a 404. (handy for cases when rename login page is used which affects some themes when accessing "wp-admin" directly)
|
419 |
+
- Fixed some potential SQL injection vulnerabilities.
|
420 |
+
- Thanks to @chesio for submitting the following changes and applying the fixes.
|
421 |
+
- Sub-directory install fixes.
|
422 |
+
- Improve behavior of WP File Access tab.
|
423 |
+
- Fix invalid nesting of HTML elements.
|
424 |
+
- Do not block HTTP requests that contain "tag=" in query string.
|
425 |
+
- Option to enable the 6G firewall.
|
426 |
+
|
427 |
+
= 4.0.6 =
|
428 |
+
- Removed the viewing of contents of wp-config.php and .htaccess files in order to protect sensitive info.
|
429 |
+
- Fixed more potential XSS vulnerabilities in some other settings pages. (Once again many thanks to Erin Germ for pointing these out)
|
430 |
+
|
431 |
+
= 4.0.5 =
|
432 |
+
- Fixed some potential XSS vulnerability in the blacklist, file system and file change detection settings pages. (Many thanks to Erin Germ for pointing these out)
|
433 |
+
|
434 |
+
= 4.0.4 =
|
435 |
+
- Added new feature: Auto Block Spammer IPs. This feature will automatically and permanently block IP addresses which are linked to comment SPAM. (see SPAM Prevention -> Comment SPAM IP Monitoring tab)
|
436 |
+
- Added compatibility fix for the qTranslate-X plugin in the rename login page feature.
|
437 |
+
- Added ability to send to more than one email address for file change detection feature notification.
|
438 |
+
- Fixed bug in whois library when searching ARIN registry.
|
439 |
+
- Fixed the handling of display of longer IPV6 strings in dashboard summary table.
|
440 |
+
- Added hook for WooCommerce login form to display unlock button.
|
441 |
+
- Added Dutch language translation. Thanks to Jeroen van der Linde for providing the translation files.
|
442 |
+
- Typo fix in the "stop users enumeration" feature.
|
443 |
+
|
444 |
+
= 4.0.3 =
|
445 |
+
- Added urlencode to query strings in URLs to prevent unexpected behaviour. Thanks to @chesio for spotting the issue.
|
446 |
+
- Added new feature to stop users enumeration. Thanks to Davide Giunchi @davidegiunchidiennea for adding this.
|
447 |
+
- Added a more robust code for check_user_exists function. Thanks to Christian Carey.
|
448 |
+
- Added cron cleanup of the global meta table.
|
449 |
+
- Added a title in each of the admin interface menu.
|
450 |
+
|
451 |
+
= 4.0.2 =
|
452 |
+
- Added ability to enable/disable debug from the settings menu.
|
453 |
+
- Fixed bug related to using IP ranges in the whitelist settings.
|
454 |
+
- Added IPv6 support for the whitelist feature.
|
455 |
+
- Added check in file permissions feature for cases where wp-config.php may be located outside of root.
|
456 |
+
- Added wp cron DB cleanup events for various tables which may grow large over time.
|
457 |
+
- Changed firewall rule for proxy comment prevention to reflect suggestion made by Thomas O. in forum (https://wordpress.org/support/topic/high-server-cpu-with-proxy-login)
|
458 |
+
- Fixed CSS styling issue in admin pages for WordPrss 4.4
|
459 |
+
|
460 |
+
= 4.0.1 =
|
461 |
+
- Renamed the language files to match the new textdomain slug to fix the language translation bug.
|
462 |
+
- Fixed bug related to the rename login feature and force logout or logout expiry events.
|
463 |
+
- Applied fix for log being generated by events table DB insert.
|
464 |
+
- Corrected a function call to static version of display error msg.
|
465 |
+
|
466 |
+
= 4.0.0 =
|
467 |
+
- Updated text domain to match expected value for translate.wordpress.org translation system.
|
468 |
+
- Fixed bug related to multi-site user_roles not being updated for child sites.
|
469 |
+
- Fixed minor bug in rename login feature.
|
470 |
+
- Updated the Italian language file.
|
471 |
+
|
472 |
+
= 3.9.9 =
|
473 |
+
- Fixed an issue with the rename login page feature for WordPress 4.3
|
474 |
+
- Added esc_attr() sanitization to some of the relevant parameters
|
475 |
+
- Added the necessary changes to allow activation via wp-cli
|
476 |
+
|
477 |
+
= 3.9.8 =
|
478 |
+
- Added guard against possible XSS in the unlock request feature.
|
479 |
+
|
480 |
+
= 3.9.7 =
|
481 |
+
- Added new feature which allows custom .htaccess rules. (See "Custom Rules" tab in Firewall menu). You can now use this to add custom rules to block access to various resources on your site.
|
482 |
+
- Added a new feature to block access to the wp-content/debug.log file (WordPress creates this file if you enabled debug loggin option in the config file).
|
483 |
+
- Removed the "v" from version number of the plugin.
|
484 |
+
- Completed testing with WordPress 4.3.
|
485 |
+
|
486 |
+
= 3.9.6 =
|
487 |
+
- Added Rename Login page feature from the "Brute Force" menu to multisite sub-sites.
|
488 |
+
- Removed invalid "length" attribute from input element in captcha code.
|
489 |
+
- Fixed reset password feature whereby the URL which is sent out in the email for cases when rename login feature is enabled was not decoded properly.
|
490 |
+
- Corrected the check for boolean false if returned from wpdb query result.
|
491 |
+
- Added media button for wp editor in maintenance settings page.
|
492 |
+
|
493 |
+
= 3.9.5 =
|
494 |
+
- Fixed minor bug - IP addresses blocked due to '404' were not being listed in the display table.
|
495 |
+
- Updated the Russian language translation file.
|
496 |
+
- The automatic database table prefix generation value will use a-z characters only.
|
497 |
+
- Added esc_url sanitization to the add_query_arg/remove_query_arg function instances to prevent possible XSS.
|
498 |
+
|
499 |
+
= 3.9.4 =
|
500 |
+
- The sort order and orderby parameters now use a whitelisting approach for sanitization.
|
501 |
+
|
502 |
+
= 3.9.3 =
|
503 |
+
- Fixed the sort order not working in the 404 error logging and account activity page.
|
504 |
+
|
505 |
+
= 3.9.2 =
|
506 |
+
- Added a check for registration captcha feature to prevent errors when using another captcha plugin.
|
507 |
+
- Improved a few SQL statements.
|
508 |
+
|
509 |
+
= 3.9.1 =
|
510 |
+
- Added new "Force Logout" feature which will instantly force a certain user to be logged out of their session. (See the "Logged In Users" tab in User Login menu)
|
511 |
+
- Added more security protection for aiowps log files by creating .htaccess file and rules. AIOWPS log files can now only be viewed via dashboard menu, in new tab called "AIOWPS Logs". (NOTE:This security currently applies only for apache or similar servers)
|
512 |
+
- Added backticks to SQL statement for DB prefix change to help prevent errors.
|
513 |
+
- Added protection against possible SQL injection attacks.
|
514 |
+
|
515 |
+
= 3.9.0 =
|
516 |
+
- Added some robustness to the file-scan code.
|
517 |
+
- Added extra security to all relevant list table instances to prevent unlikely malicious deletion commands.
|
518 |
+
- Fixed the user agent part of the blacklist settings code to allow user-agents to be cleared upon saving.
|
519 |
+
|
520 |
+
= 3.8.9 =
|
521 |
+
- Fixed bug in the new feature which allows permanent blocking of IP addresses that create 404 events.
|
522 |
+
- Fixed minor bug for all instances where wpdb "prepare" was being used with order/orderby parameters.
|
523 |
+
- Fixed a possible open redirect vulnerability. Thanks to Sucuri for pointing it out.
|
524 |
+
|
525 |
+
= 3.8.8 =
|
526 |
+
- Added extra robustness and security for wp list table db commands by using wpdb "prepare" command.
|
527 |
+
- Fixed minor bug with undeclared variable in rename login feature page.
|
528 |
+
|
529 |
+
= 3.8.7 =
|
530 |
+
- Added an improvement for login lockdown feature - locked IP addresses will no longer be allowed to register.
|
531 |
+
- Added a "view" link for each account in the pending registration approval table list.
|
532 |
+
- Fixed 404 logging/lockout bug.
|
533 |
+
- Added ability to permanently block IP addresses from the 404 event list for both bulk and single cases.
|
534 |
+
- Added ability to do bulk temp blocking for IP addresses in 404 list.
|
535 |
+
- Fixed a minor bug with validate_ip_list function.
|
536 |
+
|
537 |
+
= 3.8.6 =
|
538 |
+
- DB cleanup cron event bug fixed.
|
539 |
+
- Added Swedish language translation. The translation was submitted by Tor-Björn Fjellner.
|
540 |
+
- Updated the Russian language translation file. Update submitted by Tor-Björn Fjellner.
|
541 |
+
- The events table will automatically be cleaned up so it only keeps the last 5000 entries. You can override it using a filter (if you wanted to).
|
542 |
+
|
543 |
+
= 3.8.5 =
|
544 |
+
- Added functionality to prevent the aiowps_events table from getting too large.
|
545 |
+
- Added file change scan summary inside the alert email.
|
546 |
+
- Fixed the unlock feature so that it works correctly when the Rename Login Page feature is active.
|
547 |
+
- Added a check in the list logged in users file to prevent error when get_transient returns false.
|
548 |
+
|
549 |
+
= 3.8.4 =
|
550 |
+
- Updated POT language file.
|
551 |
+
- Tweaked the function which retrieves the IP address to handle cases where traffic is coming from cloudflare
|
552 |
+
- The MySQL database will not be forced anymore at the time of creating the table. It also reads the characters set value from the system first.
|
553 |
+
- Applied fixes to prevent remotely exploitable vulnerabilities.
|
554 |
+
|
555 |
+
= 3.8.3 =
|
556 |
+
- Modified "Pingback Protection" .htaccess rules to prevent xmlrpc login attacks and to be compatible with more servers.
|
557 |
+
- Made improvements to ensure that the rename login and white list features can be used together.
|
558 |
+
- Added a check to force user to enter alphanumeric string for renamed login slug.
|
559 |
+
- Improved the turn_off_all_firewall_rules() and turn_off_all_security_features() functions so that they also handle the updating of the htaccess file.
|
560 |
+
- Added an alternative way to import settings via a text box (Thanks to Dave McHale). This is for people who might have issues using the config settings file uploader.
|
561 |
+
- Added fix to properly update options tables when changing DB prefix in multisite system.
|
562 |
+
- Greatly improved the Renamed Login Page feature by removing various potential vulnerabilities.
|
563 |
+
- Added an if statement check to fix bug with rename login page feature - special case where user had non permalink structure was not working correctly in some rare scenarios.
|
564 |
+
- Updated the Italian language file.
|
565 |
+
- Fixed bug regarding wp_mail malformed header when "From" string was empty due to "site title" not being set.
|
566 |
+
- Fixed bug in IP list validation function for blacklist feature.
|
567 |
+
- Removed strict filtering of IP addresses so as to allow internal IP address ranges.
|
568 |
+
- Added stripping of orderby and order query parameters in the plugin.
|
569 |
+
- Added search capability by IP address, URL or referer for the 404 events list table.
|
570 |
+
|
571 |
+
= 3.8.2 =
|
572 |
+
- Fixed a CSS issue with the honeypot feature.
|
573 |
+
- Fixed a call to the login action handler static function.
|
574 |
+
|
575 |
+
= 3.8.1 =
|
576 |
+
- Minor bug fix for the honeypot feature - loading of css style sheet was not occurring when main login page rendered.
|
577 |
+
|
578 |
+
= 3.8.0 =
|
579 |
+
- Improved deactivation and re-activation tasks - AIOWPS will now gracefully clean up the .htaccess rules when the plugin is deactivated.
|
580 |
+
- Tweaked code so that all login pages including custom ones will correctly load the CSS style sheet file needed for honeypot feature.
|
581 |
+
- Updated the Portugese language translation.
|
582 |
+
- Fixed the copy protection feature so it doesn't interfere with iframes and shortcodes.
|
583 |
+
- The plugin will now work fine even if your wp-config.php file is outside the wordpress root folder.
|
584 |
+
|
585 |
+
= 3.7.9.2 =
|
586 |
+
- copy protection feature JS code improvement
|
587 |
+
|
588 |
+
= 3.7.9.1 =
|
589 |
+
- Added captcha functionality for custom login form which is produced by the WP function: wp_login_form()
|
590 |
+
- Fixed a minor bug with the copy protection feature's JavaScript code.
|
591 |
+
- Tweaked file change scan algorithm to help prevent getMTime fatal runtime errors.
|
592 |
+
- Added a link to the github repository in the readme.txt file for developers.
|
593 |
+
|
594 |
+
= 3.7.9 =
|
595 |
+
- Fixed a small bug related to the cookie test in the Cookie Based Brute Force feature.
|
596 |
+
|
597 |
+
= 3.7.8 =
|
598 |
+
- Added new feature called Login Honeypot which will help reduce brute force login attempts by robots. (This can be found in the Brute Force menu)
|
599 |
+
- Added new feature to prevent other sites from displaying your content via a frame or iframe. (This can be found in the Miscellaneous menu)
|
600 |
+
- Added captcha feature for BuddyPress registration form.
|
601 |
+
- Added a new filter for the site lockout message so it can be customized.
|
602 |
+
- Added a new filter for template include of the site lockout feature.
|
603 |
+
- Temporarily deactivated the "DB Scan" feature.
|
604 |
+
|
605 |
+
= 3.7.7 =
|
606 |
+
- Improved DB prefix change code to make it more robust.
|
607 |
+
- Fixed a minor bug for the Rename Login page feature.
|
608 |
+
- Added check when processing rename login page to see if maintenance (lockout) mode enabled. Plugin will now display lockout message instead of 404 page if site lockout enabled.
|
609 |
+
- Made the Cookie Based Brute Force Prevention feature more secure by introducing a 10 digit random suffix to the test cookie name.
|
610 |
+
|
611 |
+
= 3.7.6 =
|
612 |
+
- Added ability to insert captcha in WordPress Multi Site registration form.
|
613 |
+
- Added a condition around the management permission constant. This will allow users to define a custom capability for this plugin's admin side via the wp-config file. This was submitted by Samuel Aguilera.
|
614 |
+
- Fixed a bug with the hidden login page feature.
|
615 |
+
- Fixed a small settings bug with the "block fake google bot" feature.
|
616 |
+
|
617 |
+
= 3.7.5 =
|
618 |
+
- Added a new DB scan feature. Go to the "Scanner" menu to use this new feature.
|
619 |
+
- Added new settings import/export feature.
|
620 |
+
- Modified user accounts feature to alert administrator if one or both "admin" or "Admin" usernames are being used.
|
621 |
+
- Added Persian language translation. The translation was submitted by Amir Mousavi Pour (me@ameer.ir).
|
622 |
+
- Small change to get_mysql_tables function to prevent fatal error when mysqli query is unsuccessful.
|
623 |
+
- Added Italian language translation. The translation was submitted by Marco Guglielmetti.
|
624 |
+
|
625 |
+
= 3.7.4 =
|
626 |
+
- Added a new feature to add copy protection for your front-end. You can find this feature under the "Miscellaneous" menu.
|
627 |
+
- Fixed comment captcha bug for multi-site. Now this feature can be activated/deactivated for subsites of a multisite installation.
|
628 |
+
- Added Hungarian language translation. The translation was submitted by Daniel Kocsis.
|
629 |
+
- Moved the custom login page feature's handling code to wp-loaded hook so other plugins that modify the login page can do their task before our one is triggered. This change was suggested by Mark Hudnall.
|
630 |
+
- Added German language translation. The translation was submitted by Manuel Fritsch.
|
631 |
+
- Updated the Brazilian language translation file.
|
632 |
+
|
633 |
+
|
634 |
+
= 3.7.3 =
|
635 |
+
- Added Brazilian language translation. The translation was submitted by Sergio Siqueira.
|
636 |
+
- Added two new action hooks for plugin activation and deactivation time.
|
637 |
+
- Improved the get_user_ip_address() function so it handles cases when multiple addresses are returned due to proxy.
|
638 |
+
- Fixed the mis-alignment of login page which was broken by WP3.9 when rename login feature is used.
|
639 |
+
- WordPress 3.9 compatibility
|
640 |
+
|
641 |
+
= 3.7.2 =
|
642 |
+
- Added a PHP Info section in the system info interface to show some important PHP details of the server.
|
643 |
+
- Added a filter to allow the user to have a custom translation in a place (which will be loaded instead of the default one from the plugin). This change was submitted by Samuel Aguilera.
|
644 |
+
- Replaced myslqi fetch_all method with fetch_assoc to cover cases where some servers do not have the correct mysql drivers.
|
645 |
+
- Added a new filter to allow manipulation of the htaccess rules from your custom code. The name of the filter is 'aiowps_htaccess_rules_before_writing'.
|
646 |
+
- Added a "Delete All 404 Event Logs" button to purge all 404 logs from DB
|
647 |
+
- Added code to automatically send an email to the registrant when an account has been manually "Approved" from the User Registration menu.
|
648 |
+
|
649 |
+
= 3.7.1 =
|
650 |
+
- Fixed a minor bug: dashboard link was pointing to the wrong tab for the "Logged In Users" tab.
|
651 |
+
- Fix a bug with the login page captcha. The captcha wansn't shown if the rename login page feature was enabled at the same time.
|
652 |
+
|
653 |
+
= 3.7 =
|
654 |
+
- Added new feature - 404 detection. This allows you to log 404 events and block selected IPs. This feature can be found in the Firewall menu.
|
655 |
+
- Added new dashboard info box to display number of blocked IP addresses in the lockout table.
|
656 |
+
- Fixed bug where user could not access login page when maintenance mode and rename login page features were both active.
|
657 |
+
- Tweaked the hotlinking .htaccess directives to cover both http and https.
|
658 |
+
- Fixed code to prevent mysql errors due to some variables not having default value in failed login and lockdown tables
|
659 |
+
- Replaced deprecated PHP function mysql_query with mysqli.
|
660 |
+
- Added language file for Spanish language. The Spanish translation was done by Samuel Montoya.
|
661 |
+
- Added code to hide the "DB Prefix" menu for the non-main sites in multi-site installation
|
662 |
+
|
663 |
+
= 3.6 =
|
664 |
+
- Added a new feature to prevent image hot-linking. (See the "Prevent Hotlinks" tab in the firewall menu)
|
665 |
+
- Added a check in the Rename Login Page feature to prevent people from setting the slug to "wp-admin"
|
666 |
+
- Fixed a small bug with Login Lockdown feature.
|
667 |
+
|
668 |
+
= 3.5.1 =
|
669 |
+
- Fixed a bug where the cookie-based brute force directives were not being deleted from the .htaccess file when the Rename Login Page feature was being activated.
|
670 |
+
|
671 |
+
= 3.5 =
|
672 |
+
- Added new feature which will Block Fake Googlebots from crawling your site. Check the Firewall menu for this new feature.
|
673 |
+
- Added code to prevent users from having both the Rename Login Page and Cookie-Based Brute Force features active at the same time.
|
674 |
+
- Added some useful info boxes in the dashboard: 1) to inform the user if the cookie based brute force or rename login page features are active, 2) last 5 logins to your site.
|
675 |
+
- Fixed minor bug with .htaccess backup feature.
|
676 |
+
- Updated the from email address value used for sending backups and file change notification. Thanks to @TheAssurer for the tip.
|
677 |
+
- Updated the warning message for the disable index view feature.
|
678 |
+
|
679 |
+
|
680 |
+
= 3.4 =
|
681 |
+
- Consolidated "Brute Force" features by moving all such features to the "Brute Force" menu.
|
682 |
+
- Improved the file change detection scan feature: Introduced a button allowing admin to view the file change results from the last scan and fixed small bug whereby the change detected flag was not being cleared for applicable cases.
|
683 |
+
- Fixed a small bug with "rename login page" (hide admin login) feature.
|
684 |
+
- Made wp-config.php and .htaccess file backups more secure. Thanks to @TheAssurer for the tip.
|
685 |
+
- Made the login code more robust by catering for cases where the "wp_login" action was not passing 2 parameters.
|
686 |
+
|
687 |
+
= 3.3 =
|
688 |
+
- Added a brand new brute force prevention feature - Rename Login Page. This feature can be found in the new menu item called "Brute Force".
|
689 |
+
- Modified the new unlock request feature so that the locked out user will only have to enter email address when they submit an unlock request.
|
690 |
+
- Replaced the deprecated PHP function "mysql_list_tables" with alternative code.
|
691 |
+
- Added warning message regarding WordPress iOS app when pingback protection feature in the firewall settings is active.
|
692 |
+
- Added Malware scan tab and information.
|
693 |
+
- Some minor html form and CSS corrections.
|
694 |
+
|
695 |
+
= 3.2 =
|
696 |
+
- Added new feature which allows users to generate an automated unlock request link via email when they get locked out because of the login lockdown feature.
|
697 |
+
- Added a check to ensure that user cannot enter 0 minutes in the Force Logout feature.
|
698 |
+
- Fixed translations so that various previously omitted strings can now be translated.
|
699 |
+
- Added a new filter before locking down a user's IP address - aiowps_before_lockdown.
|
700 |
+
- Generated a new translation (POT) file.
|
701 |
+
|
702 |
+
= 3.1 =
|
703 |
+
- Added a new feature that will allow you to add a captcha to the lost password form (useful if you are allowing user registration on your site).
|
704 |
+
- Added ability to specify a system log file in the "Host System Logs" tab of the "File System Security" menu
|
705 |
+
- Fixed a tab link bug. One link was going to the wrong menu tab.
|
706 |
+
- Updated the POT file of the plugin.
|
707 |
+
|
708 |
+
= 3.0 =
|
709 |
+
- Added a new feature which allows you to add captcha to the Wordpress user registration page.
|
710 |
+
- Added some more helpful comments and link to video tutorial in the brute force and white list features settings pages.
|
711 |
+
|
712 |
+
= 2.9 =
|
713 |
+
- Added new feature which automatically sets the status of newly registered wordpress user accounts to "pending" and allows manual approval by an administrator.
|
714 |
+
- Improved robustness of file change detection iteration code.
|
715 |
+
- WordPress 3.7 compatibility
|
716 |
+
|
717 |
+
= 2.8.1 =
|
718 |
+
- Improved the login captcha implementation
|
719 |
+
- Changed the management permission to manage_options
|
720 |
+
|
721 |
+
= 2.8 =
|
722 |
+
- Added a feature to insert a simple math captcha to the WordPress comment form (to reduce comment spam). Check the spam prevention menu for this new feature.
|
723 |
+
- Fixed a minor bug with bulk unlock/delete in user login menu
|
724 |
+
- Fixed a minor bug with math captcha logic.
|
725 |
+
|
726 |
+
= 2.7 =
|
727 |
+
- Added a simple math captcha functionality for the WP login page. This is another easy yet effective way to combat Brute Force Login Attacks. You can enable this new feature from the user login security menu.
|
728 |
+
|
729 |
+
= 2.6 =
|
730 |
+
- Added a new Login Whitelist feature. This feature enables you to specify one or more IP addresses in a special whitelist which will have access to your WP login page.
|
731 |
+
All other IP addresses trying to access your WP login page which are not in the whitelist will be automatically blocked.
|
732 |
+
- The IP address will also be included in the email that gets sent to the admin for the ip address lockout notification.
|
733 |
+
- Language file loading fix for Chinese language.
|
734 |
+
- Tweaked the code which creates a .htaccess file in the backup directory to ensure it gets run even if the directory already existed.
|
735 |
+
- Made DB backups more secure.
|
736 |
+
- Added more useful debug logs for .htaccess file manipulation failure scenarios.
|
737 |
+
|
738 |
+
= 2.5 =
|
739 |
+
- Added a new feature which will list the currently logged in users who have been active within the last 15 minutes.
|
740 |
+
- Added a new feature in settings menu which will disable all firewall rules and clear all applicable directives in the .htaccess file.
|
741 |
+
- Improved the way the wp-config.php file is handled when it contains an ending PHP tag "?>" (older sites that were using PHP4 earlier).
|
742 |
+
|
743 |
+
= 2.4 =
|
744 |
+
- Added new feature/checkbox which will instantly lockout IP address ranges which attempt to login with an invalid username.
|
745 |
+
- Fixed a bug in the Comment SPAM IP Monitoring page where trying to block one or more IPs was failing.
|
746 |
+
- Removed the word "config" from the list of bad query strings check (to add compatibility with a few more plugins)
|
747 |
+
- Added a notice in the dashboard menu to show you if there are any recent file changes that the plugin detected.
|
748 |
+
- Fixed bug with php File Editing feature. Code now also handles older style wp-config.php files which have the php end tag "?>"
|
749 |
+
- Fixed bug with "Disable All Security Features" button functionality. When clicked, this will now also make the appropriate changes to the .htacces and wp-config.php files if necessary.
|
750 |
+
- Changed the storage of backup files from the plugin's directory to the uploads directory. Also added a .htaccess file for security.
|
751 |
+
- Fixed the way user-agent strings were written to the .htacess file from the Blacklist feature. The code now will correctly identify and represent spaces and escaped chars.
|
752 |
+
- Fixed a bug related to sending backup to correct email address.
|
753 |
+
|
754 |
+
= 2.3 =
|
755 |
+
- Added new menu called Scanner with a new feature called File Change Detection. This feature will alert you if any files have changed, added or removed from your system.
|
756 |
+
- Fixed "Deny Bad Query Strings" rules to not break the ability to drag components in the WordPress "Appearance->Menus" page
|
757 |
+
- Fixed an activation time warning (on sites with WP_DEBUG option enabled)
|
758 |
+
- Re-implemented the wp-config.php file content backup feature. It now directly downloads the contents of the file to your computer.
|
759 |
+
- Multi-site enhancements: Suppressed access to configuration settings for features which are not allowed to be configured from subsites of multi-site installations.
|
760 |
+
- Fixed a bug with login lockdown feature.
|
761 |
+
|
762 |
+
= 2.2 =
|
763 |
+
- Added a new feature which will block some spambots from submitting comments.
|
764 |
+
- Moved Comment SPAM IP monitoring interface to the new "SPAM Prevention" menu.
|
765 |
+
- Fixed a bug with login lockdown feature for both multi and single site.
|
766 |
+
- Improved firewall feature for multi-site by making the "Firewall" menu available only for the main site and not the sub-sites.
|
767 |
+
- Added random prefix to backup file names.
|
768 |
+
- Fixed a bug for WP multi-site install where DB tables do not get created when new blog are created in the network.
|
769 |
+
|
770 |
+
= 2.1.1 =
|
771 |
+
- Fixed a version tagging issue.
|
772 |
+
|
773 |
+
= 2.1 =
|
774 |
+
- Fixed an issue with install time error on some sites for WordPress 3.6
|
775 |
+
- Fixed some WP Debug related errors for WordPress 3.6
|
776 |
+
- Replaced the deprecated $wpdb->escape() function calls with esc_sql() calls
|
777 |
+
|
778 |
+
= 2.0 =
|
779 |
+
- Fixed a bug for general DB backup functionality.
|
780 |
+
- Fixed multi-site DB backup - the plugin will now backup only the tables relevant for the sub-site in question.
|
781 |
+
- Added blank index.html files in various folders inside the plugin.
|
782 |
+
- Disabled the wp-config.php file backup feature until we find a more secure method of doing the backup.
|
783 |
+
|
784 |
+
= 1.9 =
|
785 |
+
- Added new WordPress PingBack Vulnerability Protection feature. This allows the user to prohibit access to the xmlrpc.php file in order to protect against certain vulnerabilities in the pingback functionality.
|
786 |
+
- Added a configuration item in the brute force login prevention feature to allow ajax functionality to work properly when this feature is enabled.
|
787 |
+
- Added a POT file for language translations.
|
788 |
+
- Made the DB Prefix feature more robust by adding a check to ensure that plugin can write to the wp-config.php file. This will prevent user from losing access to their site in cases where the system changed the prefix but not the entry in the wp-config.php file.
|
789 |
+
- Tightened the data validation for the cookie based brute force login feature to ensure that the user must enter a secret word which consists of alphanumeric characters.
|
790 |
+
- Added edit links to the user account list in the "User Acounts" menu.
|
791 |
+
|
792 |
+
= 1.8 =
|
793 |
+
- Moved the front end site lockout feature to a new menu called "Maintenance".
|
794 |
+
- Added a feature in the front-end lockout feature to allow people to specify their own message which will be displayed on the front-end to visitors who try to access the site when it is in lock out state.
|
795 |
+
- Fixed a bug in the front-end lockout feature by adding some checks which ensure that the admin will not get locked if the feature is still active and their login session expires or they log out.
|
796 |
+
- Added a widget in the dashboard menu to show the status of the "maintenance mode" feature.
|
797 |
+
|
798 |
+
= 1.7 =
|
799 |
+
- Added a new feature which is a password strength tool which calculates how easy it is for your chosen password to be cracked using a desktop PC and the appropriate SW. This tool should help you create strong passwords.
|
800 |
+
- Added a front-end general visitor lockout feature. This feature allows you to temporarily lock down the front end of your site while you do security investigation, site upgrades, tweaks etc.
|
801 |
+
|
802 |
+
= 1.6 =
|
803 |
+
- Added a new option in the cookie-based Brute Force Login Attack prevention feature to allow users to use this feature together with the WordPress's post/page password protection feature.
|
804 |
+
- Fixed a bug in the 5G firewall rules to so that the printed rules include the correct number of '\' characters.
|
805 |
+
- Fixed a minor bug in the "restore from backed up htaccess file" feature.
|
806 |
+
- Enhanced the "Save current wp-config.php file" feature so it will continue to work with all of the firewall rules active on the site.
|
807 |
+
- Added extra checks to account for some error scenarios caused on some servers when recursive file search is done.
|
808 |
+
|
809 |
+
= 1.5 =
|
810 |
+
- Added new feature - Cookie-based Brute Force Login Attack Prevention. Check under the "Firewall" menu for this new feature.
|
811 |
+
This feature will stop hackers in their tracks when they try to access your wp-admin or login pages. This feature will secure your WordPress backend by enforcing the requirement that anybody trying to access these pages will require a special cookie.
|
812 |
+
|
813 |
+
- Fixed bug related to setting of default configuration for first-time plugin activation.
|
814 |
+
|
815 |
+
= 1.4 =
|
816 |
+
- Tweaked the "Deny Bad Query Strings" firewall rules so that plugin deletion and update operations from the WordPress plugins menu are not affected.
|
817 |
+
- Fixed a minor bug related to scheduled database backups.
|
818 |
+
- Added some extra default settings to be applied to the plugin's configuration pages upon activation for the first time.
|
819 |
+
- Plugin will now display a recommendation message if user sets scheduled backup frequency to less than 24 hours.
|
820 |
+
|
821 |
+
= 1.3 =
|
822 |
+
- Added a new feature to remove the WordPress Generator Meta information from the HTML source of your site.
|
823 |
+
- Tweaked the "Advanced Character String Filter" to fix issue which was affecting plugins such as "Admin Management Xtended" and also pages with keywords such as "password" in the URL.
|
824 |
+
- Updated one rule in the "Advanced Character String Filter" feature to make it compatible with W3 Total Cache Plugin's minify feature.
|
825 |
+
- Added a "Delete All Failed Login Records" option in the "Failed Login Records" tab. This will delete all entries in the failed logins table and will make it less tedious for users who get a lot of brute force attacks on their site.
|
826 |
+
|
827 |
+
= 1.2 =
|
828 |
+
- Moved the rules which disable index views from the "basic firewall" rules to the "additional rules" section. This will prevent any site breakage for
|
829 |
+
those who want to enable the basic firewall but do not have "AllowOverride" option enabled in their httpd.conf
|
830 |
+
|
831 |
+
= 1.1 =
|
832 |
+
- Added the following new feature:
|
833 |
+
- Prevent people from accessing the readme.html, license.txt and wp-config-sample.php files.
|
834 |
+
|
835 |
+
= 1.0 =
|
836 |
+
- First commit to the WP repository.
|
tags/1.0/admin/general/wp-security-list-table.php
DELETED
@@ -1,907 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Base class for displaying a list of items in an ajaxified HTML table.
|
4 |
-
*/
|
5 |
-
class AIOWPSecurity_List_Table
|
6 |
-
{
|
7 |
-
/**
|
8 |
-
* The current list of items
|
9 |
-
*
|
10 |
-
* @since 3.1.0
|
11 |
-
* @var array
|
12 |
-
* @access protected
|
13 |
-
*/
|
14 |
-
var $items;
|
15 |
-
|
16 |
-
/**
|
17 |
-
* Various information about the current table
|
18 |
-
*
|
19 |
-
* @since 3.1.0
|
20 |
-
* @var array
|
21 |
-
* @access private
|
22 |
-
*/
|
23 |
-
var $_args;
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Various information needed for displaying the pagination
|
27 |
-
*
|
28 |
-
* @since 3.1.0
|
29 |
-
* @var array
|
30 |
-
* @access private
|
31 |
-
*/
|
32 |
-
var $_pagination_args = array();
|
33 |
-
|
34 |
-
/**
|
35 |
-
* The current screen
|
36 |
-
*
|
37 |
-
* @since 3.1.0
|
38 |
-
* @var object
|
39 |
-
* @access protected
|
40 |
-
*/
|
41 |
-
var $screen;
|
42 |
-
|
43 |
-
/**
|
44 |
-
* Cached bulk actions
|
45 |
-
*
|
46 |
-
* @since 3.1.0
|
47 |
-
* @var array
|
48 |
-
* @access private
|
49 |
-
*/
|
50 |
-
var $_actions;
|
51 |
-
|
52 |
-
/**
|
53 |
-
* Cached pagination output
|
54 |
-
*
|
55 |
-
* @since 3.1.0
|
56 |
-
* @var string
|
57 |
-
* @access private
|
58 |
-
*/
|
59 |
-
var $_pagination;
|
60 |
-
|
61 |
-
/**
|
62 |
-
* Constructor. The child class should call this constructor from it's own constructor
|
63 |
-
*
|
64 |
-
* @param array $args An associative array with information about the current table
|
65 |
-
* @access protected
|
66 |
-
*/
|
67 |
-
function __construct( $args = array() ) {
|
68 |
-
$args = wp_parse_args( $args, array(
|
69 |
-
'plural' => '',
|
70 |
-
'singular' => '',
|
71 |
-
'ajax' => false,
|
72 |
-
'screen' => null,
|
73 |
-
) );
|
74 |
-
|
75 |
-
$this->screen = convert_to_screen( $args['screen'] );
|
76 |
-
|
77 |
-
add_filter( "manage_{$this->screen->id}_columns", array( &$this, 'get_columns' ), 0 );
|
78 |
-
|
79 |
-
if ( !$args['plural'] )
|
80 |
-
$args['plural'] = $this->screen->base;
|
81 |
-
|
82 |
-
$args['plural'] = sanitize_key( $args['plural'] );
|
83 |
-
$args['singular'] = sanitize_key( $args['singular'] );
|
84 |
-
|
85 |
-
$this->_args = $args;
|
86 |
-
|
87 |
-
if ( $args['ajax'] ) {
|
88 |
-
// wp_enqueue_script( 'list-table' );
|
89 |
-
add_action( 'admin_footer', array( &$this, '_js_vars' ) );
|
90 |
-
}
|
91 |
-
}
|
92 |
-
|
93 |
-
/**
|
94 |
-
* Checks the current user's permissions
|
95 |
-
* @uses wp_die()
|
96 |
-
*
|
97 |
-
* @since 3.1.0
|
98 |
-
* @access public
|
99 |
-
* @abstract
|
100 |
-
*/
|
101 |
-
function ajax_user_can() {
|
102 |
-
die( 'function AIOWPSecurity_List_Table::ajax_user_can() must be over-ridden in a sub-class.' );
|
103 |
-
}
|
104 |
-
|
105 |
-
/**
|
106 |
-
* Prepares the list of items for displaying.
|
107 |
-
* @uses AIOWPSecurity_List_Table::set_pagination_args()
|
108 |
-
*
|
109 |
-
* @since 3.1.0
|
110 |
-
* @access public
|
111 |
-
* @abstract
|
112 |
-
*/
|
113 |
-
function prepare_items() {
|
114 |
-
die( 'function AIOWPSecurity_List_Table::prepare_items() must be over-ridden in a sub-class.' );
|
115 |
-
}
|
116 |
-
|
117 |
-
/**
|
118 |
-
* An internal method that sets all the necessary pagination arguments
|
119 |
-
*
|
120 |
-
* @param array $args An associative array with information about the pagination
|
121 |
-
* @access protected
|
122 |
-
*/
|
123 |
-
function set_pagination_args( $args ) {
|
124 |
-
$args = wp_parse_args( $args, array(
|
125 |
-
'total_items' => 0,
|
126 |
-
'total_pages' => 0,
|
127 |
-
'per_page' => 0,
|
128 |
-
) );
|
129 |
-
|
130 |
-
if ( !$args['total_pages'] && $args['per_page'] > 0 )
|
131 |
-
$args['total_pages'] = ceil( $args['total_items'] / $args['per_page'] );
|
132 |
-
|
133 |
-
// redirect if page number is invalid and headers are not already sent
|
134 |
-
if ( ! headers_sent() && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) && $args['total_pages'] > 0 && $this->get_pagenum() > $args['total_pages'] ) {
|
135 |
-
wp_redirect( add_query_arg( 'paged', $args['total_pages'] ) );
|
136 |
-
exit;
|
137 |
-
}
|
138 |
-
|
139 |
-
$this->_pagination_args = $args;
|
140 |
-
}
|
141 |
-
|
142 |
-
/**
|
143 |
-
* Access the pagination args
|
144 |
-
*
|
145 |
-
* @since 3.1.0
|
146 |
-
* @access public
|
147 |
-
*
|
148 |
-
* @param string $key
|
149 |
-
* @return array
|
150 |
-
*/
|
151 |
-
function get_pagination_arg( $key ) {
|
152 |
-
if ( 'page' == $key )
|
153 |
-
return $this->get_pagenum();
|
154 |
-
|
155 |
-
if ( isset( $this->_pagination_args[$key] ) )
|
156 |
-
return $this->_pagination_args[$key];
|
157 |
-
}
|
158 |
-
|
159 |
-
/**
|
160 |
-
* Whether the table has items to display or not
|
161 |
-
*
|
162 |
-
* @since 3.1.0
|
163 |
-
* @access public
|
164 |
-
*
|
165 |
-
* @return bool
|
166 |
-
*/
|
167 |
-
function has_items() {
|
168 |
-
return !empty( $this->items );
|
169 |
-
}
|
170 |
-
|
171 |
-
/**
|
172 |
-
* Message to be displayed when there are no items
|
173 |
-
*
|
174 |
-
* @since 3.1.0
|
175 |
-
* @access public
|
176 |
-
*/
|
177 |
-
function no_items() {
|
178 |
-
_e( 'No items found.' );
|
179 |
-
}
|
180 |
-
|
181 |
-
/**
|
182 |
-
* Display the search box.
|
183 |
-
*
|
184 |
-
* @since 3.1.0
|
185 |
-
* @access public
|
186 |
-
*
|
187 |
-
* @param string $text The search button text
|
188 |
-
* @param string $input_id The search input id
|
189 |
-
*/
|
190 |
-
function search_box( $text, $input_id ) {
|
191 |
-
if ( empty( $_REQUEST['s'] ) && !$this->has_items() )
|
192 |
-
return;
|
193 |
-
|
194 |
-
$input_id = $input_id . '-search-input';
|
195 |
-
|
196 |
-
if ( ! empty( $_REQUEST['orderby'] ) )
|
197 |
-
echo '<input type="hidden" name="orderby" value="' . esc_attr( $_REQUEST['orderby'] ) . '" />';
|
198 |
-
if ( ! empty( $_REQUEST['order'] ) )
|
199 |
-
echo '<input type="hidden" name="order" value="' . esc_attr( $_REQUEST['order'] ) . '" />';
|
200 |
-
if ( ! empty( $_REQUEST['post_mime_type'] ) )
|
201 |
-
echo '<input type="hidden" name="post_mime_type" value="' . esc_attr( $_REQUEST['post_mime_type'] ) . '" />';
|
202 |
-
if ( ! empty( $_REQUEST['detached'] ) )
|
203 |
-
echo '<input type="hidden" name="detached" value="' . esc_attr( $_REQUEST['detached'] ) . '" />';
|
204 |
-
?>
|
205 |
-
<p class="search-box">
|
206 |
-
<label class="screen-reader-text" for="<?php echo $input_id ?>"><?php echo $text; ?>:</label>
|
207 |
-
<input type="search" id="<?php echo $input_id ?>" name="s" value="<?php _admin_search_query(); ?>" />
|
208 |
-
<?php submit_button( $text, 'button', false, false, array('id' => 'search-submit') ); ?>
|
209 |
-
</p>
|
210 |
-
<?php
|
211 |
-
}
|
212 |
-
|
213 |
-
/**
|
214 |
-
* Get an associative array ( id => link ) with the list
|
215 |
-
* of views available on this table.
|
216 |
-
*
|
217 |
-
* @since 3.1.0
|
218 |
-
* @access protected
|
219 |
-
*
|
220 |
-
* @return array
|
221 |
-
*/
|
222 |
-
function get_views() {
|
223 |
-
return array();
|
224 |
-
}
|
225 |
-
|
226 |
-
/**
|
227 |
-
* Display the list of views available on this table.
|
228 |
-
*
|
229 |
-
* @since 3.1.0
|
230 |
-
* @access public
|
231 |
-
*/
|
232 |
-
function views() {
|
233 |
-
$views = $this->get_views();
|
234 |
-
$views = apply_filters( 'views_' . $this->screen->id, $views );
|
235 |
-
|
236 |
-
if ( empty( $views ) )
|
237 |
-
return;
|
238 |
-
|
239 |
-
echo "<ul class='subsubsub'>\n";
|
240 |
-
foreach ( $views as $class => $view ) {
|
241 |
-
$views[ $class ] = "\t<li class='$class'>$view";
|
242 |
-
}
|
243 |
-
echo implode( " |</li>\n", $views ) . "</li>\n";
|
244 |
-
echo "</ul>";
|
245 |
-
}
|
246 |
-
|
247 |
-
/**
|
248 |
-
* Get an associative array ( option_name => option_title ) with the list
|
249 |
-
* of bulk actions available on this table.
|
250 |
-
*
|
251 |
-
* @since 3.1.0
|
252 |
-
* @access protected
|
253 |
-
*
|
254 |
-
* @return array
|
255 |
-
*/
|
256 |
-
function get_bulk_actions() {
|
257 |
-
return array();
|
258 |
-
}
|
259 |
-
|
260 |
-
/**
|
261 |
-
* Display the bulk actions dropdown.
|
262 |
-
*
|
263 |
-
* @since 3.1.0
|
264 |
-
* @access public
|
265 |
-
*/
|
266 |
-
function bulk_actions() {
|
267 |
-
if ( is_null( $this->_actions ) ) {
|
268 |
-
$no_new_actions = $this->_actions = $this->get_bulk_actions();
|
269 |
-
// This filter can currently only be used to remove actions.
|
270 |
-
$this->_actions = apply_filters( 'bulk_actions-' . $this->screen->id, $this->_actions );
|
271 |
-
$this->_actions = array_intersect_assoc( $this->_actions, $no_new_actions );
|
272 |
-
$two = '';
|
273 |
-
} else {
|
274 |
-
$two = '2';
|
275 |
-
}
|
276 |
-
|
277 |
-
if ( empty( $this->_actions ) )
|
278 |
-
return;
|
279 |
-
|
280 |
-
echo "<select name='action$two'>\n";
|
281 |
-
echo "<option value='-1' selected='selected'>" . __( 'Bulk Actions' ) . "</option>\n";
|
282 |
-
|
283 |
-
foreach ( $this->_actions as $name => $title ) {
|
284 |
-
$class = 'edit' == $name ? ' class="hide-if-no-js"' : '';
|
285 |
-
|
286 |
-
echo "\t<option value='$name'$class>$title</option>\n";
|
287 |
-
}
|
288 |
-
|
289 |
-
echo "</select>\n";
|
290 |
-
|
291 |
-
submit_button( __( 'Apply' ), 'action', false, false, array( 'id' => "doaction$two" ) );
|
292 |
-
echo "\n";
|
293 |
-
}
|
294 |
-
|
295 |
-
/**
|
296 |
-
* Get the current action selected from the bulk actions dropdown.
|
297 |
-
*
|
298 |
-
* @since 3.1.0
|
299 |
-
* @access public
|
300 |
-
*
|
301 |
-
* @return string|bool The action name or False if no action was selected
|
302 |
-
*/
|
303 |
-
function current_action() {
|
304 |
-
if ( isset( $_REQUEST['action'] ) && -1 != $_REQUEST['action'] )
|
305 |
-
return $_REQUEST['action'];
|
306 |
-
|
307 |
-
if ( isset( $_REQUEST['action2'] ) && -1 != $_REQUEST['action2'] )
|
308 |
-
return $_REQUEST['action2'];
|
309 |
-
|
310 |
-
return false;
|
311 |
-
}
|
312 |
-
|
313 |
-
/**
|
314 |
-
* Generate row actions div
|
315 |
-
*
|
316 |
-
* @since 3.1.0
|
317 |
-
* @access protected
|
318 |
-
*
|
319 |
-
* @param array $actions The list of actions
|
320 |
-
* @param bool $always_visible Whether the actions should be always visible
|
321 |
-
* @return string
|
322 |
-
*/
|
323 |
-
function row_actions( $actions, $always_visible = false ) {
|
324 |
-
$action_count = count( $actions );
|
325 |
-
$i = 0;
|
326 |
-
|
327 |
-
if ( !$action_count )
|
328 |
-
return '';
|
329 |
-
|
330 |
-
$out = '<div class="' . ( $always_visible ? 'row-actions-visible' : 'row-actions' ) . '">';
|
331 |
-
foreach ( $actions as $action => $link ) {
|
332 |
-
++$i;
|
333 |
-
( $i == $action_count ) ? $sep = '' : $sep = ' | ';
|
334 |
-
$out .= "<span class='$action'>$link$sep</span>";
|
335 |
-
}
|
336 |
-
$out .= '</div>';
|
337 |
-
|
338 |
-
return $out;
|
339 |
-
}
|
340 |
-
|
341 |
-
/**
|
342 |
-
* Display a monthly dropdown for filtering items
|
343 |
-
*
|
344 |
-
* @since 3.1.0
|
345 |
-
* @access protected
|
346 |
-
*/
|
347 |
-
function months_dropdown( $post_type ) {
|
348 |
-
global $wpdb, $wp_locale;
|
349 |
-
|
350 |
-
$months = $wpdb->get_results( $wpdb->prepare( "
|
351 |
-
SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month
|
352 |
-
FROM $wpdb->posts
|
353 |
-
WHERE post_type = %s
|
354 |
-
ORDER BY post_date DESC
|
355 |
-
", $post_type ) );
|
356 |
-
|
357 |
-
$month_count = count( $months );
|
358 |
-
|
359 |
-
if ( !$month_count || ( 1 == $month_count && 0 == $months[0]->month ) )
|
360 |
-
return;
|
361 |
-
|
362 |
-
$m = isset( $_GET['m'] ) ? (int) $_GET['m'] : 0;
|
363 |
-
?>
|
364 |
-
<select name='m'>
|
365 |
-
<option<?php selected( $m, 0 ); ?> value='0'><?php _e( 'Show all dates' ); ?></option>
|
366 |
-
<?php
|
367 |
-
foreach ( $months as $arc_row ) {
|
368 |
-
if ( 0 == $arc_row->year )
|
369 |
-
continue;
|
370 |
-
|
371 |
-
$month = zeroise( $arc_row->month, 2 );
|
372 |
-
$year = $arc_row->year;
|
373 |
-
|
374 |
-
printf( "<option %s value='%s'>%s</option>\n",
|
375 |
-
selected( $m, $year . $month, false ),
|
376 |
-
esc_attr( $arc_row->year . $month ),
|
377 |
-
/* translators: 1: month name, 2: 4-digit year */
|
378 |
-
sprintf( __( '%1$s %2$d' ), $wp_locale->get_month( $month ), $year )
|
379 |
-
);
|
380 |
-
}
|
381 |
-
?>
|
382 |
-
</select>
|
383 |
-
<?php
|
384 |
-
}
|
385 |
-
|
386 |
-
/**
|
387 |
-
* Display a view switcher
|
388 |
-
*
|
389 |
-
* @since 3.1.0
|
390 |
-
* @access protected
|
391 |
-
*/
|
392 |
-
function view_switcher( $current_mode ) {
|
393 |
-
$modes = array(
|
394 |
-
'list' => __( 'List View' ),
|
395 |
-
'excerpt' => __( 'Excerpt View' )
|
396 |
-
);
|
397 |
-
|
398 |
-
?>
|
399 |
-
<input type="hidden" name="mode" value="<?php echo esc_attr( $current_mode ); ?>" />
|
400 |
-
<div class="view-switch">
|
401 |
-
<?php
|
402 |
-
foreach ( $modes as $mode => $title ) {
|
403 |
-
$class = ( $current_mode == $mode ) ? 'class="current"' : '';
|
404 |
-
echo "<a href='" . esc_url( add_query_arg( 'mode', $mode, $_SERVER['REQUEST_URI'] ) ) . "' $class><img id='view-switch-$mode' src='" . esc_url( includes_url( 'images/blank.gif' ) ) . "' width='20' height='20' title='$title' alt='$title' /></a>\n";
|
405 |
-
}
|
406 |
-
?>
|
407 |
-
</div>
|
408 |
-
<?php
|
409 |
-
}
|
410 |
-
|
411 |
-
/**
|
412 |
-
* Display a comment count bubble
|
413 |
-
*
|
414 |
-
* @since 3.1.0
|
415 |
-
* @access protected
|
416 |
-
*
|
417 |
-
* @param int $post_id
|
418 |
-
* @param int $pending_comments
|
419 |
-
*/
|
420 |
-
function comments_bubble( $post_id, $pending_comments ) {
|
421 |
-
$pending_phrase = sprintf( __( '%s pending' ), number_format( $pending_comments ) );
|
422 |
-
|
423 |
-
if ( $pending_comments )
|
424 |
-
echo '<strong>';
|
425 |
-
|
426 |
-
echo "<a href='" . esc_url( add_query_arg( 'p', $post_id, admin_url( 'edit-comments.php' ) ) ) . "' title='" . esc_attr( $pending_phrase ) . "' class='post-com-count'><span class='comment-count'>" . number_format_i18n( get_comments_number() ) . "</span></a>";
|
427 |
-
|
428 |
-
if ( $pending_comments )
|
429 |
-
echo '</strong>';
|
430 |
-
}
|
431 |
-
|
432 |
-
/**
|
433 |
-
* Get the current page number
|
434 |
-
*
|
435 |
-
* @since 3.1.0
|
436 |
-
* @access protected
|
437 |
-
*
|
438 |
-
* @return int
|
439 |
-
*/
|
440 |
-
function get_pagenum() {
|
441 |
-
$pagenum = isset( $_REQUEST['paged'] ) ? absint( $_REQUEST['paged'] ) : 0;
|
442 |
-
|
443 |
-
if( isset( $this->_pagination_args['total_pages'] ) && $pagenum > $this->_pagination_args['total_pages'] )
|
444 |
-
$pagenum = $this->_pagination_args['total_pages'];
|
445 |
-
|
446 |
-
return max( 1, $pagenum );
|
447 |
-
}
|
448 |
-
|
449 |
-
/**
|
450 |
-
* Get number of items to display on a single page
|
451 |
-
*
|
452 |
-
* @since 3.1.0
|
453 |
-
* @access protected
|
454 |
-
*
|
455 |
-
* @return int
|
456 |
-
*/
|
457 |
-
function get_items_per_page( $option, $default = 20 ) {
|
458 |
-
$per_page = (int) get_user_option( $option );
|
459 |
-
if ( empty( $per_page ) || $per_page < 1 )
|
460 |
-
$per_page = $default;
|
461 |
-
|
462 |
-
return (int) apply_filters( $option, $per_page );
|
463 |
-
}
|
464 |
-
|
465 |
-
/**
|
466 |
-
* Display the pagination.
|
467 |
-
*
|
468 |
-
* @since 3.1.0
|
469 |
-
* @access protected
|
470 |
-
*/
|
471 |
-
function pagination( $which ) {
|
472 |
-
if ( empty( $this->_pagination_args ) )
|
473 |
-
return;
|
474 |
-
|
475 |
-
extract( $this->_pagination_args, EXTR_SKIP );
|
476 |
-
|
477 |
-
$output = '<span class="displaying-num">' . sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) ) . '</span>';
|
478 |
-
|
479 |
-
$current = $this->get_pagenum();
|
480 |
-
|
481 |
-
$current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
|
482 |
-
|
483 |
-
$current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first' ), $current_url );
|
484 |
-
|
485 |
-
$page_links = array();
|
486 |
-
|
487 |
-
$disable_first = $disable_last = '';
|
488 |
-
if ( $current == 1 )
|
489 |
-
$disable_first = ' disabled';
|
490 |
-
if ( $current == $total_pages )
|
491 |
-
$disable_last = ' disabled';
|
492 |
-
|
493 |
-
$page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
|
494 |
-
'first-page' . $disable_first,
|
495 |
-
esc_attr__( 'Go to the first page' ),
|
496 |
-
esc_url( remove_query_arg( 'paged', $current_url ) ),
|
497 |
-
'«'
|
498 |
-
);
|
499 |
-
|
500 |
-
$page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
|
501 |
-
'prev-page' . $disable_first,
|
502 |
-
esc_attr__( 'Go to the previous page' ),
|
503 |
-
esc_url( add_query_arg( 'paged', max( 1, $current-1 ), $current_url ) ),
|
504 |
-
'‹'
|
505 |
-
);
|
506 |
-
|
507 |
-
if ( 'bottom' == $which )
|
508 |
-
$html_current_page = $current;
|
509 |
-
else
|
510 |
-
$html_current_page = sprintf( "<input class='current-page' title='%s' type='text' name='paged' value='%s' size='%d' />",
|
511 |
-
esc_attr__( 'Current page' ),
|
512 |
-
$current,
|
513 |
-
strlen( $total_pages )
|
514 |
-
);
|
515 |
-
|
516 |
-
$html_total_pages = sprintf( "<span class='total-pages'>%s</span>", number_format_i18n( $total_pages ) );
|
517 |
-
$page_links[] = '<span class="paging-input">' . sprintf( _x( '%1$s of %2$s', 'paging' ), $html_current_page, $html_total_pages ) . '</span>';
|
518 |
-
|
519 |
-
$page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
|
520 |
-
'next-page' . $disable_last,
|
521 |
-
esc_attr__( 'Go to the next page' ),
|
522 |
-
esc_url( add_query_arg( 'paged', min( $total_pages, $current+1 ), $current_url ) ),
|
523 |
-
'›'
|
524 |
-
);
|
525 |
-
|
526 |
-
$page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
|
527 |
-
'last-page' . $disable_last,
|
528 |
-
esc_attr__( 'Go to the last page' ),
|
529 |
-
esc_url( add_query_arg( 'paged', $total_pages, $current_url ) ),
|
530 |
-
'»'
|
531 |
-
);
|
532 |
-
|
533 |
-
$pagination_links_class = 'pagination-links';
|
534 |
-
if ( ! empty( $infinite_scroll ) )
|
535 |
-
$pagination_links_class = ' hide-if-js';
|
536 |
-
$output .= "\n<span class='$pagination_links_class'>" . join( "\n", $page_links ) . '</span>';
|
537 |
-
|
538 |
-
if ( $total_pages )
|
539 |
-
$page_class = $total_pages < 2 ? ' one-page' : '';
|
540 |
-
else
|
541 |
-
$page_class = ' no-pages';
|
542 |
-
|
543 |
-
$this->_pagination = "<div class='tablenav-pages{$page_class}'>$output</div>";
|
544 |
-
|
545 |
-
echo $this->_pagination;
|
546 |
-
}
|
547 |
-
|
548 |
-
/**
|
549 |
-
* Get a list of columns. The format is:
|
550 |
-
* 'internal-name' => 'Title'
|
551 |
-
*
|
552 |
-
* @since 3.1.0
|
553 |
-
* @access protected
|
554 |
-
* @abstract
|
555 |
-
*
|
556 |
-
* @return array
|
557 |
-
*/
|
558 |
-
function get_columns() {
|
559 |
-
die( 'function AIOWPSecurity_List_Table::get_columns() must be over-ridden in a sub-class.' );
|
560 |
-
}
|
561 |
-
|
562 |
-
/**
|
563 |
-
* Get a list of sortable columns. The format is:
|
564 |
-
* 'internal-name' => 'orderby'
|
565 |
-
* or
|
566 |
-
* 'internal-name' => array( 'orderby', true )
|
567 |
-
*
|
568 |
-
* The second format will make the initial sorting order be descending
|
569 |
-
*
|
570 |
-
* @since 3.1.0
|
571 |
-
* @access protected
|
572 |
-
*
|
573 |
-
* @return array
|
574 |
-
*/
|
575 |
-
function get_sortable_columns() {
|
576 |
-
return array();
|
577 |
-
}
|
578 |
-
|
579 |
-
/**
|
580 |
-
* Get a list of all, hidden and sortable columns, with filter applied
|
581 |
-
*
|
582 |
-
* @since 3.1.0
|
583 |
-
* @access protected
|
584 |
-
*
|
585 |
-
* @return array
|
586 |
-
*/
|
587 |
-
function get_column_info() {
|
588 |
-
if ( isset( $this->_column_headers ) )
|
589 |
-
return $this->_column_headers;
|
590 |
-
|
591 |
-
$columns = get_column_headers( $this->screen );
|
592 |
-
$hidden = get_hidden_columns( $this->screen );
|
593 |
-
|
594 |
-
$_sortable = apply_filters( "manage_{$this->screen->id}_sortable_columns", $this->get_sortable_columns() );
|
595 |
-
|
596 |
-
$sortable = array();
|
597 |
-
foreach ( $_sortable as $id => $data ) {
|
598 |
-
if ( empty( $data ) )
|
599 |
-
continue;
|
600 |
-
|
601 |
-
$data = (array) $data;
|
602 |
-
if ( !isset( $data[1] ) )
|
603 |
-
$data[1] = false;
|
604 |
-
|
605 |
-
$sortable[$id] = $data;
|
606 |
-
}
|
607 |
-
|
608 |
-
$this->_column_headers = array( $columns, $hidden, $sortable );
|
609 |
-
|
610 |
-
return $this->_column_headers;
|
611 |
-
}
|
612 |
-
|
613 |
-
/**
|
614 |
-
* Return number of visible columns
|
615 |
-
*
|
616 |
-
* @since 3.1.0
|
617 |
-
* @access public
|
618 |
-
*
|
619 |
-
* @return int
|
620 |
-
*/
|
621 |
-
function get_column_count() {
|
622 |
-
list ( $columns, $hidden ) = $this->get_column_info();
|
623 |
-
$hidden = array_intersect( array_keys( $columns ), array_filter( $hidden ) );
|
624 |
-
return count( $columns ) - count( $hidden );
|
625 |
-
}
|
626 |
-
|
627 |
-
/**
|
628 |
-
* Print column headers, accounting for hidden and sortable columns.
|
629 |
-
*
|
630 |
-
* @since 3.1.0
|
631 |
-
* @access protected
|
632 |
-
*
|
633 |
-
* @param bool $with_id Whether to set the id attribute or not
|
634 |
-
*/
|
635 |
-
function print_column_headers( $with_id = true ) {
|
636 |
-
list( $columns, $hidden, $sortable ) = $this->get_column_info();
|
637 |
-
|
638 |
-
$current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
|
639 |
-
$current_url = remove_query_arg( 'paged', $current_url );
|
640 |
-
|
641 |
-
if ( isset( $_GET['orderby'] ) )
|
642 |
-
$current_orderby = $_GET['orderby'];
|
643 |
-
else
|
644 |
-
$current_orderby = '';
|
645 |
-
|
646 |
-
if ( isset( $_GET['order'] ) && 'desc' == $_GET['order'] )
|
647 |
-
$current_order = 'desc';
|
648 |
-
else
|
649 |
-
$current_order = 'asc';
|
650 |
-
|
651 |
-
if ( ! empty( $columns['cb'] ) ) {
|
652 |
-
static $cb_counter = 1;
|
653 |
-
$columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __( 'Select All' ) . '</label>'
|
654 |
-
. '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" />';
|
655 |
-
$cb_counter++;
|
656 |
-
}
|
657 |
-
|
658 |
-
foreach ( $columns as $column_key => $column_display_name ) {
|
659 |
-
$class = array( 'manage-column', "column-$column_key" );
|
660 |
-
|
661 |
-
$style = '';
|
662 |
-
if ( in_array( $column_key, $hidden ) )
|
663 |
-
$style = 'display:none;';
|
664 |
-
|
665 |
-
$style = ' style="' . $style . '"';
|
666 |
-
|
667 |
-
if ( 'cb' == $column_key )
|
668 |
-
$class[] = 'check-column';
|
669 |
-
elseif ( in_array( $column_key, array( 'posts', 'comments', 'links' ) ) )
|
670 |
-
$class[] = 'num';
|
671 |
-
|
672 |
-
if ( isset( $sortable[$column_key] ) ) {
|
673 |
-
list( $orderby, $desc_first ) = $sortable[$column_key];
|
674 |
-
|
675 |
-
if ( $current_orderby == $orderby ) {
|
676 |
-
$order = 'asc' == $current_order ? 'desc' : 'asc';
|
677 |
-
$class[] = 'sorted';
|
678 |
-
$class[] = $current_order;
|
679 |
-
} else {
|
680 |
-
$order = $desc_first ? 'desc' : 'asc';
|
681 |
-
$class[] = 'sortable';
|
682 |
-
$class[] = $desc_first ? 'asc' : 'desc';
|
683 |
-
}
|
684 |
-
|
685 |
-
$column_display_name = '<a href="' . esc_url( add_query_arg( compact( 'orderby', 'order' ), $current_url ) ) . '"><span>' . $column_display_name . '</span><span class="sorting-indicator"></span></a>';
|
686 |
-
}
|
687 |
-
|
688 |
-
$id = $with_id ? "id='$column_key'" : '';
|
689 |
-
|
690 |
-
if ( !empty( $class ) )
|
691 |
-
$class = "class='" . join( ' ', $class ) . "'";
|
692 |
-
|
693 |
-
echo "<th scope='col' $id $class $style>$column_display_name</th>";
|
694 |
-
}
|
695 |
-
}
|
696 |
-
|
697 |
-
/**
|
698 |
-
* Display the table
|
699 |
-
*
|
700 |
-
* @since 3.1.0
|
701 |
-
* @access public
|
702 |
-
*/
|
703 |
-
function display() {
|
704 |
-
extract( $this->_args );
|
705 |
-
|
706 |
-
$this->display_tablenav( 'top' );
|
707 |
-
|
708 |
-
?>
|
709 |
-
<table class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>" cellspacing="0">
|
710 |
-
<thead>
|
711 |
-
<tr>
|
712 |
-
<?php $this->print_column_headers(); ?>
|
713 |
-
</tr>
|
714 |
-
</thead>
|
715 |
-
|
716 |
-
<tfoot>
|
717 |
-
<tr>
|
718 |
-
<?php $this->print_column_headers( false ); ?>
|
719 |
-
</tr>
|
720 |
-
</tfoot>
|
721 |
-
|
722 |
-
<tbody id="the-list"<?php if ( $singular ) echo " data-wp-lists='list:$singular'"; ?>>
|
723 |
-
<?php $this->display_rows_or_placeholder(); ?>
|
724 |
-
</tbody>
|
725 |
-
</table>
|
726 |
-
<?php
|
727 |
-
$this->display_tablenav( 'bottom' );
|
728 |
-
}
|
729 |
-
|
730 |
-
/**
|
731 |
-
* Get a list of CSS classes for the <table> tag
|
732 |
-
*
|
733 |
-
* @since 3.1.0
|
734 |
-
* @access protected
|
735 |
-
*
|
736 |
-
* @return array
|
737 |
-
*/
|
738 |
-
function get_table_classes() {
|
739 |
-
return array( 'widefat', 'fixed', $this->_args['plural'] );
|
740 |
-
}
|
741 |
-
|
742 |
-
/**
|
743 |
-
* Generate the table navigation above or below the table
|
744 |
-
*
|
745 |
-
* @since 3.1.0
|
746 |
-
* @access protected
|
747 |
-
*/
|
748 |
-
function display_tablenav( $which ) {
|
749 |
-
if ( 'top' == $which )
|
750 |
-
wp_nonce_field( 'bulk-' . $this->_args['plural'] );
|
751 |
-
?>
|
752 |
-
<div class="tablenav <?php echo esc_attr( $which ); ?>">
|
753 |
-
|
754 |
-
<div class="alignleft actions">
|
755 |
-
<?php $this->bulk_actions(); ?>
|
756 |
-
</div>
|
757 |
-
<?php
|
758 |
-
$this->extra_tablenav( $which );
|
759 |
-
$this->pagination( $which );
|
760 |
-
?>
|
761 |
-
|
762 |
-
<br class="clear" />
|
763 |
-
</div>
|
764 |
-
<?php
|
765 |
-
}
|
766 |
-
|
767 |
-
/**
|
768 |
-
* Extra controls to be displayed between bulk actions and pagination
|
769 |
-
*
|
770 |
-
* @since 3.1.0
|
771 |
-
* @access protected
|
772 |
-
*/
|
773 |
-
function extra_tablenav( $which ) {}
|
774 |
-
|
775 |
-
/**
|
776 |
-
* Generate the <tbody> part of the table
|
777 |
-
*
|
778 |
-
* @since 3.1.0
|
779 |
-
* @access protected
|
780 |
-
*/
|
781 |
-
function display_rows_or_placeholder() {
|
782 |
-
if ( $this->has_items() ) {
|
783 |
-
$this->display_rows();
|
784 |
-
} else {
|
785 |
-
list( $columns, $hidden ) = $this->get_column_info();
|
786 |
-
echo '<tr class="no-items"><td class="colspanchange" colspan="' . $this->get_column_count() . '">';
|
787 |
-
$this->no_items();
|
788 |
-
echo '</td></tr>';
|
789 |
-
}
|
790 |
-
}
|
791 |
-
|
792 |
-
/**
|
793 |
-
* Generate the table rows
|
794 |
-
*
|
795 |
-
* @since 3.1.0
|
796 |
-
* @access protected
|
797 |
-
*/
|
798 |
-
function display_rows() {
|
799 |
-
foreach ( $this->items as $item )
|
800 |
-
$this->single_row( $item );
|
801 |
-
}
|
802 |
-
|
803 |
-
/**
|
804 |
-
* Generates content for a single row of the table
|
805 |
-
*
|
806 |
-
* @since 3.1.0
|
807 |
-
* @access protected
|
808 |
-
*
|
809 |
-
* @param object $item The current item
|
810 |
-
*/
|
811 |
-
function single_row( $item ) {
|
812 |
-
static $row_class = '';
|
813 |
-
$row_class = ( $row_class == '' ? ' class="alternate"' : '' );
|
814 |
-
|
815 |
-
echo '<tr' . $row_class . '>';
|
816 |
-
echo $this->single_row_columns( $item );
|
817 |
-
echo '</tr>';
|
818 |
-
}
|
819 |
-
|
820 |
-
/**
|
821 |
-
* Generates the columns for a single row of the table
|
822 |
-
*
|
823 |
-
* @since 3.1.0
|
824 |
-
* @access protected
|
825 |
-
*
|
826 |
-
* @param object $item The current item
|
827 |
-
*/
|
828 |
-
function single_row_columns( $item ) {
|
829 |
-
list( $columns, $hidden ) = $this->get_column_info();
|
830 |
-
|
831 |
-
foreach ( $columns as $column_name => $column_display_name ) {
|
832 |
-
$class = "class='$column_name column-$column_name'";
|
833 |
-
|
834 |
-
$style = '';
|
835 |
-
if ( in_array( $column_name, $hidden ) )
|
836 |
-
$style = ' style="display:none;"';
|
837 |
-
|
838 |
-
$attributes = "$class$style";
|
839 |
-
|
840 |
-
if ( 'cb' == $column_name ) {
|
841 |
-
echo '<th scope="row" class="check-column">';
|
842 |
-
echo $this->column_cb( $item );
|
843 |
-
echo '</th>';
|
844 |
-
}
|
845 |
-
elseif ( method_exists( $this, 'column_' . $column_name ) ) {
|
846 |
-
echo "<td $attributes>";
|
847 |
-
echo call_user_func( array( &$this, 'column_' . $column_name ), $item );
|
848 |
-
echo "</td>";
|
849 |
-
}
|
850 |
-
else {
|
851 |
-
echo "<td $attributes>";
|
852 |
-
echo $this->column_default( $item, $column_name );
|
853 |
-
echo "</td>";
|
854 |
-
}
|
855 |
-
}
|
856 |
-
}
|
857 |
-
|
858 |
-
/**
|
859 |
-
* Handle an incoming ajax request (called from admin-ajax.php)
|
860 |
-
*
|
861 |
-
* @since 3.1.0
|
862 |
-
* @access public
|
863 |
-
*/
|
864 |
-
function ajax_response() {
|
865 |
-
$this->prepare_items();
|
866 |
-
|
867 |
-
extract( $this->_args );
|
868 |
-
extract( $this->_pagination_args, EXTR_SKIP );
|
869 |
-
|
870 |
-
ob_start();
|
871 |
-
if ( ! empty( $_REQUEST['no_placeholder'] ) )
|
872 |
-
$this->display_rows();
|
873 |
-
else
|
874 |
-
$this->display_rows_or_placeholder();
|
875 |
-
|
876 |
-
$rows = ob_get_clean();
|
877 |
-
|
878 |
-
$response = array( 'rows' => $rows );
|
879 |
-
|
880 |
-
if ( isset( $total_items ) )
|
881 |
-
$response['total_items_i18n'] = sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) );
|
882 |
-
|
883 |
-
if ( isset( $total_pages ) ) {
|
884 |
-
$response['total_pages'] = $total_pages;
|
885 |
-
$response['total_pages_i18n'] = number_format_i18n( $total_pages );
|
886 |
-
}
|
887 |
-
|
888 |
-
die( json_encode( $response ) );
|
889 |
-
}
|
890 |
-
|
891 |
-
/**
|
892 |
-
* Send required variables to JavaScript land
|
893 |
-
*
|
894 |
-
* @access private
|
895 |
-
*/
|
896 |
-
function _js_vars() {
|
897 |
-
$args = array(
|
898 |
-
'class' => get_class( $this ),
|
899 |
-
'screen' => array(
|
900 |
-
'id' => $this->screen->id,
|
901 |
-
'base' => $this->screen->base,
|
902 |
-
)
|
903 |
-
);
|
904 |
-
|
905 |
-
printf( "<script type='text/javascript'>list_args = %s;</script>\n", json_encode( $args ) );
|
906 |
-
}
|
907 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/admin/wp-security-admin-init.php
DELETED
@@ -1,167 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
* Inits the admin dashboard side of things.
|
4 |
-
* Main admin file which loads all settings panels and sets up admin menus.
|
5 |
-
*/
|
6 |
-
class AIOWPSecurity_Admin_Init
|
7 |
-
{
|
8 |
-
var $main_menu_page;
|
9 |
-
var $dashboard_menu;
|
10 |
-
var $settings_menu;
|
11 |
-
var $user_accounts_menu;
|
12 |
-
var $user_login_menu;
|
13 |
-
var $db_security_menu;
|
14 |
-
var $filesystem_menu;
|
15 |
-
var $whois_menu;
|
16 |
-
var $blacklist_menu;
|
17 |
-
var $firewall_menu;
|
18 |
-
|
19 |
-
function __construct()
|
20 |
-
{
|
21 |
-
$this->admin_includes();
|
22 |
-
add_action('admin_menu', array(&$this, 'create_admin_menus'));
|
23 |
-
|
24 |
-
//make sure we are on our plugin's menu pages
|
25 |
-
if (isset($_GET['page']) && strpos($_GET['page'], AIOWPSEC_MENU_SLUG_PREFIX ) !== false ) {
|
26 |
-
add_action('admin_print_scripts', array(&$this, 'admin_menu_page_scripts'));
|
27 |
-
add_action('admin_print_styles', array(&$this, 'admin_menu_page_styles'));
|
28 |
-
add_action('admin_init', array( &$this, 'admin_init_hook_handler')); //For changing button text inside media uploader (thickbox)
|
29 |
-
}
|
30 |
-
}
|
31 |
-
|
32 |
-
function admin_includes()
|
33 |
-
{
|
34 |
-
include_once('wp-security-admin-menu.php');
|
35 |
-
}
|
36 |
-
|
37 |
-
function admin_menu_page_scripts()
|
38 |
-
{
|
39 |
-
wp_enqueue_script('jquery');
|
40 |
-
wp_enqueue_script('postbox');
|
41 |
-
wp_enqueue_script('dashboard');
|
42 |
-
wp_enqueue_script('thickbox');
|
43 |
-
wp_enqueue_script('media-upload');
|
44 |
-
wp_register_script('aiowpsec-admin-js', AIO_WP_SECURITY_URL. '/js/wp-security-admin-script.js', array('jquery'));
|
45 |
-
wp_enqueue_script('aiowpsec-admin-js');
|
46 |
-
}
|
47 |
-
|
48 |
-
function admin_menu_page_styles()
|
49 |
-
{
|
50 |
-
wp_enqueue_style('dashboard');
|
51 |
-
wp_enqueue_style('thickbox');
|
52 |
-
wp_enqueue_style('global');
|
53 |
-
wp_enqueue_style('wp-admin');
|
54 |
-
wp_enqueue_style('aiowpsec-admin-css', AIO_WP_SECURITY_URL. '/css/wp-security-admin-styles.css');
|
55 |
-
}
|
56 |
-
|
57 |
-
function admin_init_hook_handler()
|
58 |
-
{
|
59 |
-
$this->aiowps_media_uploader_modification();
|
60 |
-
$this->initialize_feature_manager();
|
61 |
-
}
|
62 |
-
|
63 |
-
//For media uploader thickbox - change button text
|
64 |
-
function aiowps_media_uploader_modification()
|
65 |
-
{
|
66 |
-
global $pagenow;
|
67 |
-
if ('media-upload.php' == $pagenow || 'async-upload.php' == $pagenow)
|
68 |
-
{
|
69 |
-
// Here we will customize the 'Insert into Post' Button text inside Thickbox
|
70 |
-
add_filter( 'gettext', array($this, 'aiowps_media_uploader_replace_thickbox_text'), 1, 2);
|
71 |
-
}
|
72 |
-
}
|
73 |
-
|
74 |
-
function aiowps_media_uploader_replace_thickbox_text($translated_text, $text)
|
75 |
-
{
|
76 |
-
if ('Insert into Post' == $text)
|
77 |
-
{
|
78 |
-
$referer = strpos(wp_get_referer(), 'aiowpsec');
|
79 |
-
if ($referer != '')
|
80 |
-
{
|
81 |
-
return ('Select File');
|
82 |
-
}
|
83 |
-
}
|
84 |
-
return $translated_text;
|
85 |
-
}
|
86 |
-
|
87 |
-
function initialize_feature_manager()
|
88 |
-
{
|
89 |
-
$aiowps_feature_mgr = new AIOWPSecurity_Feature_Item_Manager();
|
90 |
-
$aiowps_feature_mgr->initialize_features();
|
91 |
-
$aiowps_feature_mgr->check_and_set_feature_status();
|
92 |
-
$aiowps_feature_mgr->calculate_total_points();
|
93 |
-
$GLOBALS['aiowps_feature_mgr'] = $aiowps_feature_mgr;
|
94 |
-
}
|
95 |
-
|
96 |
-
function create_admin_menus()
|
97 |
-
{
|
98 |
-
$menu_icon_url = AIO_WP_SECURITY_URL.'/images/plugin-icon.png';
|
99 |
-
$this->main_menu_page = add_menu_page(__('WP Security', 'aiowpsecurity'), __('WP Security', 'aiowpsecurity'), AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_MAIN_MENU_SLUG , array(&$this, 'handle_dashboard_menu_rendering'), $menu_icon_url);
|
100 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Dashboard', 'aiowpsecurity'), __('Dashboard', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_MAIN_MENU_SLUG, array(&$this, 'handle_dashboard_menu_rendering'));
|
101 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Settings', 'aiowpsecurity'), __('Settings', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_SETTINGS_MENU_SLUG, array(&$this, 'handle_settings_menu_rendering'));
|
102 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('User Accounts', 'aiowpsecurity'), __('User Accounts', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_USER_ACCOUNTS_MENU_SLUG, array(&$this, 'handle_user_accounts_menu_rendering'));
|
103 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('User Login', 'aiowpsecurity'), __('User Login', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_USER_LOGIN_MENU_SLUG, array(&$this, 'handle_user_login_menu_rendering'));
|
104 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Database Security', 'aiowpsecurity'), __('Database Security', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_DB_SEC_MENU_SLUG, array(&$this, 'handle_database_menu_rendering'));
|
105 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Filesystem Security', 'aiowpsecurity'), __('Filesystem Security', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_FILESYSTEM_MENU_SLUG, array(&$this, 'handle_filesystem_menu_rendering'));
|
106 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('WHOIS Lookup', 'aiowpsecurity'), __('WHOIS Lookup', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_WHOIS_MENU_SLUG, array(&$this, 'handle_whois_menu_rendering'));
|
107 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Blacklist Manager', 'aiowpsecurity'), __('Blacklist Manager', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_BLACKLIST_MENU_SLUG, array(&$this, 'handle_blacklist_menu_rendering'));
|
108 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Firewall', 'aiowpsecurity'), __('Firewall', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_FIREWALL_MENU_SLUG, array(&$this, 'handle_firewall_menu_rendering'));
|
109 |
-
do_action('aiowpsecurity_admin_menu_created');
|
110 |
-
}
|
111 |
-
|
112 |
-
function handle_dashboard_menu_rendering()
|
113 |
-
{
|
114 |
-
include_once('wp-security-dashboard-menu.php');
|
115 |
-
$this->dashboard_menu = new AIOWPSecurity_Dashboard_Menu();
|
116 |
-
}
|
117 |
-
|
118 |
-
function handle_settings_menu_rendering()
|
119 |
-
{
|
120 |
-
include_once('wp-security-settings-menu.php');
|
121 |
-
$this->settings_menu = new AIOWPSecurity_Settings_Menu();
|
122 |
-
|
123 |
-
}
|
124 |
-
|
125 |
-
function handle_user_accounts_menu_rendering()
|
126 |
-
{
|
127 |
-
include_once('wp-security-user-accounts-menu.php');
|
128 |
-
$this->user_accounts_menu = new AIOWPSecurity_User_Accounts_Menu();
|
129 |
-
}
|
130 |
-
|
131 |
-
function handle_user_login_menu_rendering()
|
132 |
-
{
|
133 |
-
include_once('wp-security-user-login-menu.php');
|
134 |
-
$this->user_login_menu = new AIOWPSecurity_User_Login_Menu();
|
135 |
-
}
|
136 |
-
|
137 |
-
function handle_database_menu_rendering()
|
138 |
-
{
|
139 |
-
include_once('wp-security-database-menu.php');
|
140 |
-
$this->db_security_menu = new AIOWPSecurity_Database_Menu();
|
141 |
-
}
|
142 |
-
|
143 |
-
function handle_filesystem_menu_rendering()
|
144 |
-
{
|
145 |
-
include_once('wp-security-filesystem-menu.php');
|
146 |
-
$this->filesystem_menu = new AIOWPSecurity_Filescan_Menu();
|
147 |
-
}
|
148 |
-
|
149 |
-
function handle_whois_menu_rendering()
|
150 |
-
{
|
151 |
-
include_once('wp-security-whois-menu.php');
|
152 |
-
$this->whois_menu = new AIOWPSecurity_WhoIs_Menu();
|
153 |
-
}
|
154 |
-
|
155 |
-
function handle_blacklist_menu_rendering()
|
156 |
-
{
|
157 |
-
include_once('wp-security-blacklist-menu.php');
|
158 |
-
$this->blacklist_menu = new AIOWPSecurity_Blacklist_Menu();
|
159 |
-
}
|
160 |
-
|
161 |
-
function handle_firewall_menu_rendering()
|
162 |
-
{
|
163 |
-
include_once('wp-security-firewall-menu.php');
|
164 |
-
$this->firewall_menu = new AIOWPSecurity_Firewall_Menu();
|
165 |
-
}
|
166 |
-
}//End of class
|
167 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/admin/wp-security-admin-menu.php
DELETED
@@ -1,93 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/* Parent class for all admin menu classes */
|
4 |
-
abstract class AIOWPSecurity_Admin_Menu
|
5 |
-
{
|
6 |
-
/**
|
7 |
-
* Shows postbox for settings menu
|
8 |
-
*
|
9 |
-
* @param string $id css ID for postbox
|
10 |
-
* @param string $title title of the postbox section
|
11 |
-
* @param string $content the content of the postbox
|
12 |
-
**/
|
13 |
-
function postbox_toggle($id, $title, $content)
|
14 |
-
{
|
15 |
-
//Always send string with translation markers in it
|
16 |
-
?>
|
17 |
-
<div id="<?php echo $id; ?>" class="postbox">
|
18 |
-
<div class="handlediv" title="Click to toggle"><br /></div>
|
19 |
-
<h3 class="hndle"><span><?php echo $title; ?></span></h3>
|
20 |
-
<div class="inside">
|
21 |
-
<?php echo $content; ?>
|
22 |
-
</div>
|
23 |
-
</div>
|
24 |
-
<?php
|
25 |
-
}
|
26 |
-
|
27 |
-
function postbox($title, $content)
|
28 |
-
{
|
29 |
-
//Always send string with translation markers in it
|
30 |
-
?>
|
31 |
-
<div class="postbox">
|
32 |
-
<h3><label for="title"><?php echo $title; ?></label></h3>
|
33 |
-
<div class="inside">
|
34 |
-
<?php echo $content; ?>
|
35 |
-
</div>
|
36 |
-
</div>
|
37 |
-
<?php
|
38 |
-
}
|
39 |
-
|
40 |
-
function show_msg_settings_updated()
|
41 |
-
{
|
42 |
-
echo '<div id="message" class="updated fade"><p><strong>';
|
43 |
-
_e('Settings successfully updated.','aiowpsecurity');
|
44 |
-
echo '</strong></p></div>';
|
45 |
-
}
|
46 |
-
|
47 |
-
static function show_msg_record_deleted_st()
|
48 |
-
{
|
49 |
-
echo '<div id="message" class="updated fade"><p><strong>';
|
50 |
-
_e('The selected record(s) deleted successfully!','aiowpsecurity');
|
51 |
-
echo '</strong></p></div>';
|
52 |
-
}
|
53 |
-
|
54 |
-
function show_msg_updated($msg)
|
55 |
-
{
|
56 |
-
echo '<div id="message" class="updated fade"><p><strong>';
|
57 |
-
echo $msg;
|
58 |
-
echo '</strong></p></div>';
|
59 |
-
}
|
60 |
-
|
61 |
-
static function show_msg_updated_st($msg)
|
62 |
-
{
|
63 |
-
echo '<div id="message" class="updated fade"><p><strong>';
|
64 |
-
echo $msg;
|
65 |
-
echo '</strong></p></div>';
|
66 |
-
}
|
67 |
-
|
68 |
-
function show_msg_error($error_msg)
|
69 |
-
{
|
70 |
-
echo '<div id="message" class="error"><p><strong>';
|
71 |
-
echo $error_msg;
|
72 |
-
echo '</strong></p></div>';
|
73 |
-
}
|
74 |
-
|
75 |
-
static function show_msg_error_st($error_msg)
|
76 |
-
{
|
77 |
-
echo '<div id="message" class="error"><p><strong>';
|
78 |
-
echo $error_msg;
|
79 |
-
echo '</strong></p></div>';
|
80 |
-
}
|
81 |
-
|
82 |
-
function start_buffer()
|
83 |
-
{
|
84 |
-
ob_start();
|
85 |
-
}
|
86 |
-
|
87 |
-
function end_buffer_and_collect()
|
88 |
-
{
|
89 |
-
$output = ob_get_contents();
|
90 |
-
ob_end_clean();
|
91 |
-
return $output;
|
92 |
-
}
|
93 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/admin/wp-security-blacklist-menu.php
DELETED
@@ -1,332 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_Blacklist_Menu extends AIOWPSecurity_Admin_Menu
|
4 |
-
{
|
5 |
-
var $menu_page_slug = AIOWPSEC_BLACKLIST_MENU_SLUG;
|
6 |
-
|
7 |
-
/* Specify all the tabs of this menu in the following array */
|
8 |
-
var $menu_tabs = array(
|
9 |
-
'tab1' => 'Ban Users',
|
10 |
-
'tab2' => 'SPAM Comments IP Monitoring',
|
11 |
-
);
|
12 |
-
|
13 |
-
var $menu_tabs_handler = array(
|
14 |
-
'tab1' => 'render_tab1',
|
15 |
-
'tab2' => 'render_tab2',
|
16 |
-
);
|
17 |
-
|
18 |
-
function __construct()
|
19 |
-
{
|
20 |
-
$this->render_menu_page();
|
21 |
-
}
|
22 |
-
|
23 |
-
function get_current_tab()
|
24 |
-
{
|
25 |
-
$tab_keys = array_keys($this->menu_tabs);
|
26 |
-
$tab = isset( $_GET['tab'] ) ? $_GET['tab'] : $tab_keys[0];
|
27 |
-
return $tab;
|
28 |
-
}
|
29 |
-
|
30 |
-
/*
|
31 |
-
* Renders our tabs of this menu as nav items
|
32 |
-
*/
|
33 |
-
function render_menu_tabs()
|
34 |
-
{
|
35 |
-
$current_tab = $this->get_current_tab();
|
36 |
-
|
37 |
-
echo '<h2 class="nav-tab-wrapper">';
|
38 |
-
foreach ( $this->menu_tabs as $tab_key => $tab_caption )
|
39 |
-
{
|
40 |
-
$active = $current_tab == $tab_key ? 'nav-tab-active' : '';
|
41 |
-
echo '<a class="nav-tab ' . $active . '" href="?page=' . $this->menu_page_slug . '&tab=' . $tab_key . '">' . $tab_caption . '</a>';
|
42 |
-
}
|
43 |
-
echo '</h2>';
|
44 |
-
}
|
45 |
-
|
46 |
-
/*
|
47 |
-
* The menu rendering goes here
|
48 |
-
*/
|
49 |
-
function render_menu_page()
|
50 |
-
{
|
51 |
-
$tab = $this->get_current_tab();
|
52 |
-
?>
|
53 |
-
<div class="wrap">
|
54 |
-
<div id="poststuff"><div id="post-body">
|
55 |
-
<?php
|
56 |
-
$this->render_menu_tabs();
|
57 |
-
//$tab_keys = array_keys($this->menu_tabs);
|
58 |
-
call_user_func(array(&$this, $this->menu_tabs_handler[$tab]));
|
59 |
-
?>
|
60 |
-
</div></div>
|
61 |
-
</div><!-- end of wrap -->
|
62 |
-
<?php
|
63 |
-
}
|
64 |
-
|
65 |
-
function render_tab1()
|
66 |
-
{
|
67 |
-
//if this is the case there is no need to display a "fix permissions" button
|
68 |
-
global $wpdb, $aio_wp_security;
|
69 |
-
$result = 1;
|
70 |
-
if (isset($_POST['aiowps_save_blacklist_settings']))
|
71 |
-
{
|
72 |
-
$nonce=$_REQUEST['_wpnonce'];
|
73 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-blacklist-settings-nonce'))
|
74 |
-
{
|
75 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed for save blacklist settings!",4);
|
76 |
-
die(__('Nonce check failed for save blacklist settings!','aiowpsecurity'));
|
77 |
-
}
|
78 |
-
|
79 |
-
if (isset($_POST["aiowps_enable_blacklisting"]) && empty($_POST['aiowps_banned_ip_addresses']) && empty($_POST['aiowps_banned_user_agents']))
|
80 |
-
{
|
81 |
-
$this->show_msg_error('You must submit at least one IP address or one User Agent value or both!','aiowpsecurity');
|
82 |
-
}
|
83 |
-
else
|
84 |
-
{
|
85 |
-
if (!empty($_POST['aiowps_banned_ip_addresses']))
|
86 |
-
{
|
87 |
-
$ip_addresses = $_POST['aiowps_banned_ip_addresses'];
|
88 |
-
$ip_list_array = AIOWPSecurity_Utility_IP::create_ip_list_array_from_string_with_newline($ip_addresses);
|
89 |
-
$payload = AIOWPSecurity_Utility_IP::validate_ip_list($ip_list_array);
|
90 |
-
if($payload[0] == 1){
|
91 |
-
//success case
|
92 |
-
$result = 1;
|
93 |
-
$list = $payload[1];
|
94 |
-
$banned_ip_data = implode(PHP_EOL, $list);
|
95 |
-
$aio_wp_security->configs->set_value('aiowps_banned_ip_addresses',$banned_ip_data);
|
96 |
-
$_POST['aiowps_banned_ip_addresses'] = ''; //Clear the post variable for the banned address list
|
97 |
-
}
|
98 |
-
else{
|
99 |
-
$result = -1;
|
100 |
-
$error_msg = $payload[1][0];
|
101 |
-
$this->show_msg_error($error_msg);
|
102 |
-
}
|
103 |
-
|
104 |
-
}
|
105 |
-
else
|
106 |
-
{
|
107 |
-
$aio_wp_security->configs->set_value('aiowps_banned_ip_addresses',''); //Clear the IP address config value
|
108 |
-
}
|
109 |
-
|
110 |
-
if (!empty($_POST['aiowps_banned_user_agents']))
|
111 |
-
{
|
112 |
-
$result = $result * $this->validate_user_agent_list();
|
113 |
-
}
|
114 |
-
|
115 |
-
if ($result == 1)
|
116 |
-
{
|
117 |
-
$aio_wp_security->configs->set_value('aiowps_enable_blacklisting',isset($_POST["aiowps_enable_blacklisting"])?'1':'');
|
118 |
-
$aio_wp_security->configs->save_config(); //Save the configuration
|
119 |
-
$this->show_msg_settings_updated();
|
120 |
-
|
121 |
-
$write_result = AIOWPSecurity_Utility_Htaccess::write_to_htaccess(); //now let's write to the .htaccess file
|
122 |
-
if ($write_result == -1)
|
123 |
-
{
|
124 |
-
$this->show_msg_error(__('The plugin was unable to write to the .htaccess file. Please edit file manually.','aiowpsecurity'));
|
125 |
-
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_Blacklist_Menu - The plugin was unable to write to the .htaccess file.");
|
126 |
-
}
|
127 |
-
}
|
128 |
-
}
|
129 |
-
}
|
130 |
-
?>
|
131 |
-
<h2><?php _e('Ban IPs or User Agents', 'aiowpsecurity')?></h2>
|
132 |
-
<div class="aio_blue_box">
|
133 |
-
<?php
|
134 |
-
echo '<p>'.__('The All In One WP Security Blacklist feature gives you the option of banning certain host IP addresses or ranges and also user agents.', 'aiowpsecurity').'
|
135 |
-
<br />'.__('This feature will deny total site access for users which have IP addresses or user agents matching those which you have configured in the settings below.', 'aiowpsecurity').'
|
136 |
-
<br />'.__('The plugin achieves this by making appropriate modifications to your .htaccess file.', 'aiowpsecurity').'
|
137 |
-
<br />'.__('By blocking people via the .htaccess file your are using the most secure first line of defence which denies all access to blacklisted visitors as soon as they hit your hosting server.', 'aiowpsecurity').'
|
138 |
-
</p>';
|
139 |
-
?>
|
140 |
-
</div>
|
141 |
-
|
142 |
-
<div class="postbox">
|
143 |
-
<h3><label for="title"><?php _e('IP Hosts and User Agent Blacklist Settings', 'aiowpsecurity'); ?></label></h3>
|
144 |
-
<div class="inside">
|
145 |
-
<?php
|
146 |
-
//Display security info badge
|
147 |
-
global $aiowps_feature_mgr;
|
148 |
-
$aiowps_feature_mgr->output_feature_details_badge("blacklist-manager-ip-user-agent-blacklisting");
|
149 |
-
?>
|
150 |
-
<form action="" method="POST">
|
151 |
-
<?php wp_nonce_field('aiowpsec-blacklist-settings-nonce'); ?>
|
152 |
-
<table class="form-table">
|
153 |
-
<tr valign="top">
|
154 |
-
<th scope="row"><?php _e('Enable IP or User Agent Blacklisting', 'aiowpsecurity')?>:</th>
|
155 |
-
<td>
|
156 |
-
<input name="aiowps_enable_blacklisting" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_enable_blacklisting')=='1') echo ' checked="checked"'; ?> value="1"/>
|
157 |
-
<span class="description"><?php _e('Check this if you want to enable the banning (or blacklisting) of selected IP addresses and/or user agents specified in the settings below', 'aiowpsecurity'); ?></span>
|
158 |
-
</td>
|
159 |
-
</tr>
|
160 |
-
<tr valign="top">
|
161 |
-
<th scope="row"><?php _e('Enter IP Addresses:', 'aiowpsecurity')?></th>
|
162 |
-
<td>
|
163 |
-
<textarea name="aiowps_banned_ip_addresses" rows="5" cols="50"><?php echo ($result == -1)?$_POST['aiowps_banned_ip_addresses']:$aio_wp_security->configs->get_value('aiowps_banned_ip_addresses'); ?></textarea>
|
164 |
-
<br />
|
165 |
-
<span class="description"><?php _e('Enter one or more IP addresses or IP ranges.','aiowpsecurity');?></span>
|
166 |
-
<span class="aiowps_more_info_anchor"><span class="aiowps_more_info_toggle_char">+</span><span class="aiowps_more_info_toggle_text"><?php _e('More Info', 'aiowpsecurity'); ?></span></span>
|
167 |
-
<div class="aiowps_more_info_body">
|
168 |
-
<?php
|
169 |
-
echo '<p class="description">'.__('Each IP address must be on a new line.', 'aiowpsecurity').'</p>';
|
170 |
-
echo '<p class="description">'.__('To specify an IP range use a wildcard "*" character. Acceptable ways to use wildcards is shown in the examples below:', 'aiowpsecurity').'</p>';
|
171 |
-
echo '<p class="description">'.__('Example 1: 195.47.89.*', 'aiowpsecurity').'</p>';
|
172 |
-
echo '<p class="description">'.__('Example 2: 195.47.*.*', 'aiowpsecurity').'</p>';
|
173 |
-
echo '<p class="description">'.__('Example 3: 195.*.*.*', 'aiowpsecurity').'</p>';
|
174 |
-
?>
|
175 |
-
</div>
|
176 |
-
|
177 |
-
</td>
|
178 |
-
</tr>
|
179 |
-
<tr valign="top">
|
180 |
-
<th scope="row"><?php _e('Enter User Agents:', 'aiowpsecurity')?></th>
|
181 |
-
<td>
|
182 |
-
<textarea name="aiowps_banned_user_agents" rows="5" cols="50"><?php echo ($result == -1)?$_POST['aiowps_banned_user_agents']:$aio_wp_security->configs->get_value('aiowps_banned_user_agents'); ?></textarea>
|
183 |
-
<br />
|
184 |
-
<span class="description">
|
185 |
-
<?php _e('Enter one or more user agent strings.','aiowpsecurity');?></span>
|
186 |
-
<span class="aiowps_more_info_anchor"><span class="aiowps_more_info_toggle_char">+</span><span class="aiowps_more_info_toggle_text"><?php _e('More Info', 'aiowpsecurity'); ?></span></span>
|
187 |
-
<div class="aiowps_more_info_body">
|
188 |
-
<?php
|
189 |
-
echo '<p class="description">'.__('Each user agent string must be on a new line.', 'aiowpsecurity').'</p>';
|
190 |
-
echo '<p class="description">'.__('Example 1 - A single user agent string to block:', 'aiowpsecurity').'</p>';
|
191 |
-
echo '<p class="description">SquigglebotBot</p>';
|
192 |
-
echo '<p class="description">'.__('Example 2 - A list of more than 1 user agent strings to block', 'aiowpsecurity').'</p>';
|
193 |
-
echo '<p class="description">baiduspider<br />SquigglebotBot<br />SurveyBot<br />VoidEYE<br />webcrawl.net<br />YottaShopping_Bot</p>';
|
194 |
-
?>
|
195 |
-
</div>
|
196 |
-
|
197 |
-
</td>
|
198 |
-
</tr>
|
199 |
-
</table>
|
200 |
-
<input type="submit" name="aiowps_save_blacklist_settings" value="<?php _e('Save Settings', 'aiowpsecurity')?>" class="button-primary" />
|
201 |
-
</form>
|
202 |
-
</div></div>
|
203 |
-
<?php
|
204 |
-
}
|
205 |
-
|
206 |
-
function render_tab2()
|
207 |
-
{
|
208 |
-
global $aio_wp_security;
|
209 |
-
include_once 'wp-security-list-comment-spammer-ip.php'; //For rendering the AIOWPSecurity_List_Table in tab2
|
210 |
-
$spammer_ip_list = new AIOWPSecurity_List_Comment_Spammer_IP();
|
211 |
-
|
212 |
-
if (isset($_POST['aiowps_ip_spam_comment_search']))
|
213 |
-
{
|
214 |
-
$error = '';
|
215 |
-
$nonce=$_REQUEST['_wpnonce'];
|
216 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-spammer-ip-list-nonce'))
|
217 |
-
{
|
218 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed for list SPAM comment IPs!",4);
|
219 |
-
die(__('Nonce check failed for list SPAM comment IPs!','aiowpsecurity'));
|
220 |
-
}
|
221 |
-
|
222 |
-
$min_comments_per_ip = sanitize_text_field($_POST['aiowps_spam_ip_min_comments']);
|
223 |
-
if(!is_numeric($min_comments_per_ip))
|
224 |
-
{
|
225 |
-
$error .= '<br />'.__('You entered a non numeric value for the minimum SPAM comments per IP field. It has been set to the default value.','aiowpsecurity');
|
226 |
-
$min_comments_per_ip = '5';//Set it to the default value for this field
|
227 |
-
}
|
228 |
-
|
229 |
-
if($error)
|
230 |
-
{
|
231 |
-
$this->show_msg_error(__('Attention!','aiowpsecurity').$error);
|
232 |
-
}
|
233 |
-
|
234 |
-
//Save all the form values to the options
|
235 |
-
$aio_wp_security->configs->set_value('aiowps_spam_ip_min_comments',absint($min_comments_per_ip));
|
236 |
-
$aio_wp_security->configs->save_config();
|
237 |
-
$info_msg_string = sprintf( __('Displaying results for IP addresses which have posted a minimum of %s SPAM comments', 'aiowpsecurity'), $min_comments_per_ip);
|
238 |
-
$this->show_msg_updated($info_msg_string);
|
239 |
-
|
240 |
-
}
|
241 |
-
|
242 |
-
if(isset($_REQUEST['action'])) //Do list table form row action tasks
|
243 |
-
{
|
244 |
-
if($_REQUEST['action'] == 'block_spammer_ip')
|
245 |
-
{ //The "block" link was clicked for a row in the list table
|
246 |
-
$spammer_ip_list->block_spammer_ip_records(strip_tags($_REQUEST['spammer_ip']));
|
247 |
-
}
|
248 |
-
}
|
249 |
-
|
250 |
-
?>
|
251 |
-
<div class="aio_blue_box">
|
252 |
-
<?php
|
253 |
-
echo '<p>'.__('This tab displays a list of the IP addresses of the people or bots who have left SPAM comments on your site.', 'aiowpsecurity').'
|
254 |
-
<br />'.__('This information can be handy for identifying the most persistent IP addresses or ranges used by spammers.', 'aiowpsecurity').'
|
255 |
-
<br />'.__('By inspecting the IP address data coming from spammers you will be in a better position to determine which addresses or address ranges you should block by adding them to your blacklist.', 'aiowpsecurity').'
|
256 |
-
<br />'.__('To add one or more of the IP addresses displayed in the table below to your blacklist, simply click the "Block" link for the individual row or select more than one address
|
257 |
-
using the checkboxes and then choose the "block" option from the Bulk Actions dropdown list and click the "Apply" button.', 'aiowpsecurity').'
|
258 |
-
</p>';
|
259 |
-
?>
|
260 |
-
</div>
|
261 |
-
<div class="postbox">
|
262 |
-
<h3><label for="title"><?php _e('List SPAMMER IP Addresses', 'aiowpsecurity'); ?></label></h3>
|
263 |
-
<div class="inside">
|
264 |
-
<form action="" method="POST">
|
265 |
-
<?php wp_nonce_field('aiowpsec-spammer-ip-list-nonce'); ?>
|
266 |
-
<table class="form-table">
|
267 |
-
<tr valign="top">
|
268 |
-
<th scope="row"><?php _e('Minimum number of SPAM comments per IP', 'aiowpsecurity')?>:</th>
|
269 |
-
<td><input size="5" name="aiowps_spam_ip_min_comments" value="<?php echo $aio_wp_security->configs->get_value('aiowps_spam_ip_min_comments'); ?>" />
|
270 |
-
<span class="description"><?php _e('This field allows you to list only those IP addresses which have been used to post X or more SPAM comments.', 'aiowpsecurity');?></span>
|
271 |
-
<span class="aiowps_more_info_anchor"><span class="aiowps_more_info_toggle_char">+</span><span class="aiowps_more_info_toggle_text"><?php _e('More Info', 'aiowpsecurity'); ?></span></span>
|
272 |
-
<div class="aiowps_more_info_body">
|
273 |
-
<?php
|
274 |
-
echo '<p class="description">'.__('Example 1: Setting this value to "0" or "1" will list ALL IP addresses which were used to submit SPAM comments.', 'aiowpsecurity').'</p>';
|
275 |
-
echo '<p class="description">'.__('Example 2: Setting this value to "5" will list only those IP addresses which were used to submit 5 SPAM comments or more on your site.', 'aiowpsecurity').'</p>';
|
276 |
-
?>
|
277 |
-
</div>
|
278 |
-
|
279 |
-
</td>
|
280 |
-
</tr>
|
281 |
-
</table>
|
282 |
-
<input type="submit" name="aiowps_ip_spam_comment_search" value="<?php _e('Find IP Addresses', 'aiowpsecurity')?>" class="button-primary" />
|
283 |
-
</form>
|
284 |
-
</div></div>
|
285 |
-
<div class="postbox">
|
286 |
-
<h3><label for="title"><?php _e('SPAMMER IP Address Results', 'aiowpsecurity'); ?></label></h3>
|
287 |
-
<div class="inside">
|
288 |
-
<?php
|
289 |
-
//Fetch, prepare, sort, and filter our data...
|
290 |
-
$spammer_ip_list->prepare_items();
|
291 |
-
//echo "put table of locked entries here";
|
292 |
-
?>
|
293 |
-
<form id="tables-filter" method="get" onSubmit="return confirm('Are you sure you want to perform this bulk operation on the selected entries?');">
|
294 |
-
<!-- For plugins, we also need to ensure that the form posts back to our current page -->
|
295 |
-
<input type="hidden" name="page" value="<?php echo $_REQUEST['page']; ?>" />
|
296 |
-
<input type="hidden" name="tab" value="<?php echo $_REQUEST['tab']; ?>" />
|
297 |
-
<!-- Now we can render the completed list table -->
|
298 |
-
<?php $spammer_ip_list->display(); ?>
|
299 |
-
</form>
|
300 |
-
</div></div>
|
301 |
-
<?php
|
302 |
-
}
|
303 |
-
|
304 |
-
function validate_user_agent_list()
|
305 |
-
{
|
306 |
-
global $aio_wp_security;
|
307 |
-
@ini_set('auto_detect_line_endings', true);
|
308 |
-
//$errors = '';
|
309 |
-
|
310 |
-
$submitted_agents = explode(PHP_EOL, $_POST['aiowps_banned_user_agents']);
|
311 |
-
$agents = array();
|
312 |
-
if (!empty($submitted_agents))
|
313 |
-
{
|
314 |
-
foreach ($submitted_agents as $agent)
|
315 |
-
{
|
316 |
-
$text = quotemeta(sanitize_text_field($agent));
|
317 |
-
$agents[] = $text;
|
318 |
-
}
|
319 |
-
}
|
320 |
-
|
321 |
-
if (sizeof($agents) > 1)
|
322 |
-
{
|
323 |
-
sort( $agents );
|
324 |
-
$agents = array_unique($agents, SORT_STRING);
|
325 |
-
}
|
326 |
-
|
327 |
-
$banned_user_agent_data = implode(PHP_EOL, $agents);
|
328 |
-
$aio_wp_security->configs->set_value('aiowps_banned_user_agents',$banned_user_agent_data);
|
329 |
-
$_POST['aiowps_banned_user_agents'] = ''; //Clear the post variable for the banned address list
|
330 |
-
return 1;
|
331 |
-
}
|
332 |
-
} //end class
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/admin/wp-security-dashboard-menu.php
DELETED
@@ -1,304 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_Dashboard_Menu extends AIOWPSecurity_Admin_Menu
|
4 |
-
{
|
5 |
-
var $dashboard_menu_page_slug = AIOWPSEC_MAIN_MENU_SLUG;
|
6 |
-
|
7 |
-
var $menu_tabs = array(
|
8 |
-
'tab1' => 'Dashboard',
|
9 |
-
'tab2' => 'System Info',
|
10 |
-
);
|
11 |
-
|
12 |
-
var $menu_tabs_handler = array(
|
13 |
-
'tab1' => 'render_tab1',
|
14 |
-
'tab2' => 'render_tab2',
|
15 |
-
);
|
16 |
-
|
17 |
-
function __construct()
|
18 |
-
{
|
19 |
-
$this->render_menu_page();
|
20 |
-
}
|
21 |
-
|
22 |
-
function get_current_tab()
|
23 |
-
{
|
24 |
-
$tab_keys = array_keys($this->menu_tabs);
|
25 |
-
$tab = isset( $_GET['tab'] ) ? $_GET['tab'] : $tab_keys[0];
|
26 |
-
return $tab;
|
27 |
-
}
|
28 |
-
|
29 |
-
/*
|
30 |
-
* Renders our tabs of this menu as nav items
|
31 |
-
*/
|
32 |
-
function render_menu_tabs()
|
33 |
-
{
|
34 |
-
$current_tab = $this->get_current_tab();
|
35 |
-
|
36 |
-
echo '<h2 class="nav-tab-wrapper">';
|
37 |
-
foreach ( $this->menu_tabs as $tab_key => $tab_caption )
|
38 |
-
{
|
39 |
-
$active = $current_tab == $tab_key ? 'nav-tab-active' : '';
|
40 |
-
echo '<a class="nav-tab ' . $active . '" href="?page=' . $this->dashboard_menu_page_slug . '&tab=' . $tab_key . '">' . $tab_caption . '</a>';
|
41 |
-
}
|
42 |
-
echo '</h2>';
|
43 |
-
}
|
44 |
-
|
45 |
-
/*
|
46 |
-
* The menu rendering goes here
|
47 |
-
*/
|
48 |
-
function render_menu_page()
|
49 |
-
{
|
50 |
-
$tab = $this->get_current_tab();
|
51 |
-
?>
|
52 |
-
<div class="wrap">
|
53 |
-
<div id="poststuff"><div id="post-body">
|
54 |
-
<?php
|
55 |
-
$this->render_menu_tabs();
|
56 |
-
//$tab_keys = array_keys($this->menu_tabs);
|
57 |
-
call_user_func(array(&$this, $this->menu_tabs_handler[$tab]));
|
58 |
-
?>
|
59 |
-
</div></div>
|
60 |
-
</div><!-- end of wrap -->
|
61 |
-
<?php
|
62 |
-
}
|
63 |
-
|
64 |
-
function render_tab1()
|
65 |
-
{
|
66 |
-
echo '<div class="aio_grey_box">';
|
67 |
-
echo '<p>For information, updates and documentation, please visit the <a href="http://www.tipsandtricks-hq.com/wordpress-security-and-firewall-plugin" target="_blank">AIO WP Security & Firewall Plugin</a> Page.</p>';
|
68 |
-
echo '<p><a href="http://www.tipsandtricks-hq.com/development-center" target="_blank">Follow us</a> on Twitter, Google+ or via Email to stay upto date about the new security features of this plugin.</p>';
|
69 |
-
echo '</div>';
|
70 |
-
|
71 |
-
echo "<script type='text/javascript' src='https://www.google.com/jsapi'></script>";//Include the google chart library
|
72 |
-
|
73 |
-
global $aiowps_feature_mgr;
|
74 |
-
$feature_mgr = $aiowps_feature_mgr;
|
75 |
-
$total_site_security_points = $feature_mgr->get_total_site_points();
|
76 |
-
$total_security_points_achievable = $feature_mgr->get_total_achievable_points();
|
77 |
-
|
78 |
-
?>
|
79 |
-
<div class="aiowps_dashboard_box_small">
|
80 |
-
<div class="postbox">
|
81 |
-
<h3><label for="title">Security Strength Meter</label></h3>
|
82 |
-
<div class="inside">
|
83 |
-
|
84 |
-
<script type='text/javascript'>
|
85 |
-
google.load('visualization', '1', {packages:['gauge']});
|
86 |
-
google.setOnLoadCallback(drawChart);
|
87 |
-
function drawChart() {
|
88 |
-
var data = google.visualization.arrayToDataTable([
|
89 |
-
['Label', 'Value'],
|
90 |
-
['Strength', <?php echo $total_site_security_points; ?>]
|
91 |
-
]);
|
92 |
-
|
93 |
-
var options = {
|
94 |
-
width: 320, height: 200, max: <?php echo $total_security_points_achievable; ?>,
|
95 |
-
greenColor: '8EFA9B', yellowColor: 'F5EE90', redColor: 'FA7373',
|
96 |
-
redFrom: 0, redTo: 10,
|
97 |
-
yellowFrom:10, yellowTo: 50,
|
98 |
-
greenFrom:50, greenTo: <?php echo $total_security_points_achievable; ?>,
|
99 |
-
minorTicks: 5
|
100 |
-
};
|
101 |
-
|
102 |
-
var chart = new google.visualization.Gauge(document.getElementById('security_strength_chart_div'));
|
103 |
-
chart.draw(data, options);
|
104 |
-
}
|
105 |
-
</script>
|
106 |
-
<div id='security_strength_chart_div'></div>
|
107 |
-
|
108 |
-
<div class="aiowps_dashboard_widget_footer">
|
109 |
-
<?php
|
110 |
-
_e('Total Achievable Points: ','aiowpsecurity');
|
111 |
-
echo '<strong>'.$total_security_points_achievable.'</strong><br />';
|
112 |
-
_e('Current Score of Your Site: ','aiowpsecurity');
|
113 |
-
echo '<strong>'.$total_site_security_points.'</strong>';
|
114 |
-
?>
|
115 |
-
</div>
|
116 |
-
|
117 |
-
</div></div>
|
118 |
-
</div><!-- aiowps_dashboard_box -->
|
119 |
-
|
120 |
-
<div class="aiowps_dashboard_box_small">
|
121 |
-
<div class="postbox">
|
122 |
-
<h3><label for="title">Security Points Breakdown</label></h3>
|
123 |
-
<div class="inside">
|
124 |
-
|
125 |
-
<?php
|
126 |
-
$feature_items = $feature_mgr->feature_items;
|
127 |
-
$pt_src_chart_data = "";
|
128 |
-
$pt_src_chart_data .= "['Feature Name', 'Points'],";
|
129 |
-
foreach($feature_items as $item)
|
130 |
-
{
|
131 |
-
if($item->feature_status == $feature_mgr->feature_active)
|
132 |
-
{
|
133 |
-
$pt_src_chart_data .= "['".$item->feature_name."', ".$item->item_points."],";
|
134 |
-
}
|
135 |
-
}
|
136 |
-
|
137 |
-
?>
|
138 |
-
<script type="text/javascript">
|
139 |
-
google.load("visualization", "1", {packages:["corechart"]});
|
140 |
-
google.setOnLoadCallback(drawChart);
|
141 |
-
function drawChart() {
|
142 |
-
var data = google.visualization.arrayToDataTable([
|
143 |
-
<?php echo $pt_src_chart_data; ?>
|
144 |
-
]);
|
145 |
-
|
146 |
-
var options = {
|
147 |
-
height: '250',
|
148 |
-
width: '320',
|
149 |
-
backgroundColor: 'F6F6F6'
|
150 |
-
};
|
151 |
-
|
152 |
-
var chart = new google.visualization.PieChart(document.getElementById('points_source_breakdown_chart_div'));
|
153 |
-
chart.draw(data, options);
|
154 |
-
}
|
155 |
-
</script>
|
156 |
-
<div id='points_source_breakdown_chart_div'></div>
|
157 |
-
|
158 |
-
</div></div>
|
159 |
-
</div><!-- aiowps_dashboard_box -->
|
160 |
-
|
161 |
-
<div class="aiowps_dashboard_box_small">
|
162 |
-
<div class="postbox">
|
163 |
-
<h3><label for="title">Critical Feature Status</label></h3>
|
164 |
-
<div class="inside">
|
165 |
-
|
166 |
-
<?php
|
167 |
-
_e('Below is the current status of the critical features that you should activate on your site for maximum security','aiowpsecurity');
|
168 |
-
$feature_items = $feature_mgr->feature_items;
|
169 |
-
$username_admin_feature = $feature_mgr->get_feature_item_by_id("user-accounts-change-admin-user");
|
170 |
-
echo '<div class="aiowps_feature_status_container">';
|
171 |
-
echo '<div class="aiowps_feature_status_name">'.__('Admin Username','aiowpsecurity').'</div>';
|
172 |
-
echo '<a href="admin.php?page='.AIOWPSEC_USER_ACCOUNTS_MENU_SLUG.'" target="_blank">';
|
173 |
-
echo '<div class="aiowps_feature_status_bar">';
|
174 |
-
if($username_admin_feature->feature_status == $feature_mgr->feature_active){
|
175 |
-
echo '<div class="aiowps_feature_status_label aiowps_feature_status_on">On</div>';
|
176 |
-
echo '<div class="aiowps_feature_status_label">Off</div>';
|
177 |
-
}else{
|
178 |
-
echo '<div class="aiowps_feature_status_label">On</div>';
|
179 |
-
echo '<div class="aiowps_feature_status_label aiowps_feature_status_off">Off</div>';
|
180 |
-
}
|
181 |
-
echo '</div></div></a>';
|
182 |
-
echo '<div class="aio_clear_float"></div>';
|
183 |
-
|
184 |
-
$login_lockdown_feature = $feature_mgr->get_feature_item_by_id("user-login-login-lockdown");
|
185 |
-
echo '<div class="aiowps_feature_status_container">';
|
186 |
-
echo '<div class="aiowps_feature_status_name">'.__('Login Lockdown','aiowpsecurity').'</div>';
|
187 |
-
echo '<a href="admin.php?page='.AIOWPSEC_USER_LOGIN_MENU_SLUG.'" target="_blank">';
|
188 |
-
echo '<div class="aiowps_feature_status_bar">';
|
189 |
-
if($login_lockdown_feature->feature_status == $feature_mgr->feature_active){
|
190 |
-
echo '<div class="aiowps_feature_status_label aiowps_feature_status_on">On</div>';
|
191 |
-
echo '<div class="aiowps_feature_status_label">Off</div>';
|
192 |
-
}else{
|
193 |
-
echo '<div class="aiowps_feature_status_label">On</div>';
|
194 |
-
echo '<div class="aiowps_feature_status_label aiowps_feature_status_off">Off</div>';
|
195 |
-
}
|
196 |
-
echo '</div></div></a>';
|
197 |
-
echo '<div class="aio_clear_float"></div>';
|
198 |
-
|
199 |
-
$filesystem_feature = $feature_mgr->get_feature_item_by_id("filesystem-file-permissions");
|
200 |
-
echo '<div class="aiowps_feature_status_container">';
|
201 |
-
echo '<div class="aiowps_feature_status_name">'.__('File Permission','aiowpsecurity').'</div>';
|
202 |
-
echo '<a href="admin.php?page='.AIOWPSEC_FILESYSTEM_MENU_SLUG.'" target="_blank">';
|
203 |
-
echo '<div class="aiowps_feature_status_bar">';
|
204 |
-
if($filesystem_feature->feature_status == $feature_mgr->feature_active){
|
205 |
-
echo '<div class="aiowps_feature_status_label aiowps_feature_status_on">On</div>';
|
206 |
-
echo '<div class="aiowps_feature_status_label">Off</div>';
|
207 |
-
}else{
|
208 |
-
echo '<div class="aiowps_feature_status_label">On</div>';
|
209 |
-
echo '<div class="aiowps_feature_status_label aiowps_feature_status_off">Off</div>';
|
210 |
-
}
|
211 |
-
echo '</div></div></a>';
|
212 |
-
echo '<div class="aio_clear_float"></div>';
|
213 |
-
|
214 |
-
$basic_firewall_feature = $feature_mgr->get_feature_item_by_id("firewall-basic-rules");
|
215 |
-
echo '<div class="aiowps_feature_status_container">';
|
216 |
-
echo '<div class="aiowps_feature_status_name">'.__('Basic Firewall','aiowpsecurity').'</div>';
|
217 |
-
echo '<a href="admin.php?page='.AIOWPSEC_FIREWALL_MENU_SLUG.'" target="_blank">';
|
218 |
-
echo '<div class="aiowps_feature_status_bar">';
|
219 |
-
if($basic_firewall_feature->feature_status == $feature_mgr->feature_active){
|
220 |
-
echo '<div class="aiowps_feature_status_label aiowps_feature_status_on">On</div>';
|
221 |
-
echo '<div class="aiowps_feature_status_label">Off</div>';
|
222 |
-
}else{
|
223 |
-
echo '<div class="aiowps_feature_status_label">On</div>';
|
224 |
-
echo '<div class="aiowps_feature_status_label aiowps_feature_status_off">Off</div>';
|
225 |
-
}
|
226 |
-
echo '</div></div></a>';
|
227 |
-
echo '<div class="aio_clear_float"></div>';
|
228 |
-
?>
|
229 |
-
</div></div>
|
230 |
-
</div><!-- aiowps_dashboard_box -->
|
231 |
-
|
232 |
-
<div class="aiowps_dashboard_box_small">
|
233 |
-
<div class="postbox">
|
234 |
-
<h3><label for="title">Spread the Word</label></h3>
|
235 |
-
<div class="inside">
|
236 |
-
|
237 |
-
<p>We are working to make your WordPress site more secure. Please support us, here is how:</p>
|
238 |
-
<p>
|
239 |
-
<a href="http://twitter.com/intent/tweet?url=http://www.tipsandtricks-hq.com/wordpress-security-and-firewall-plugin&text=I love the All In One WP Security and Firewall plugin!" target="_blank" class="aio_tweet_link">Post to Tweeter</a>
|
240 |
-
</p>
|
241 |
-
<p>
|
242 |
-
<a href="http://wordpress.org/plugins/all-in-one-wp-security-and-firewall/" target="_blank" class="aio_rate_us_link">Vote & Rate Now</a>
|
243 |
-
</p>
|
244 |
-
|
245 |
-
</div></div>
|
246 |
-
</div><!-- aiowps_dashboard_box -->
|
247 |
-
|
248 |
-
<div class="aio_clear_float"></div>
|
249 |
-
<?php
|
250 |
-
}
|
251 |
-
|
252 |
-
|
253 |
-
function render_tab2()
|
254 |
-
{
|
255 |
-
global $wpdb;
|
256 |
-
?>
|
257 |
-
<div class="postbox">
|
258 |
-
<h3><label for="title">Site Info</label></h3>
|
259 |
-
<div class="inside">
|
260 |
-
<strong>Plugin Version: </strong><code><?php echo AIO_WP_SECURITY_VERSION;?></code><br />
|
261 |
-
<strong>WP Version: </strong><code><?php echo get_bloginfo("version"); ?></code><br />
|
262 |
-
<strong>WPMU: </strong><code><?php echo (!defined('MULTISITE') || !MULTISITE) ? "No" : "Yes"; ?></code><br />
|
263 |
-
<strong>MySQL Version: </strong><code><?php echo $wpdb->db_version();?></code><br />
|
264 |
-
<strong>WP Table Prefix: </strong><code><?php echo $wpdb->prefix; ?></code><br />
|
265 |
-
<strong>PHP Version: </strong><code><?php echo phpversion(); ?></code><br />
|
266 |
-
<strong>Session Save Path: </strong><code><?php echo ini_get("session.save_path"); ?></code><br />
|
267 |
-
<strong>WP URL: </strong><code><?php echo get_bloginfo('wpurl'); ?></code><br />
|
268 |
-
<strong>Server Name: </strong><code><?php echo $_SERVER['SERVER_NAME']; ?></code><br />
|
269 |
-
<strong>Cookie Domain: </strong><code><?php $cookieDomain = parse_url( strtolower( get_bloginfo('wpurl') ) ); echo $cookieDomain['host']; ?></code><br />
|
270 |
-
<strong>CURL Library Present: </strong><code><?php echo (function_exists('curl_init')) ? "Yes" : "No"; ?></code><br />
|
271 |
-
<strong>Debug File Write Permissions: </strong><code><?php echo (is_writable(AIO_WP_SECURITY_PATH)) ? "Writable" : "Not Writable"; ?></code><br />
|
272 |
-
</div></div>
|
273 |
-
|
274 |
-
<div class="postbox">
|
275 |
-
<h3><label for="title">Active Plugins</label></h3>
|
276 |
-
<div class="inside">
|
277 |
-
<?php
|
278 |
-
$all_plugins = get_plugins();
|
279 |
-
$active_plugins = get_option('active_plugins');
|
280 |
-
//var_dump($all_plugins);
|
281 |
-
?>
|
282 |
-
<table class="widefat aio_spacer_10_tb">
|
283 |
-
<thead>
|
284 |
-
<tr>
|
285 |
-
<th><?php _e('Name', 'aiowpsecurity') ?></th>
|
286 |
-
<th><?php _e('Version', 'aiowpsecurity') ?></th>
|
287 |
-
<th><?php _e('Plugin URL', 'aiowpsecurity') ?></th>
|
288 |
-
</tr>
|
289 |
-
</thead>
|
290 |
-
<tbody>
|
291 |
-
<?php
|
292 |
-
foreach ($active_plugins as $plugin_key)
|
293 |
-
{
|
294 |
-
$plugin_details = $all_plugins[$plugin_key];
|
295 |
-
echo '<tr><td>'.$plugin_details['Name'].'</td><td>'.$plugin_details['Version'].'</td><td>'.$plugin_details['PluginURI'].'</td></tr>';
|
296 |
-
}
|
297 |
-
?>
|
298 |
-
</tbody>
|
299 |
-
</table>
|
300 |
-
</div></div>
|
301 |
-
<?php
|
302 |
-
}
|
303 |
-
|
304 |
-
} //end class
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/admin/wp-security-database-menu.php
DELETED
@@ -1,463 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_Database_Menu extends AIOWPSecurity_Admin_Menu
|
4 |
-
{
|
5 |
-
var $menu_page_slug = AIOWPSEC_DB_SEC_MENU_SLUG;
|
6 |
-
|
7 |
-
/* Specify all the tabs of this menu in the following array */
|
8 |
-
var $menu_tabs = array(
|
9 |
-
'tab1' => 'DB Prefix',
|
10 |
-
'tab2' => 'DB Backup',
|
11 |
-
);
|
12 |
-
|
13 |
-
var $menu_tabs_handler = array(
|
14 |
-
'tab1' => 'render_tab1',
|
15 |
-
'tab2' => 'render_tab2',
|
16 |
-
);
|
17 |
-
|
18 |
-
function __construct()
|
19 |
-
{
|
20 |
-
$this->render_menu_page();
|
21 |
-
}
|
22 |
-
|
23 |
-
function get_current_tab()
|
24 |
-
{
|
25 |
-
$tab_keys = array_keys($this->menu_tabs);
|
26 |
-
$tab = isset( $_GET['tab'] ) ? $_GET['tab'] : $tab_keys[0];
|
27 |
-
return $tab;
|
28 |
-
}
|
29 |
-
|
30 |
-
/*
|
31 |
-
* Renders our tabs of this menu as nav items
|
32 |
-
*/
|
33 |
-
function render_menu_tabs()
|
34 |
-
{
|
35 |
-
$current_tab = $this->get_current_tab();
|
36 |
-
|
37 |
-
echo '<h2 class="nav-tab-wrapper">';
|
38 |
-
foreach ( $this->menu_tabs as $tab_key => $tab_caption )
|
39 |
-
{
|
40 |
-
$active = $current_tab == $tab_key ? 'nav-tab-active' : '';
|
41 |
-
echo '<a class="nav-tab ' . $active . '" href="?page=' . $this->menu_page_slug . '&tab=' . $tab_key . '">' . $tab_caption . '</a>';
|
42 |
-
}
|
43 |
-
echo '</h2>';
|
44 |
-
}
|
45 |
-
|
46 |
-
/*
|
47 |
-
* The menu rendering goes here
|
48 |
-
*/
|
49 |
-
function render_menu_page()
|
50 |
-
{
|
51 |
-
$tab = $this->get_current_tab();
|
52 |
-
?>
|
53 |
-
<div class="wrap">
|
54 |
-
<div id="poststuff"><div id="post-body">
|
55 |
-
<?php
|
56 |
-
$this->render_menu_tabs();
|
57 |
-
//$tab_keys = array_keys($this->menu_tabs);
|
58 |
-
call_user_func(array(&$this, $this->menu_tabs_handler[$tab]));
|
59 |
-
?>
|
60 |
-
</div></div>
|
61 |
-
</div><!-- end of wrap -->
|
62 |
-
<?php
|
63 |
-
}
|
64 |
-
|
65 |
-
function render_tab1()
|
66 |
-
{
|
67 |
-
global $wpdb, $aio_wp_security;
|
68 |
-
$old_db_prefix = $wpdb->prefix;
|
69 |
-
$new_db_prefix = '';
|
70 |
-
$perform_db_change = false;
|
71 |
-
|
72 |
-
if (isset($_POST['aiowps_db_prefix_change']))//Do form submission tasks
|
73 |
-
{
|
74 |
-
$nonce=$_REQUEST['_wpnonce'];
|
75 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-db-prefix-change-nonce'))
|
76 |
-
{
|
77 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed for DB prefix change operation!",4);
|
78 |
-
die(__('Nonce check failed for DB prefix change operation!','aiowpsecurity'));
|
79 |
-
}
|
80 |
-
if( isset($_POST['aiowps_enable_random_prefix']))
|
81 |
-
{//User has elected to generate a random DB prefix
|
82 |
-
$string = AIOWPSecurity_Utility::generate_alpha_numeric_random_string('6');
|
83 |
-
$new_db_prefix = $string . '_';
|
84 |
-
$perform_db_change = true;
|
85 |
-
}else
|
86 |
-
{
|
87 |
-
if (empty($_POST['aiowps_new_manual_db_prefix']))
|
88 |
-
{
|
89 |
-
$this->show_msg_error(__('Please enter a value for the DB prefix.', 'aiowpsecurity'));
|
90 |
-
}
|
91 |
-
else
|
92 |
-
{
|
93 |
-
//User has chosen their own DB prefix value
|
94 |
-
$new_db_prefix = wp_strip_all_tags( trim( $_POST['aiowps_new_manual_db_prefix'] ) );
|
95 |
-
$error = $wpdb->set_prefix( $new_db_prefix );
|
96 |
-
if(is_wp_error($error))
|
97 |
-
{
|
98 |
-
wp_die( __('<strong>ERROR</strong>: The table prefix can only contain numbers, letters, and underscores.', 'aiowpsecurity') );
|
99 |
-
}
|
100 |
-
$perform_db_change = true;
|
101 |
-
}
|
102 |
-
}
|
103 |
-
}
|
104 |
-
?>
|
105 |
-
<h2><?php _e('Change Database Prefix', 'aiowpsecurity')?></h2>
|
106 |
-
<div class="aio_blue_box">
|
107 |
-
<?php
|
108 |
-
echo '<p>'.__('Your WordPress DB is the most important asset of your website because it contains a lot of your site\'s precious information.', 'aiowpsecurity').'
|
109 |
-
<br />'.__('The DB is also a target for hackers via methods such as SQL injections and malicious and automated code which targets certain tables.', 'aiowpsecurity').'
|
110 |
-
<br />'.__('One way to add a layer of protection for your DB is to change the default WordPress table prefix from "wp_" to something else which will be difficult for hackers to guess.', 'aiowpsecurity').'
|
111 |
-
<br />'.__('This feature allows you to easily change the prefix to a value of your choice or to a random value set by this plugin.', 'aiowpsecurity').'
|
112 |
-
</p>';
|
113 |
-
?>
|
114 |
-
</div>
|
115 |
-
|
116 |
-
<div class="postbox">
|
117 |
-
<h3><label for="title"><?php _e('DB Prefix Options', 'aiowpsecurity'); ?></label></h3>
|
118 |
-
<div class="inside">
|
119 |
-
<?php
|
120 |
-
//Display security info badge
|
121 |
-
global $aiowps_feature_mgr;
|
122 |
-
$aiowps_feature_mgr->output_feature_details_badge("db-security-db-prefix");
|
123 |
-
?>
|
124 |
-
|
125 |
-
<div class="aio_yellow_box">
|
126 |
-
<?php
|
127 |
-
$backup_tab_link = '<a href="admin.php?page='.AIOWPSEC_DB_SEC_MENU_SLUG.'&tab=tab2">DB Backup</a>';
|
128 |
-
$info_msg = '<p>'.sprintf( __('It is recommended that you perform a %s before using this feature', 'aiowpsecurity'), $backup_tab_link).'</p>';
|
129 |
-
echo $info_msg;
|
130 |
-
?>
|
131 |
-
</div>
|
132 |
-
|
133 |
-
<form action="" method="POST">
|
134 |
-
<?php wp_nonce_field('aiowpsec-db-prefix-change-nonce'); ?>
|
135 |
-
<table class="form-table">
|
136 |
-
<tr valign="top">
|
137 |
-
<th scope="row"><?php _e('Current DB Table Prefix', 'aiowpsecurity')?>:</th>
|
138 |
-
<td>
|
139 |
-
<span class="aiowpsec_field_value"><strong><?php echo $wpdb->prefix; ?></strong></span>
|
140 |
-
<?php
|
141 |
-
//now let's display a warning notification if default prefix is used
|
142 |
-
if ($old_db_prefix == 'wp_') {
|
143 |
-
echo ' <span class="aio_error_with_icon">'.__('Your site is currently using the default WordPress DB prefix value of "wp_".
|
144 |
-
To increase your site\'s security you should consider changing the DB prefix value to another value.', 'aiowpsecurity').'</span>';
|
145 |
-
}
|
146 |
-
?>
|
147 |
-
</td>
|
148 |
-
</tr>
|
149 |
-
<tr valign="top">
|
150 |
-
<th scope="row"><?php _e('Generate New DB Table Prefix', 'aiowpsecurity')?>:</th>
|
151 |
-
<td>
|
152 |
-
<input name="aiowps_enable_random_prefix" type="checkbox" <?php if($aio_wp_security->configs->get_value('aiowps_enable_random_prefix')=='1') echo ' checked="checked"'; ?> value="1"/>
|
153 |
-
<span class="description"><?php _e('Check this if you want the plugin to generate a random 6 character string for the table prefix', 'aiowpsecurity'); ?></span>
|
154 |
-
<br /><?php _e('OR', 'aiowpsecurity'); ?>
|
155 |
-
<br /><input size="10" name="aiowps_new_manual_db_prefix" value="<?php //echo $aio_wp_security->configs->get_value('aiowps_new_manual_db_prefix'); ?>" />
|
156 |
-
<span class="description"><?php _e('Choose your own DB prefix by specifying a string which contains letters and/or numbers and/or underscores. Example: xyz_', 'aiowpsecurity'); ?></span>
|
157 |
-
</td>
|
158 |
-
</tr>
|
159 |
-
</table>
|
160 |
-
<input type="submit" name="aiowps_db_prefix_change" value="<?php _e('Change DB Prefix', 'aiowpsecurity')?>" class="button-primary" />
|
161 |
-
</form>
|
162 |
-
</div></div>
|
163 |
-
<?php
|
164 |
-
if ($perform_db_change)
|
165 |
-
{
|
166 |
-
//Do the DB prefix change operations
|
167 |
-
$this->change_db_prefix($old_db_prefix,$new_db_prefix);
|
168 |
-
}
|
169 |
-
}
|
170 |
-
|
171 |
-
function render_tab2()
|
172 |
-
{
|
173 |
-
global $aio_wp_security;
|
174 |
-
if (isset($_POST['aiowps_manual_db_backup']))
|
175 |
-
{
|
176 |
-
$nonce=$_REQUEST['_wpnonce'];
|
177 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-db-manual-change-nonce'))
|
178 |
-
{
|
179 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed for manual DB backup operation!",4);
|
180 |
-
die(__('Nonce check failed for manual DB backup operation!','aiowpsecurity'));
|
181 |
-
}
|
182 |
-
|
183 |
-
$result = $aio_wp_security->backup_obj->execute_backup();
|
184 |
-
if ($result)
|
185 |
-
{
|
186 |
-
$backup_file_name = $aio_wp_security->backup_obj->last_backup_file_name;
|
187 |
-
$backup_file_url = AIO_WP_SECURITY_URL . '/backups/'. $backup_file_name;
|
188 |
-
echo '<div id="message" class="updated fade"><p>';
|
189 |
-
_e('DB Backup was successfully completed! Right click on the following file name and save the backup to your computer.','aiowpsecurity');
|
190 |
-
echo '<p>';
|
191 |
-
_e('Your DB Backup File: ');
|
192 |
-
echo '<a href="'.$backup_file_url.'" target="_blank">'.$backup_file_name.'</a>';
|
193 |
-
echo '</p>';
|
194 |
-
echo '</p></div>';
|
195 |
-
}
|
196 |
-
else
|
197 |
-
{
|
198 |
-
$aio_wp_security->debug_logger->log_debug("DB Backup - Backup operation failed!",4);
|
199 |
-
$this->show_msg_error(__('DB Backup failed. Please check the permissions of the backup directory.','aiowpsecurity'));
|
200 |
-
}
|
201 |
-
}
|
202 |
-
|
203 |
-
if(isset($_POST['aiowps_schedule_backups']))//Do form submission tasks
|
204 |
-
{
|
205 |
-
$error = '';
|
206 |
-
$nonce=$_REQUEST['_wpnonce'];
|
207 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-scheduled-backup-nonce'))
|
208 |
-
{
|
209 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed on scheduled DB backup options save!",4);
|
210 |
-
die("Nonce check failed on scheduled DB backup options save!");
|
211 |
-
}
|
212 |
-
|
213 |
-
$backup_frequency = sanitize_text_field($_POST['aiowps_db_backup_frequency']);
|
214 |
-
if(!is_numeric($backup_frequency))
|
215 |
-
{
|
216 |
-
$error .= '<br />'.__('You entered a non numeric value for the "backup time interval" field. It has been set to the default value.','aiowpsecurity');
|
217 |
-
$backup_frequency = '4';//Set it to the default value for this field
|
218 |
-
}
|
219 |
-
|
220 |
-
$files_to_keep = sanitize_text_field($_POST['aiowps_backup_files_stored']);
|
221 |
-
if(!is_numeric($files_to_keep))
|
222 |
-
{
|
223 |
-
$error .= '<br />'.__('You entered a non numeric value for the "number of backup files to keep" field. It has been set to the default value.','aiowpsecurity');
|
224 |
-
$files_to_keep = '2';//Set it to the default value for this field
|
225 |
-
}
|
226 |
-
|
227 |
-
$email_address = sanitize_email($_POST['aiowps_backup_email_address']);
|
228 |
-
if(!is_email($email_address))
|
229 |
-
{
|
230 |
-
$error .= '<br />'.__('You have entered an incorrect email address format. It has been set to your WordPress admin email as default.','aiowpsecurity');
|
231 |
-
$email_address = get_bloginfo('admin_email'); //Set the default value to the blog admin email
|
232 |
-
}
|
233 |
-
|
234 |
-
if($error)
|
235 |
-
{
|
236 |
-
$this->show_msg_error(__('Attention!','aiowpsecurity').$error);
|
237 |
-
}
|
238 |
-
|
239 |
-
//Save all the form values to the options
|
240 |
-
$aio_wp_security->configs->set_value('aiowps_enable_automated_backups',isset($_POST["aiowps_enable_automated_backups"])?'1':'');
|
241 |
-
$aio_wp_security->configs->set_value('aiowps_db_backup_frequency',absint($backup_frequency));
|
242 |
-
$aio_wp_security->configs->set_value('aiowps_db_backup_interval',$_POST["aiowps_db_backup_interval"]);
|
243 |
-
$aio_wp_security->configs->set_value('aiowps_backup_files_stored',absint($files_to_keep));
|
244 |
-
$aio_wp_security->configs->set_value('aiowps_send_backup_email_address',isset($_POST["aiowps_send_backup_email_address"])?'1':'');
|
245 |
-
$aio_wp_security->configs->set_value('aiowps_backup_email_address',$email_address);
|
246 |
-
$aio_wp_security->configs->save_config();
|
247 |
-
$this->show_msg_settings_updated();
|
248 |
-
}
|
249 |
-
|
250 |
-
?>
|
251 |
-
<div class="postbox">
|
252 |
-
<h3><label for="title"><?php _e('Manual Backup', 'aiowpsecurity'); ?></label></h3>
|
253 |
-
<div class="inside">
|
254 |
-
<form action="" method="POST">
|
255 |
-
<?php wp_nonce_field('aiowpsec-db-manual-change-nonce'); ?>
|
256 |
-
<table class="form-table">
|
257 |
-
<tr valign="top">
|
258 |
-
<span class="description"><?php _e('To create a new DB backup just click on the button below.', 'aiowpsecurity'); ?></span>
|
259 |
-
</tr>
|
260 |
-
</table>
|
261 |
-
<input type="submit" name="aiowps_manual_db_backup" value="<?php _e('Create DB Backup Now', 'aiowpsecurity')?>" class="button-primary" />
|
262 |
-
</form>
|
263 |
-
</div></div>
|
264 |
-
<div class="postbox">
|
265 |
-
<h3><label for="title"><?php _e('Automated Scheduled Backups', 'aiowpsecurity'); ?></label></h3>
|
266 |
-
<div class="inside">
|
267 |
-
<?php
|
268 |
-
//Display security info badge
|
269 |
-
global $aiowps_feature_mgr;
|
270 |
-
$aiowps_feature_mgr->output_feature_details_badge("db-security-db-backup");
|
271 |
-
?>
|
272 |
-
|
273 |
-
<form action="" method="POST">
|
274 |
-
<?php wp_nonce_field('aiowpsec-scheduled-backup-nonce'); ?>
|
275 |
-
<table class="form-table">
|
276 |
-
<tr valign="top">
|
277 |
-
<th scope="row"><?php _e('Enable Automated Scheduled Backups', 'aiowpsecurity')?>:</th>
|
278 |
-
<td>
|
279 |
-
<input name="aiowps_enable_automated_backups" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_enable_automated_backups')=='1') echo ' checked="checked"'; ?> value="1"/>
|
280 |
-
<span class="description"><?php _e('Check this if you want the system to automatically generate backups periodically based on the settings below', 'aiowpsecurity'); ?></span>
|
281 |
-
</td>
|
282 |
-
</tr>
|
283 |
-
<tr valign="top">
|
284 |
-
<th scope="row"><?php _e('Backup Time Interval', 'aiowpsecurity')?>:</th>
|
285 |
-
<td><input size="5" name="aiowps_db_backup_frequency" value="<?php echo $aio_wp_security->configs->get_value('aiowps_db_backup_frequency'); ?>" />
|
286 |
-
<select id="backup_interval" name="aiowps_db_backup_interval">
|
287 |
-
<option value="0" <?php selected( $aio_wp_security->configs->get_value('aiowps_db_backup_interval'), '0' ); ?>><?php _e( 'Hours', 'aiowpsecurity' ); ?></option>
|
288 |
-
<option value="1" <?php selected( $aio_wp_security->configs->get_value('aiowps_db_backup_interval'), '1' ); ?>><?php _e( 'Days', 'aiowpsecurity' ); ?></option>
|
289 |
-
<option value="2" <?php selected( $aio_wp_security->configs->get_value('aiowps_db_backup_interval'), '2' ); ?>><?php _e( 'Weeks', 'aiowpsecurity' ); ?></option>
|
290 |
-
</select>
|
291 |
-
<span class="description"><?php _e('Set the value for how often you would like an automated backup to occur', 'aiowpsecurity'); ?></span>
|
292 |
-
</td>
|
293 |
-
</tr>
|
294 |
-
<tr valign="top">
|
295 |
-
<th scope="row"><?php _e('Number of Backup Files To Keep', 'aiowpsecurity')?>:</th>
|
296 |
-
<td><input size="5" name="aiowps_backup_files_stored" value="<?php echo $aio_wp_security->configs->get_value('aiowps_backup_files_stored'); ?>" />
|
297 |
-
<span class="description"><?php _e('Thie field allows you to choose the number of backup files you would like to keep in the backup directory', 'aiowpsecurity'); ?></span>
|
298 |
-
</td>
|
299 |
-
</tr>
|
300 |
-
<tr valign="top">
|
301 |
-
<th scope="row"><?php _e('Send Backup File Via Email', 'aiowpsecurity')?>:</th>
|
302 |
-
<td>
|
303 |
-
<input name="aiowps_send_backup_email_address" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_send_backup_email_address')=='1') echo ' checked="checked"'; ?> value="1"/>
|
304 |
-
<span class="description"><?php _e('Check this if you want the system to email you the backup file after a DB backup has been performed', 'aiowpsecurity'); ?></span>
|
305 |
-
<br /><input size="30" name="aiowps_backup_email_address" value="<?php echo $aio_wp_security->configs->get_value('aiowps_backup_email_address'); ?>" />
|
306 |
-
<span class="description"><?php _e('Enter an email address', 'aiowpsecurity'); ?></span>
|
307 |
-
</td>
|
308 |
-
</tr>
|
309 |
-
</table>
|
310 |
-
<input type="submit" name="aiowps_schedule_backups" value="<?php _e('Save Settings', 'aiowpsecurity')?>" class="button-primary" />
|
311 |
-
</form>
|
312 |
-
</div></div>
|
313 |
-
|
314 |
-
<?php
|
315 |
-
}
|
316 |
-
|
317 |
-
/*
|
318 |
-
* Changes the DB prefix
|
319 |
-
*/
|
320 |
-
function change_db_prefix($table_old_prefix, $table_new_prefix)
|
321 |
-
{
|
322 |
-
global $wpdb, $aio_wp_security;
|
323 |
-
$old_prefix_length = strlen( $table_old_prefix );
|
324 |
-
|
325 |
-
//Get the table resource
|
326 |
-
$result = mysql_list_tables(DB_NAME);
|
327 |
-
|
328 |
-
//Count the number of tables
|
329 |
-
$num_rows = mysql_num_rows( $result );
|
330 |
-
$table_count = 0;
|
331 |
-
|
332 |
-
//TODO - after reading up on internationalization mixed with html code I found that the WP experts say to do it as below. We will need to clean up other areas where we haven't used the following convention
|
333 |
-
$info_msg_string = '<p class="aio_info_with_icon">'.sprintf( __('Starting DB prefix change.....', 'aiowpsecurity')).'</p>';
|
334 |
-
$info_msg_string .= '<p class="aio_info_with_icon">'.sprintf( __('Your WordPress system has a total of %s tables and your new DB prefix will be: %s', 'aiowpsecurity'), '<strong>'.$num_rows.'</strong>', '<strong>'.$table_new_prefix.'</strong>').'</p>';
|
335 |
-
echo ($info_msg_string);
|
336 |
-
|
337 |
-
//Config file path
|
338 |
-
$config_file = ABSPATH.'wp-config.php';
|
339 |
-
//Do a back of the config file
|
340 |
-
if(!AIOWPSecurity_Utility_File::backup_a_file($config_file))
|
341 |
-
{
|
342 |
-
echo '<div class="aio_red_box"><p>'.__('Failed to make a backup of the wp-config.php file. This operation will not go ahead.', 'aiowpsecurity').'</p></div>';
|
343 |
-
return;
|
344 |
-
}
|
345 |
-
else{
|
346 |
-
echo '<p class="aio_success_with_icon">'.__('A backup copy of your wp-config.php file was created successfully!', 'aiowpsecurity').'</p>';
|
347 |
-
}
|
348 |
-
|
349 |
-
//Rename all the tables name
|
350 |
-
for ($i = 0; $i < $num_rows; $i++)
|
351 |
-
{
|
352 |
-
//Get table name with old prefix
|
353 |
-
$table_old_name = mysql_tablename($result, $i);
|
354 |
-
|
355 |
-
if ( strpos( $table_old_name, $table_old_prefix ) === 0 )
|
356 |
-
{
|
357 |
-
//Get table name with new prefix
|
358 |
-
$table_new_name = $table_new_prefix . substr( $table_old_name, $old_prefix_length );
|
359 |
-
|
360 |
-
//Write query to rename tables name
|
361 |
-
$sql = "RENAME TABLE `".$table_old_name."` TO `".$table_new_name."`";
|
362 |
-
//$sql = "RENAME TABLE %s TO %s";
|
363 |
-
|
364 |
-
//Execute the query
|
365 |
-
//if ( false === $wpdb->query($wpdb->prepare($sql, $table_old_name, $table_new_name)) ) //$wpdb->prepare is adding single quotes instead of backticks and hence causing the query to fail
|
366 |
-
if ( false === $wpdb->query($sql) )
|
367 |
-
{
|
368 |
-
$error = 1;
|
369 |
-
echo '<p class="aio_error_with_icon">'.sprintf( __('%s table name update failed', 'aiowpsecurity'), '<strong>'.$table_old_name.'</strong>').'</p>';
|
370 |
-
$aio_wp_security->debug_logger->log_debug("DB Security Feature - Unable to change prefix of table ".$table_old_name,4);
|
371 |
-
} else {
|
372 |
-
$table_count++;
|
373 |
-
}
|
374 |
-
} else
|
375 |
-
{
|
376 |
-
continue;
|
377 |
-
}
|
378 |
-
}
|
379 |
-
if ( @$error == 1 )
|
380 |
-
{
|
381 |
-
echo '<p class="aio_error_with_icon">'.sprintf( __('Please change the prefix manually for the above tables to: %s', 'aiowpsecurity'), '<strong>'.$table_new_prefix.'</strong>').'</p>';
|
382 |
-
} else
|
383 |
-
{
|
384 |
-
echo '<p class="aio_success_with_icon">'.sprintf( __('%s tables had their prefix updated successfully!', 'aiowpsecurity'), '<strong>'.$table_count.'</strong>').'</p>';
|
385 |
-
}
|
386 |
-
|
387 |
-
//Get wp-config.php file contents and modify it with new info
|
388 |
-
$config_contents = file($config_file);
|
389 |
-
foreach ($config_contents as $line_num => $line) {
|
390 |
-
switch (substr($line,0,16)) {
|
391 |
-
case '$table_prefix =':
|
392 |
-
$config_contents[$line_num] = str_replace($table_old_prefix, $table_new_prefix, $line);
|
393 |
-
break;
|
394 |
-
}
|
395 |
-
}
|
396 |
-
//Now let's modify the wp-config.php file
|
397 |
-
if (AIOWPSecurity_Utility_File::write_content_to_file($config_file, $config_contents))
|
398 |
-
{
|
399 |
-
echo '<p class="aio_success_with_icon">'. __('wp-config.php file was updated successfully!', 'aiowpsecurity').'</p>';
|
400 |
-
}else
|
401 |
-
{
|
402 |
-
echo '<p class="aio_error_with_icon">'.sprintf( __('The "wp-config.php" file was not able to be modified. Please modify this file manually using your favourite editor and search
|
403 |
-
for variable "$table_prefix" and assign the following value to that variable: %s', 'aiowpsecurity'), '<strong>'.$table_new_prefix.'</strong>').'</p>';
|
404 |
-
$aio_wp_security->debug_logger->log_debug("DB Security Feature - Unable to modify wp-config.php",4);
|
405 |
-
}
|
406 |
-
|
407 |
-
//Now let's update the options table
|
408 |
-
$update_option_table_query = "UPDATE " . $table_new_prefix . "options
|
409 |
-
SET option_name = '".$table_new_prefix ."user_roles'
|
410 |
-
WHERE option_name = '".$table_old_prefix."user_roles'
|
411 |
-
LIMIT 1";
|
412 |
-
|
413 |
-
if ( false === $wpdb->query($update_option_table_query) )
|
414 |
-
{
|
415 |
-
echo "<p class='error'>Changing value: ",
|
416 |
-
$table_old_prefix,
|
417 |
-
"user_roles in table ",
|
418 |
-
$table_new_prefix,
|
419 |
-
"options to ",
|
420 |
-
$table_new_prefix,
|
421 |
-
"user_roles</p>";
|
422 |
-
|
423 |
-
echo '<p class="aio_error_with_icon">'.sprintf( __('There was an error when updating the options table.', 'aiowpsecurity')).'</p>';
|
424 |
-
$aio_wp_security->debug_logger->log_debug("DB Security Feature - Error when updating the options table",4);//Log the highly unlikely event of DB error
|
425 |
-
} else
|
426 |
-
{
|
427 |
-
echo '<p class="aio_success_with_icon">'.sprintf( __('The options table records which had references to the old DB prefix were updated successfully!', 'aiowpsecurity')).'</p>';
|
428 |
-
}
|
429 |
-
//Now let's update the user meta table
|
430 |
-
$custom_sql = "SELECT user_id, meta_key
|
431 |
-
FROM " . $table_new_prefix . "usermeta
|
432 |
-
WHERE meta_key
|
433 |
-
LIKE '" . $table_old_prefix . "%'";
|
434 |
-
|
435 |
-
$meta_keys = $wpdb->get_results( $custom_sql );
|
436 |
-
|
437 |
-
$error_update_usermeta = '';
|
438 |
-
|
439 |
-
//Update all meta_key field values which have the old table prefix in user_meta table
|
440 |
-
foreach ($meta_keys as $meta_key ) {
|
441 |
-
|
442 |
-
//Create new meta key
|
443 |
-
$new_meta_key = $table_new_prefix . substr( $meta_key->meta_key, $old_prefix_length );
|
444 |
-
|
445 |
-
$update_user_meta_sql = "UPDATE " . $table_new_prefix . "usermeta
|
446 |
-
SET meta_key='" . $new_meta_key . "'
|
447 |
-
WHERE meta_key='" . $meta_key->meta_key . "'
|
448 |
-
AND user_id='" . $meta_key->user_id."'";
|
449 |
-
|
450 |
-
if (false === $wpdb->query($update_user_meta_sql))
|
451 |
-
{
|
452 |
-
$error_update_usermeta .= '<p class="aio_error_with_icon">'.sprintf( __('Error updating user_meta table where new meta_key = %s, old meta_key = %s and user_id = %s.', 'aiowpsecurity'),$new_meta_key,$meta_key->meta_key,$meta_key->user_id).'</p>';
|
453 |
-
echo $error_update_usermeta;
|
454 |
-
$aio_wp_security->debug_logger->log_debug("DB Security Feature - Error updating user_meta table where new meta_key = ".$new_meta_key." old meta_key = ".$meta_key->meta_key." and user_id = ".$meta_key->user_id,4);//Log the highly unlikely event of DB error
|
455 |
-
}
|
456 |
-
|
457 |
-
}
|
458 |
-
echo '<p class="aio_success_with_icon">'.__('The usermeta table records which had references to the old DB prefix were updated successfully!', 'aiowpsecurity').'</p>';
|
459 |
-
//Display tasks finished message
|
460 |
-
$tasks_finished_msg_string = '<p class="aio_info_with_icon">'. __('DB prefix change tasks have been completed.', 'aiowpsecurity').'</p>';
|
461 |
-
echo ($tasks_finished_msg_string);
|
462 |
-
}
|
463 |
-
} //end class
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/admin/wp-security-filesystem-menu.php
DELETED
@@ -1,500 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_Filescan_Menu extends AIOWPSecurity_Admin_Menu
|
4 |
-
{
|
5 |
-
var $menu_page_slug = AIOWPSEC_FILESYSTEM_MENU_SLUG;
|
6 |
-
|
7 |
-
/* Specify all the tabs of this menu in the following array */
|
8 |
-
var $menu_tabs = array(
|
9 |
-
'tab1' => 'File Permissions',
|
10 |
-
'tab2' => 'PHP File Editing',
|
11 |
-
'tab3' => 'Host System Logs',
|
12 |
-
);
|
13 |
-
|
14 |
-
var $menu_tabs_handler = array(
|
15 |
-
'tab1' => 'render_tab1',
|
16 |
-
'tab2' => 'render_tab2',
|
17 |
-
'tab3' => 'render_tab3',
|
18 |
-
);
|
19 |
-
|
20 |
-
function __construct()
|
21 |
-
{
|
22 |
-
$this->render_menu_page();
|
23 |
-
add_action( 'admin_footer', array( &$this, 'filesystem_menu_footer_code' ) );
|
24 |
-
}
|
25 |
-
|
26 |
-
function get_current_tab()
|
27 |
-
{
|
28 |
-
$tab_keys = array_keys($this->menu_tabs);
|
29 |
-
$tab = isset( $_GET['tab'] ) ? $_GET['tab'] : $tab_keys[0];
|
30 |
-
return $tab;
|
31 |
-
}
|
32 |
-
|
33 |
-
/*
|
34 |
-
* Renders our tabs of this menu as nav items
|
35 |
-
*/
|
36 |
-
function render_menu_tabs()
|
37 |
-
{
|
38 |
-
$current_tab = $this->get_current_tab();
|
39 |
-
|
40 |
-
echo '<h2 class="nav-tab-wrapper">';
|
41 |
-
foreach ( $this->menu_tabs as $tab_key => $tab_caption )
|
42 |
-
{
|
43 |
-
$active = $current_tab == $tab_key ? 'nav-tab-active' : '';
|
44 |
-
echo '<a class="nav-tab ' . $active . '" href="?page=' . $this->menu_page_slug . '&tab=' . $tab_key . '">' . $tab_caption . '</a>';
|
45 |
-
}
|
46 |
-
echo '</h2>';
|
47 |
-
}
|
48 |
-
|
49 |
-
/*
|
50 |
-
* The menu rendering goes here
|
51 |
-
*/
|
52 |
-
function render_menu_page()
|
53 |
-
{
|
54 |
-
$tab = $this->get_current_tab();
|
55 |
-
?>
|
56 |
-
<div class="wrap">
|
57 |
-
<div id="poststuff"><div id="post-body">
|
58 |
-
<?php
|
59 |
-
$this->render_menu_tabs();
|
60 |
-
//$tab_keys = array_keys($this->menu_tabs);
|
61 |
-
call_user_func(array(&$this, $this->menu_tabs_handler[$tab]));
|
62 |
-
?>
|
63 |
-
</div></div>
|
64 |
-
</div><!-- end of wrap -->
|
65 |
-
<?php
|
66 |
-
}
|
67 |
-
|
68 |
-
function render_tab1()
|
69 |
-
{
|
70 |
-
//if this is the case there is no need to display a "fix permissions" button
|
71 |
-
global $wpdb, $aio_wp_security;
|
72 |
-
if (isset($_POST['aiowps_fix_permissions']))
|
73 |
-
{
|
74 |
-
$nonce=$_REQUEST['_wpnonce'];
|
75 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-fix-permissions-nonce'))
|
76 |
-
{
|
77 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed for manual DB backup operation!",4);
|
78 |
-
die(__('Nonce check failed for manual DB backup operation!','aiowpsecurity'));
|
79 |
-
}
|
80 |
-
if (isset($_POST['aiowps_permission_chg_file']))
|
81 |
-
{
|
82 |
-
$folder_or_file = $_POST['aiowps_permission_chg_file'];
|
83 |
-
$rec_perm_oct_string = $_POST['aiowps_recommended_permissions']; //Convert the octal string to dec so the chmod func will accept it
|
84 |
-
$rec_perm_dec = octdec($rec_perm_oct_string); //Convert the octal string to dec so the chmod func will accept it
|
85 |
-
$perm_result = @chmod($_POST['aiowps_permission_chg_file'], $rec_perm_dec);
|
86 |
-
if ($perm_result === true)
|
87 |
-
{
|
88 |
-
$msg = sprintf( __('The permissions for %s were succesfully changed to %s', 'aiowpsecurity'), $folder_or_file, $rec_perm_oct_string);
|
89 |
-
$this->show_msg_updated($msg);
|
90 |
-
}else if($perm_result === false)
|
91 |
-
{
|
92 |
-
$msg = sprintf( __('Unable to change permissions for %s!', 'aiowpsecurity'), $folder_or_file);
|
93 |
-
$this->show_msg_error($msg);
|
94 |
-
}
|
95 |
-
}
|
96 |
-
}
|
97 |
-
?>
|
98 |
-
<h2><?php _e('File Permissions Scan', 'aiowpsecurity')?></h2>
|
99 |
-
<div class="aio_blue_box">
|
100 |
-
<?php
|
101 |
-
echo '<p>'.__('Your WordPress file and folder permission settings govern the accessability and read/write privileges of the files and folders which make up your WP installation.', 'aiowpsecurity').'
|
102 |
-
<br />'.__('Your WP installation already comes with reasonably secure file permission settings for the filesystem.', 'aiowpsecurity').'
|
103 |
-
<br />'.__('However, sometimes people or other plugins modify the various permission settings of certain core WP folders or files such that they end up making their site less secure because they chose the wrong permission values.', 'aiowpsecurity').'
|
104 |
-
<br />'.__('This feature will scan the critical WP core folders and files and will highlight any permission settings which are insecure.', 'aiowpsecurity').'
|
105 |
-
</p>';
|
106 |
-
?>
|
107 |
-
</div>
|
108 |
-
|
109 |
-
<div class="postbox">
|
110 |
-
<h3><label for="title"><?php _e('WP Directory and File Permissions Scan Results', 'aiowpsecurity'); ?></label></h3>
|
111 |
-
<div class="inside">
|
112 |
-
<?php
|
113 |
-
//Display security info badge
|
114 |
-
global $aiowps_feature_mgr;
|
115 |
-
$aiowps_feature_mgr->output_feature_details_badge("filesystem-file-permissions");
|
116 |
-
?>
|
117 |
-
<form action="" method="POST">
|
118 |
-
<?php wp_nonce_field('aiowpsec-fix-permissions-nonce'); ?>
|
119 |
-
<table class="widefat file_permission_table">
|
120 |
-
<thead>
|
121 |
-
<tr>
|
122 |
-
<th><?php _e('Name', 'aiowpsecurity') ?></th>
|
123 |
-
<th><?php _e('File/Folder', 'aiowpsecurity') ?></th>
|
124 |
-
<th><?php _e('Current Permissions', 'aiowpsecurity') ?></th>
|
125 |
-
<th><?php _e('Recommended Permissions', 'aiowpsecurity') ?></th>
|
126 |
-
<th><?php _e('Recommended Action', 'aiowpsecurity') ?></th>
|
127 |
-
</tr>
|
128 |
-
</thead>
|
129 |
-
<tbody>
|
130 |
-
<?php
|
131 |
-
$util = new AIOWPSecurity_Utility_File;
|
132 |
-
$files_dirs_to_check = $util->files_and_dirs_to_check;
|
133 |
-
foreach ($files_dirs_to_check as $file_or_dir)
|
134 |
-
{
|
135 |
-
$this->show_wp_filesystem_permission_status($file_or_dir['name'],$file_or_dir['path'],$file_or_dir['permissions']);
|
136 |
-
}
|
137 |
-
?>
|
138 |
-
</tbody>
|
139 |
-
<tfoot>
|
140 |
-
<tr>
|
141 |
-
<th><?php _e('Name', 'aiowpsecurity') ?></th>
|
142 |
-
<th><?php _e('File/Folder', 'aiowpsecurity') ?></th>
|
143 |
-
<th><?php _e('Current Permissions', 'aiowpsecurity') ?></th>
|
144 |
-
<th><?php _e('Recommended Permissions', 'aiowpsecurity') ?></th>
|
145 |
-
<th><?php _e('Recommended Action', 'aiowpsecurity') ?></th>
|
146 |
-
</tfoot>
|
147 |
-
</table>
|
148 |
-
</form>
|
149 |
-
</div></div>
|
150 |
-
<?php
|
151 |
-
}
|
152 |
-
|
153 |
-
function render_tab2()
|
154 |
-
{
|
155 |
-
global $aio_wp_security;
|
156 |
-
|
157 |
-
if(isset($_POST['aiowps_disable_file_edit']))//Do form submission tasks
|
158 |
-
{
|
159 |
-
$nonce=$_REQUEST['_wpnonce'];
|
160 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-disable-file-edit-nonce'))
|
161 |
-
{
|
162 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed on disable PHP file edit options save!",4);
|
163 |
-
die("Nonce check failed on disable PHP file edit options save!");
|
164 |
-
}
|
165 |
-
|
166 |
-
if(isset($_POST['aiowps_disable_file_editing']))
|
167 |
-
{
|
168 |
-
|
169 |
-
$res = $this->disable_file_edits();
|
170 |
-
} else
|
171 |
-
{
|
172 |
-
$res = $this->enable_file_edits();
|
173 |
-
}
|
174 |
-
if ($res)
|
175 |
-
{
|
176 |
-
//Save settings if no errors
|
177 |
-
$aio_wp_security->configs->set_value('aiowps_disable_file_editing',isset($_POST["aiowps_disable_file_editing"])?'1':'');
|
178 |
-
$aio_wp_security->configs->save_config();
|
179 |
-
}
|
180 |
-
//$this->show_msg_settings_updated();
|
181 |
-
|
182 |
-
}
|
183 |
-
?>
|
184 |
-
<h2><?php _e('File Editing', 'aiowpsecurity')?></h2>
|
185 |
-
<div class="aio_blue_box">
|
186 |
-
<?php
|
187 |
-
echo '<p>'.__('The Wordpress Dashboard by default allows administrators to edit PHP files, such as plugin and theme files.', 'aiowpsecurity').'
|
188 |
-
<br />'.__('This is often the first tool an attacker will use if able to login, since it allows code execution.', 'aiowpsecurity').'
|
189 |
-
<br />'.__('This feature will disable the ability for people to edit PHP files via the dashboard.', 'aiowpsecurity').'
|
190 |
-
</p>';
|
191 |
-
?>
|
192 |
-
</div>
|
193 |
-
|
194 |
-
<div class="postbox">
|
195 |
-
<h3><label for="title"><?php _e('Disable PHP File Editing', 'aiowpsecurity'); ?></label></h3>
|
196 |
-
<div class="inside">
|
197 |
-
<?php
|
198 |
-
//Display security info badge
|
199 |
-
global $aiowps_feature_mgr;
|
200 |
-
$aiowps_feature_mgr->output_feature_details_badge("filesystem-file-editing");
|
201 |
-
?>
|
202 |
-
|
203 |
-
<form action="" method="POST">
|
204 |
-
<?php wp_nonce_field('aiowpsec-disable-file-edit-nonce'); ?>
|
205 |
-
<table class="form-table">
|
206 |
-
<tr valign="top">
|
207 |
-
<th scope="row"><?php _e('Disable Ability To Edit PHP Files', 'aiowpsecurity')?>:</th>
|
208 |
-
<td>
|
209 |
-
<input name="aiowps_disable_file_editing" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_disable_file_editing')=='1') echo ' checked="checked"'; ?> value="1"/>
|
210 |
-
<span class="description"><?php _e('Check this if you want to remove the ability for people to edit PHP files via the WP dashboard', 'aiowpsecurity'); ?></span>
|
211 |
-
</td>
|
212 |
-
</tr>
|
213 |
-
</table>
|
214 |
-
<input type="submit" name="aiowps_disable_file_edit" value="<?php _e('Save Settings', 'aiowpsecurity')?>" class="button-primary" />
|
215 |
-
</form>
|
216 |
-
</div></div>
|
217 |
-
<?php
|
218 |
-
}
|
219 |
-
|
220 |
-
function render_tab3()
|
221 |
-
{
|
222 |
-
global $aio_wp_security;
|
223 |
-
|
224 |
-
?>
|
225 |
-
<h2><?php _e('System Logs', 'aiowpsecurity')?></h2>
|
226 |
-
<div class="aio_blue_box">
|
227 |
-
<?php
|
228 |
-
echo '<p>'.__('Sometimes your hosting platform will produce error or warning logs in a file called "error_log".', 'aiowpsecurity').'
|
229 |
-
<br />'.__('Depending on the nature and cause of the error or warning, your hosting server can create multiple instances of this file in numerous directory locations of your WordPress installation.', 'aiowpsecurity').'
|
230 |
-
<br />'.__('By occassionally viewing the contents of these logs files you can keep informed of any underlying problems on your system which you might need to address.', 'aiowpsecurity').'
|
231 |
-
</p>';
|
232 |
-
?>
|
233 |
-
</div>
|
234 |
-
|
235 |
-
<div class="postbox">
|
236 |
-
<h3><label for="title"><?php _e('View System Logs', 'aiowpsecurity'); ?></label></h3>
|
237 |
-
<div class="inside">
|
238 |
-
<p>Please click the button below to view the latest system logs:</p>
|
239 |
-
<form action="" method="POST">
|
240 |
-
<?php wp_nonce_field('aiowpsec-view-system-logs-nonce'); ?>
|
241 |
-
<input type="submit" name="aiowps_search_error_files" value="<?php _e('View Latest System Logs', 'aiowpsecurity'); ?>" class="button-primary search-error-files" />
|
242 |
-
<span class="aiowps_loading_1">
|
243 |
-
<img src="<?php echo AIO_WP_SECURITY_URL.'/images/loading.gif'; ?>" alt="<?php __('Loading...', 'aiowpsecurity'); ?>" />
|
244 |
-
</span>
|
245 |
-
</form>
|
246 |
-
</div></div>
|
247 |
-
<?php
|
248 |
-
if (isset($_POST['aiowps_search_error_files']))
|
249 |
-
{
|
250 |
-
$nonce=$_REQUEST['_wpnonce'];
|
251 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-view-system-logs-nonce'))
|
252 |
-
{
|
253 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed on view system log operation!",4);
|
254 |
-
die("Nonce check failed on view system log operation!");
|
255 |
-
}
|
256 |
-
|
257 |
-
$logResults = AIOWPSecurity_Utility_File::recursive_file_search('error_log', 0, ABSPATH);
|
258 |
-
if (empty($logResults) || $logResults == NULL || $logResults == '')
|
259 |
-
{
|
260 |
-
$this->show_msg_updated(__('No system logs were found!', 'aiowpsecurity'));
|
261 |
-
}
|
262 |
-
else
|
263 |
-
{
|
264 |
-
foreach($logResults as $file)
|
265 |
-
{
|
266 |
-
$this->display_system_logs_in_table($file);
|
267 |
-
}
|
268 |
-
}
|
269 |
-
}
|
270 |
-
}
|
271 |
-
|
272 |
-
/*
|
273 |
-
* Scans WP key core files and directory permissions and populates a wp wide_fat table
|
274 |
-
* Displays a red background entry with a "Fix" button for permissions which are "777"
|
275 |
-
* Displays a yellow background entry with a "Fix" button for permissions which are less secure than the recommended
|
276 |
-
* Displays a green entry for permissions which are as secure or better than the recommended
|
277 |
-
*/
|
278 |
-
function show_wp_filesystem_permission_status($name,$path,$recommended)
|
279 |
-
{
|
280 |
-
$fix = false;
|
281 |
-
$configmod = AIOWPSecurity_Utility_File::get_file_permission($path);
|
282 |
-
if ($configmod == "0777"){
|
283 |
-
$trclass = "aio_table_row_red"; //Display a red background if permissions are set as least secure ("777")
|
284 |
-
$fix = true;
|
285 |
-
}
|
286 |
-
else if($configmod != $recommended)
|
287 |
-
{
|
288 |
-
//$res = $this->is_file_permission_secure($recommended, $configmod);
|
289 |
-
$res = AIOWPSecurity_Utility_File::is_file_permission_secure($recommended, $configmod);
|
290 |
-
if ($res)
|
291 |
-
{
|
292 |
-
$trclass = "aio_table_row_green"; //If the current permissions are even tighter than recommended then display a green row
|
293 |
-
$fix = true;
|
294 |
-
}
|
295 |
-
else
|
296 |
-
{
|
297 |
-
$trclass = "aio_table_row_yellow"; //Display a yellow background if permissions are set to something different than recommended
|
298 |
-
$fix = true;
|
299 |
-
}
|
300 |
-
}
|
301 |
-
else
|
302 |
-
{
|
303 |
-
$trclass = "aio_table_row_green";
|
304 |
-
}
|
305 |
-
echo "<tr class=".$trclass.">";
|
306 |
-
echo '<td>' . $name . "</td>";
|
307 |
-
echo '<td>'. $path ."</td>";
|
308 |
-
echo '<td>' . $configmod . '</td>';
|
309 |
-
echo '<td>' . $recommended . '</td>';
|
310 |
-
if ($fix)
|
311 |
-
{
|
312 |
-
echo '<td>
|
313 |
-
<input type="submit" name="aiowps_fix_permissions" value="'.__('Set Recommended Permissions','aiowpsecurity').'" class="button-secondary" />
|
314 |
-
<input type="hidden" name="aiowps_permission_chg_file" value="'.$path.'"/>
|
315 |
-
<input type="hidden" name="aiowps_recommended_permissions" value="'.$recommended.'"/>
|
316 |
-
</td>';
|
317 |
-
} else
|
318 |
-
{
|
319 |
-
echo '<td>'.__('No Action Required', 'aiowpsecurity').'</td>';
|
320 |
-
}
|
321 |
-
echo "</tr>";
|
322 |
-
}
|
323 |
-
|
324 |
-
|
325 |
-
/*
|
326 |
-
* Modifies the wp-config.php file to disable PHP file editing from the admin panel
|
327 |
-
* This func will add the following code:
|
328 |
-
* define('DISALLOW_FILE_EDIT', false);
|
329 |
-
*
|
330 |
-
* NOTE: This function will firstly check if the above code already exists and it will modify the bool value, otherwise it will insert the code mentioned above
|
331 |
-
*/
|
332 |
-
function disable_file_edits()
|
333 |
-
{
|
334 |
-
global $aio_wp_security;
|
335 |
-
$edit_file_config_entry_exists = false;
|
336 |
-
|
337 |
-
//Config file path
|
338 |
-
$config_file = ABSPATH.'wp-config.php';
|
339 |
-
|
340 |
-
//Get wp-config.php file contents so we can check if the "DISALLOW_FILE_EDIT" variable already exists
|
341 |
-
$config_contents = file($config_file);
|
342 |
-
foreach ($config_contents as $line_num => $line)
|
343 |
-
{
|
344 |
-
if (strpos($line, "'DISALLOW_FILE_EDIT', false"))
|
345 |
-
{
|
346 |
-
$config_contents[$line_num] = str_replace('false', 'true', $line);
|
347 |
-
$edit_file_config_entry_exists = true;
|
348 |
-
//$this->show_msg_updated(__('Settings Saved - The ability to edit PHP files via the admin the panel has been DISABLED.', 'aiowpsecurity'));
|
349 |
-
} else if(strpos($line, "'DISALLOW_FILE_EDIT', true"))
|
350 |
-
{
|
351 |
-
$edit_file_config_entry_exists = true;
|
352 |
-
$this->show_msg_updated(__('Your system config file is already configured to disallow PHP file editing.', 'aiowpsecurity'));
|
353 |
-
return true;
|
354 |
-
|
355 |
-
}
|
356 |
-
}
|
357 |
-
|
358 |
-
if ($edit_file_config_entry_exists)
|
359 |
-
{
|
360 |
-
//Now let's modify the wp-config.php file
|
361 |
-
if (AIOWPSecurity_Utility_File::write_content_to_file($config_file, $config_contents))
|
362 |
-
{
|
363 |
-
$this->show_msg_updated(__('Settings Saved - Your system is now configured to not allow PHP file editing.', 'aiowpsecurity'));
|
364 |
-
return true;
|
365 |
-
}else
|
366 |
-
{
|
367 |
-
$this->show_msg_error(__('Operation failed! Unable to modify wp-config.php file!', 'aiowpsecurity'));
|
368 |
-
$aio_wp_security->debug_logger->log_debug("Disable PHP File Edit - Unable to modify wp-config.php",4);
|
369 |
-
return false;
|
370 |
-
}
|
371 |
-
}else
|
372 |
-
{
|
373 |
-
//Make a backup of the config file
|
374 |
-
if(!AIOWPSecurity_Utility_File::backup_a_file($config_file))
|
375 |
-
{
|
376 |
-
$this->show_msg_error(__('Failed to make a backup of the wp-config.php file. This operation will not go ahead.', 'aiowpsecurity'));
|
377 |
-
$aio_wp_security->debug_logger->log_debug("Disable PHP File Edit - Failed to make a backup of the wp-config.php file.",4);
|
378 |
-
return false;
|
379 |
-
}
|
380 |
-
else{
|
381 |
-
$this->show_msg_updated(__('A backup copy of your wp-config.php file was created successfully....', 'aiowpsecurity'));
|
382 |
-
}
|
383 |
-
|
384 |
-
//Construct the config code which we will insert into wp-config.php
|
385 |
-
$new_snippet = "//Disable File Edits\n";
|
386 |
-
$new_snippet .= 'define(\'DISALLOW_FILE_EDIT\', true);';
|
387 |
-
$write_result = file_put_contents($config_file, $new_snippet, FILE_APPEND | LOCK_EX);
|
388 |
-
if ($write_result)
|
389 |
-
{
|
390 |
-
$this->show_msg_updated(__('Settings Saved - Your system is now configured to not allow PHP file editing.', 'aiowpsecurity'));
|
391 |
-
}else
|
392 |
-
{
|
393 |
-
$this->show_msg_error(__('Operation failed! Unable to modify wp-config.php file!', 'aiowpsecurity'));
|
394 |
-
}
|
395 |
-
}
|
396 |
-
return $write_result; //will return true or false depending on whether file write was successful
|
397 |
-
}
|
398 |
-
|
399 |
-
/*
|
400 |
-
* Modifies the wp-config.php file to allow PHP file editing from the admin panel
|
401 |
-
* This func will modify the following code by replacing "true" with "false":
|
402 |
-
* define('DISALLOW_FILE_EDIT', true);
|
403 |
-
*/
|
404 |
-
|
405 |
-
function enable_file_edits()
|
406 |
-
{
|
407 |
-
global $aio_wp_security;
|
408 |
-
$edit_file_config_entry_exists = false;
|
409 |
-
|
410 |
-
//Config file path
|
411 |
-
$config_file = ABSPATH.'wp-config.php';
|
412 |
-
|
413 |
-
//Get wp-config.php file contents
|
414 |
-
$config_contents = file($config_file);
|
415 |
-
foreach ($config_contents as $line_num => $line)
|
416 |
-
{
|
417 |
-
if (strpos($line, "'DISALLOW_FILE_EDIT', true"))
|
418 |
-
{
|
419 |
-
$config_contents[$line_num] = str_replace('true', 'false', $line);
|
420 |
-
$edit_file_config_entry_exists = true;
|
421 |
-
} else if(strpos($line, "'DISALLOW_FILE_EDIT', false"))
|
422 |
-
{
|
423 |
-
$edit_file_config_entry_exists = true;
|
424 |
-
$this->show_msg_updated(__('Your system config file is already configured to allow PHP file editing.', 'aiowpsecurity'));
|
425 |
-
return true;
|
426 |
-
}
|
427 |
-
}
|
428 |
-
|
429 |
-
if (!$edit_file_config_entry_exists)
|
430 |
-
{
|
431 |
-
//if the DISALLOW_FILE_EDIT settings don't exist in wp-config.php then we don't need to do anything
|
432 |
-
$this->show_msg_updated(__('Your system config file is already configured to allow PHP file editing.', 'aiowpsecurity'));
|
433 |
-
return true;
|
434 |
-
} else
|
435 |
-
{
|
436 |
-
//Now let's modify the wp-config.php file
|
437 |
-
if (AIOWPSecurity_Utility_File::write_content_to_file($config_file, $config_contents))
|
438 |
-
{
|
439 |
-
$this->show_msg_updated(__('Settings Saved - Your system is now configured to allow PHP file editing.', 'aiowpsecurity'));
|
440 |
-
return true;
|
441 |
-
}else
|
442 |
-
{
|
443 |
-
$this->show_msg_error(__('Operation failed! Unable to modify wp-config.php file!', 'aiowpsecurity'));
|
444 |
-
$aio_wp_security->debug_logger->log_debug("Disable PHP File Edit - Unable to modify wp-config.php",4);
|
445 |
-
return false;
|
446 |
-
}
|
447 |
-
}
|
448 |
-
}
|
449 |
-
|
450 |
-
function filesystem_menu_footer_code()
|
451 |
-
{
|
452 |
-
?>
|
453 |
-
<script type="text/javascript">
|
454 |
-
/* <![CDATA[ */
|
455 |
-
jQuery(document).ready(function($) {
|
456 |
-
loading_span = $('.aiowps_loading_1');
|
457 |
-
loading_span.hide(); //hide the spinner gif after page has successfully loaded
|
458 |
-
$('.search-error-files').on("click",function(){
|
459 |
-
loading_span.show();
|
460 |
-
});
|
461 |
-
});
|
462 |
-
/* ]]> */
|
463 |
-
</script>
|
464 |
-
<?php
|
465 |
-
}
|
466 |
-
|
467 |
-
function display_system_logs_in_table($filepath)
|
468 |
-
{
|
469 |
-
global $aio_wp_security;
|
470 |
-
//Get contents of the error_log file
|
471 |
-
$error_file_contents = file($filepath);
|
472 |
-
if (!$error_file_contents)
|
473 |
-
{
|
474 |
-
//TODO - error could not read file, display notice???
|
475 |
-
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_Filescan_Menu - Unable to read file: ".$filepath,4);
|
476 |
-
|
477 |
-
}
|
478 |
-
$last_50_entries = array_slice($error_file_contents, -50); //extract the last 50 entries
|
479 |
-
?>
|
480 |
-
<table class="widefat file_permission_table">
|
481 |
-
<thead>
|
482 |
-
<tr>
|
483 |
-
<th><?php echo(sprintf(__('Showing latest entries of error_log file: %s', 'aiowpsecurity'),'<strong>'.$filepath.'</strong>')); ?></th>
|
484 |
-
</tr>
|
485 |
-
</thead>
|
486 |
-
<tbody>
|
487 |
-
<?php
|
488 |
-
foreach ($last_50_entries as $entry)
|
489 |
-
{
|
490 |
-
echo "<tr>";
|
491 |
-
echo '<td>' . $entry . "</td>";
|
492 |
-
echo "</tr>";
|
493 |
-
}
|
494 |
-
?>
|
495 |
-
</tbody>
|
496 |
-
</table>
|
497 |
-
<?php
|
498 |
-
|
499 |
-
}
|
500 |
-
} //end class
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/admin/wp-security-firewall-menu.php
DELETED
@@ -1,445 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_Firewall_Menu extends AIOWPSecurity_Admin_Menu
|
4 |
-
{
|
5 |
-
var $menu_page_slug = AIOWPSEC_FIREWALL_MENU_SLUG;
|
6 |
-
|
7 |
-
/* Specify all the tabs of this menu in the following array */
|
8 |
-
var $menu_tabs = array(
|
9 |
-
'tab1' => 'Basic Firewall Rules',
|
10 |
-
'tab2' => 'Additional Firewall Rules',
|
11 |
-
'tab3' => '5G Blacklist Firewall Rules',
|
12 |
-
);
|
13 |
-
|
14 |
-
var $menu_tabs_handler = array(
|
15 |
-
'tab1' => 'render_tab1',
|
16 |
-
'tab2' => 'render_tab2',
|
17 |
-
'tab3' => 'render_tab3',
|
18 |
-
);
|
19 |
-
|
20 |
-
function __construct()
|
21 |
-
{
|
22 |
-
$this->render_menu_page();
|
23 |
-
}
|
24 |
-
|
25 |
-
function get_current_tab()
|
26 |
-
{
|
27 |
-
$tab_keys = array_keys($this->menu_tabs);
|
28 |
-
$tab = isset( $_GET['tab'] ) ? $_GET['tab'] : $tab_keys[0];
|
29 |
-
return $tab;
|
30 |
-
}
|
31 |
-
|
32 |
-
/*
|
33 |
-
* Renders our tabs of this menu as nav items
|
34 |
-
*/
|
35 |
-
function render_menu_tabs()
|
36 |
-
{
|
37 |
-
$current_tab = $this->get_current_tab();
|
38 |
-
|
39 |
-
echo '<h2 class="nav-tab-wrapper">';
|
40 |
-
foreach ( $this->menu_tabs as $tab_key => $tab_caption )
|
41 |
-
{
|
42 |
-
$active = $current_tab == $tab_key ? 'nav-tab-active' : '';
|
43 |
-
echo '<a class="nav-tab ' . $active . '" href="?page=' . $this->menu_page_slug . '&tab=' . $tab_key . '">' . $tab_caption . '</a>';
|
44 |
-
}
|
45 |
-
echo '</h2>';
|
46 |
-
}
|
47 |
-
|
48 |
-
/*
|
49 |
-
* The menu rendering goes here
|
50 |
-
*/
|
51 |
-
function render_menu_page()
|
52 |
-
{
|
53 |
-
$tab = $this->get_current_tab();
|
54 |
-
?>
|
55 |
-
<div class="wrap">
|
56 |
-
<div id="poststuff"><div id="post-body">
|
57 |
-
<?php
|
58 |
-
$this->render_menu_tabs();
|
59 |
-
//$tab_keys = array_keys($this->menu_tabs);
|
60 |
-
call_user_func(array(&$this, $this->menu_tabs_handler[$tab]));
|
61 |
-
?>
|
62 |
-
</div></div>
|
63 |
-
</div><!-- end of wrap -->
|
64 |
-
<?php
|
65 |
-
}
|
66 |
-
|
67 |
-
function render_tab1()
|
68 |
-
{
|
69 |
-
global $aio_wp_security;
|
70 |
-
if(isset($_POST['aiowps_apply_basic_firewall_settings']))//Do form submission tasks
|
71 |
-
{
|
72 |
-
$nonce=$_REQUEST['_wpnonce'];
|
73 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-enable-basic-firewall-nonce'))
|
74 |
-
{
|
75 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed on enable basic firewall settings!",4);
|
76 |
-
die("Nonce check failed on enable basic firewall settings!");
|
77 |
-
}
|
78 |
-
|
79 |
-
//Save settings
|
80 |
-
if(isset($_POST['aiowps_enable_basic_firewall']))
|
81 |
-
{
|
82 |
-
$aio_wp_security->configs->set_value('aiowps_enable_basic_firewall','1');
|
83 |
-
}
|
84 |
-
else
|
85 |
-
{
|
86 |
-
$aio_wp_security->configs->set_value('aiowps_enable_basic_firewall','');
|
87 |
-
}
|
88 |
-
|
89 |
-
//Commit the config settings
|
90 |
-
$aio_wp_security->configs->save_config();
|
91 |
-
|
92 |
-
//Now let's write the applicable rules to the .htaccess file
|
93 |
-
$res = AIOWPSecurity_Utility_Htaccess::write_to_htaccess();
|
94 |
-
|
95 |
-
if ($res)
|
96 |
-
{
|
97 |
-
$this->show_msg_updated(__('You have successfully saved the Basic Firewall Protection configuration', 'aiowpsecurity'));
|
98 |
-
}
|
99 |
-
else if($res == -1)
|
100 |
-
{
|
101 |
-
$this->show_msg_error(__('Could not write to the .htaccess file. Please check the file permissions.', 'aiowpsecurity'));
|
102 |
-
}
|
103 |
-
}
|
104 |
-
|
105 |
-
?>
|
106 |
-
<h2><?php _e('Firewall Settings', 'aiowpsecurity')?></h2>
|
107 |
-
<div class="aio_blue_box">
|
108 |
-
<?php
|
109 |
-
$backup_tab_link = '<a href="admin.php?page='.AIOWPSEC_SETTINGS_MENU_SLUG.'&tab=tab2" target="_blank">backup</a>';
|
110 |
-
$info_msg = sprintf( __('This should not have any impact on your site\'s general functionality but if you wish you can take a %s of your .htaccess file before proceeding.', 'aiowpsecurity'), $backup_tab_link);
|
111 |
-
echo '<p>'.__('This feature allows you to activate some basic firewall security protection rules for your site.', 'aiowpsecurity').
|
112 |
-
'<br />'.__('The firewall functionality is achieved via the insertion of special code into your currently active .htaccess file.', 'aiowpsecurity').
|
113 |
-
'<br />'.$info_msg.'</p>';
|
114 |
-
?>
|
115 |
-
</div>
|
116 |
-
|
117 |
-
<div class="postbox">
|
118 |
-
<h3><label for="title"><?php _e('Basic Firewall Settings', 'aiowpsecurity'); ?></label></h3>
|
119 |
-
<div class="inside">
|
120 |
-
<?php
|
121 |
-
//Display security info badge
|
122 |
-
global $aiowps_feature_mgr;
|
123 |
-
$aiowps_feature_mgr->output_feature_details_badge("firewall-basic-rules");
|
124 |
-
?>
|
125 |
-
<form action="" method="POST">
|
126 |
-
<?php wp_nonce_field('aiowpsec-enable-basic-firewall-nonce'); ?>
|
127 |
-
<table class="form-table">
|
128 |
-
<tr valign="top">
|
129 |
-
<th scope="row"><?php _e('Enable Basic Firewall Protection', 'aiowpsecurity')?>:</th>
|
130 |
-
<td>
|
131 |
-
<input name="aiowps_enable_basic_firewall" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_enable_basic_firewall')=='1') echo ' checked="checked"'; ?> value="1"/>
|
132 |
-
<span class="description"><?php _e('Check this if you want to apply basic firewall protection to your site.', 'aiowpsecurity'); ?></span>
|
133 |
-
<span class="aiowps_more_info_anchor"><span class="aiowps_more_info_toggle_char">+</span><span class="aiowps_more_info_toggle_text"><?php _e('More Info', 'aiowpsecurity'); ?></span></span>
|
134 |
-
<div class="aiowps_more_info_body">
|
135 |
-
<?php
|
136 |
-
echo '<p class="description">'.__('This setting will implement the following basic firewall protection mechanisms on your site:', 'aiowpsecurity').'</p>';
|
137 |
-
echo '<p class="description">'.__('1) Protect your htaccess file by denying access to it.', 'aiowpsecurity').'</p>';
|
138 |
-
echo '<p class="description">'.__('2) Disable the server signature.', 'aiowpsecurity').'</p>';
|
139 |
-
echo '<p class="description">'.__('3) Limit file upload size (10MB).', 'aiowpsecurity').'</p>';
|
140 |
-
echo '<p class="description">'.__('4) Protect your wp-config.php file by denying access to it.', 'aiowpsecurity').'</p>';
|
141 |
-
echo '<p class="description">'.__('The above firewall features will be applied via your .htaccess file and should not affect your site\'s overall functionality.', 'aiowpsecurity').'</p>';
|
142 |
-
echo '<p class="description">'.__('You are still advised to take a backup of your active .htaccess file just in case.', 'aiowpsecurity').'</p>';
|
143 |
-
?>
|
144 |
-
</div>
|
145 |
-
</td>
|
146 |
-
</tr>
|
147 |
-
</table>
|
148 |
-
<input type="submit" name="aiowps_apply_basic_firewall_settings" value="<?php _e('Save Basic Firewall Settings', 'aiowpsecurity')?>" class="button-primary" />
|
149 |
-
</form>
|
150 |
-
</div></div>
|
151 |
-
<?php
|
152 |
-
}
|
153 |
-
|
154 |
-
function render_tab2()
|
155 |
-
{
|
156 |
-
global $aio_wp_security;
|
157 |
-
if(isset($_POST['aiowps_apply_additional_firewall_settings']))//Do advanced firewall submission tasks
|
158 |
-
{
|
159 |
-
$nonce=$_REQUEST['_wpnonce'];
|
160 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-enable-additional-firewall-nonce'))
|
161 |
-
{
|
162 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed on enable advanced firewall settings!",4);
|
163 |
-
die("Nonce check failed on enable advanced firewall settings!");
|
164 |
-
}
|
165 |
-
|
166 |
-
//Save settings
|
167 |
-
if(isset($_POST['aiowps_disable_trace_and_track']))
|
168 |
-
{
|
169 |
-
$aio_wp_security->configs->set_value('aiowps_disable_trace_and_track','1');
|
170 |
-
}
|
171 |
-
else
|
172 |
-
{
|
173 |
-
$aio_wp_security->configs->set_value('aiowps_disable_trace_and_track','');
|
174 |
-
}
|
175 |
-
|
176 |
-
if(isset($_POST['aiowps_forbid_proxy_comments']))
|
177 |
-
{
|
178 |
-
$aio_wp_security->configs->set_value('aiowps_forbid_proxy_comments','1');
|
179 |
-
}
|
180 |
-
else
|
181 |
-
{
|
182 |
-
$aio_wp_security->configs->set_value('aiowps_forbid_proxy_comments','');
|
183 |
-
}
|
184 |
-
|
185 |
-
if(isset($_POST['aiowps_deny_bad_query_strings']))
|
186 |
-
{
|
187 |
-
$aio_wp_security->configs->set_value('aiowps_deny_bad_query_strings','1');
|
188 |
-
}
|
189 |
-
else
|
190 |
-
{
|
191 |
-
$aio_wp_security->configs->set_value('aiowps_deny_bad_query_strings','');
|
192 |
-
}
|
193 |
-
|
194 |
-
if(isset($_POST['aiowps_advanced_char_string_filter']))
|
195 |
-
{
|
196 |
-
$aio_wp_security->configs->set_value('aiowps_advanced_char_string_filter','1');
|
197 |
-
}
|
198 |
-
else
|
199 |
-
{
|
200 |
-
$aio_wp_security->configs->set_value('aiowps_advanced_char_string_filter','');
|
201 |
-
}
|
202 |
-
|
203 |
-
//Commit the config settings
|
204 |
-
$aio_wp_security->configs->save_config();
|
205 |
-
|
206 |
-
//Now let's write the applicable rules to the .htaccess file
|
207 |
-
$res = AIOWPSecurity_Utility_Htaccess::write_to_htaccess();
|
208 |
-
|
209 |
-
if ($res)
|
210 |
-
{
|
211 |
-
$this->show_msg_updated(__('You have successfully saved the Additional Firewall Protection configuration', 'aiowpsecurity'));
|
212 |
-
}
|
213 |
-
else if($res == -1)
|
214 |
-
{
|
215 |
-
$this->show_msg_error(__('Could not write to the .htaccess file. Please check the file permissions.', 'aiowpsecurity'));
|
216 |
-
}
|
217 |
-
|
218 |
-
}
|
219 |
-
?>
|
220 |
-
<h2><?php _e('Additional Firewall Protection', 'aiowpsecurity')?></h2>
|
221 |
-
<div class="aio_blue_box">
|
222 |
-
<?php
|
223 |
-
$backup_tab_link = '<a href="admin.php?page='.AIOWPSEC_SETTINGS_MENU_SLUG.'&tab=tab2" target="_blank">backup</a>';
|
224 |
-
$info_msg = sprintf( __('Due to the nature of the code being inserted to the .htaccess file, this feature may break some functionality for certain plugins and you are therefore advised to take a %s of .htaccess before applying this configuration.', 'aiowpsecurity'), $backup_tab_link);
|
225 |
-
|
226 |
-
echo '<p>'.__('This feature allows you to activate more advanced firewall settings to your site.', 'aiowpsecurity').
|
227 |
-
'<br />'.__('The advanced firewall rules are applied via the insertion of special code to your currently active .htaccess file.', 'aiowpsecurity').
|
228 |
-
'<br />'.$info_msg.'</p>';
|
229 |
-
?>
|
230 |
-
</div>
|
231 |
-
|
232 |
-
<form action="" method="POST">
|
233 |
-
<?php wp_nonce_field('aiowpsec-enable-additional-firewall-nonce'); ?>
|
234 |
-
|
235 |
-
<div class="postbox">
|
236 |
-
<h3><label for="title"><?php _e('Trace and Track', 'aiowpsecurity'); ?></label></h3>
|
237 |
-
<div class="inside">
|
238 |
-
<?php
|
239 |
-
//Display security info badge
|
240 |
-
global $aiowps_feature_mgr;
|
241 |
-
$aiowps_feature_mgr->output_feature_details_badge("firewall-disable-trace-track");
|
242 |
-
?>
|
243 |
-
<table class="form-table">
|
244 |
-
<tr valign="top">
|
245 |
-
<th scope="row"><?php _e('Disable Trace and Track', 'aiowpsecurity')?>:</th>
|
246 |
-
<td>
|
247 |
-
<input name="aiowps_disable_trace_and_track" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_disable_trace_and_track')=='1') echo ' checked="checked"'; ?> value="1"/>
|
248 |
-
<span class="description"><?php _e('Check this if you want to disable trace and track.', 'aiowpsecurity'); ?></span>
|
249 |
-
<span class="aiowps_more_info_anchor"><span class="aiowps_more_info_toggle_char">+</span><span class="aiowps_more_info_toggle_text"><?php _e('More Info', 'aiowpsecurity'); ?></span></span>
|
250 |
-
<div class="aiowps_more_info_body">
|
251 |
-
<p class="description">
|
252 |
-
<?php
|
253 |
-
_e('HTTP Trace attack (XST) can be used to return header requests and grab cookies and other information.', 'aiowpsecurity');
|
254 |
-
echo '<br />';
|
255 |
-
_e('This hacking technique is usually used together with cross site scripting attacks (XSS).', 'aiowpsecurity');
|
256 |
-
echo '<br />';
|
257 |
-
_e('Disabling trace and track on your site will help prevent HTTP Trace attacks.', 'aiowpsecurity');
|
258 |
-
?>
|
259 |
-
</p>
|
260 |
-
</div>
|
261 |
-
</td>
|
262 |
-
</tr>
|
263 |
-
</table>
|
264 |
-
</div></div>
|
265 |
-
<div class="postbox">
|
266 |
-
<h3><label for="title"><?php _e('Proxy Comment Posting', 'aiowpsecurity'); ?></label></h3>
|
267 |
-
<div class="inside">
|
268 |
-
<?php
|
269 |
-
//Display security info badge
|
270 |
-
global $aiowps_feature_mgr;
|
271 |
-
$aiowps_feature_mgr->output_feature_details_badge("firewall-forbid-proxy-comments");
|
272 |
-
?>
|
273 |
-
|
274 |
-
<table class="form-table">
|
275 |
-
<tr valign="top">
|
276 |
-
<th scope="row"><?php _e('Forbid Proxy Comment Posting', 'aiowpsecurity')?>:</th>
|
277 |
-
<td>
|
278 |
-
<input name="aiowps_forbid_proxy_comments" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_forbid_proxy_comments')=='1') echo ' checked="checked"'; ?> value="1"/>
|
279 |
-
<span class="description"><?php _e('Check this if you want to forbid proxy comment posting.', 'aiowpsecurity'); ?></span>
|
280 |
-
<span class="aiowps_more_info_anchor"><span class="aiowps_more_info_toggle_char">+</span><span class="aiowps_more_info_toggle_text"><?php _e('More Info', 'aiowpsecurity'); ?></span></span>
|
281 |
-
<div class="aiowps_more_info_body">
|
282 |
-
<p class="description">
|
283 |
-
<?php
|
284 |
-
_e('This setting will deny any requests that use a proxy server when posting comments.', 'aiowpsecurity');
|
285 |
-
echo '<br />'.__('By forbidding proxy comments you are in effect eliminating some SPAM and other proxy requests.', 'aiowpsecurity');
|
286 |
-
?>
|
287 |
-
</p>
|
288 |
-
</div>
|
289 |
-
</td>
|
290 |
-
</tr>
|
291 |
-
</table>
|
292 |
-
</div></div>
|
293 |
-
<div class="postbox">
|
294 |
-
<h3><label for="title"><?php _e('Bad Query Strings', 'aiowpsecurity'); ?></label></h3>
|
295 |
-
<div class="inside">
|
296 |
-
<?php
|
297 |
-
//Display security info badge
|
298 |
-
global $aiowps_feature_mgr;
|
299 |
-
$aiowps_feature_mgr->output_feature_details_badge("firewall-deny-bad-queries");
|
300 |
-
?>
|
301 |
-
|
302 |
-
<table class="form-table">
|
303 |
-
<tr valign="top">
|
304 |
-
<th scope="row"><?php _e('Deny Bad Query Strings', 'aiowpsecurity')?>:</th>
|
305 |
-
<td>
|
306 |
-
<input name="aiowps_deny_bad_query_strings" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_deny_bad_query_strings')=='1') echo ' checked="checked"'; ?> value="1"/>
|
307 |
-
<span class="description"><?php _e('This will help protect you against malicious queries via XSS.', 'aiowpsecurity'); ?></span>
|
308 |
-
<span class="aiowps_more_info_anchor"><span class="aiowps_more_info_toggle_char">+</span><span class="aiowps_more_info_toggle_text"><?php _e('More Info', 'aiowpsecurity'); ?></span></span>
|
309 |
-
<div class="aiowps_more_info_body">
|
310 |
-
<p class="description">
|
311 |
-
<?php
|
312 |
-
_e('This feature will write rules in your .htaccess file to prevent malicious string attacks on your site using XSS.', 'aiowpsecurity');
|
313 |
-
echo '<br />'.__('NOTE: Some of these strings might be used for plugins or themes and hence this might break some functionality.', 'aiowpsecurity');
|
314 |
-
echo '<br /><strong>'.__('You are therefore strongly advised to take a backup of your active .htaccess file before applying this feature.', 'aiowpsecurity').'<strong>';
|
315 |
-
?>
|
316 |
-
</p>
|
317 |
-
</div>
|
318 |
-
</td>
|
319 |
-
</tr>
|
320 |
-
</table>
|
321 |
-
</div></div>
|
322 |
-
<div class="postbox">
|
323 |
-
<h3><label for="title"><?php _e('Advanced Character String Filter', 'aiowpsecurity'); ?></label></h3>
|
324 |
-
<div class="inside">
|
325 |
-
<?php
|
326 |
-
//Display security info badge
|
327 |
-
global $aiowps_feature_mgr;
|
328 |
-
$aiowps_feature_mgr->output_feature_details_badge("firewall-advanced-character-string-filter");
|
329 |
-
?>
|
330 |
-
|
331 |
-
<table class="form-table">
|
332 |
-
<tr valign="top">
|
333 |
-
<th scope="row"><?php _e('Enable Advanced Character String Filter', 'aiowpsecurity')?>:</th>
|
334 |
-
<td>
|
335 |
-
<input name="aiowps_advanced_char_string_filter" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_advanced_char_string_filter')=='1') echo ' checked="checked"'; ?> value="1"/>
|
336 |
-
<span class="description"><?php _e('This will block bad character matches from XSS.', 'aiowpsecurity'); ?></span>
|
337 |
-
<span class="aiowps_more_info_anchor"><span class="aiowps_more_info_toggle_char">+</span><span class="aiowps_more_info_toggle_text"><?php _e('More Info', 'aiowpsecurity'); ?></span></span>
|
338 |
-
<div class="aiowps_more_info_body">
|
339 |
-
<p class="description">
|
340 |
-
<?php
|
341 |
-
_e('This is an advanced character string filter to prevent malicious string attacks on your site coming from Cross Site Scripting (XSS).', 'aiowpsecurity');
|
342 |
-
echo '<br />'.__('This setting matches for common malicious string patterns and exploits and will produce a 403 error for the hacker attempting the query.', 'aiowpsecurity');
|
343 |
-
echo '<br />'.__('NOTE: Some strings for this setting might break some functionality.', 'aiowpsecurity');
|
344 |
-
echo '<br /><strong>'.__('You are therefore strongly advised to take a backup of your active .htaccess file before applying this feature.', 'aiowpsecurity').'<strong>';
|
345 |
-
?>
|
346 |
-
</p>
|
347 |
-
</div>
|
348 |
-
</td>
|
349 |
-
</tr>
|
350 |
-
</table>
|
351 |
-
</div></div>
|
352 |
-
<input type="submit" name="aiowps_apply_additional_firewall_settings" value="<?php _e('Save Additional Firewall Settings', 'aiowpsecurity')?>" class="button-primary" />
|
353 |
-
</form>
|
354 |
-
<?php
|
355 |
-
}
|
356 |
-
|
357 |
-
function render_tab3()
|
358 |
-
{
|
359 |
-
global $aio_wp_security;
|
360 |
-
if(isset($_POST['aiowps_apply_5g_firewall_settings']))//Do form submission tasks
|
361 |
-
{
|
362 |
-
$nonce=$_REQUEST['_wpnonce'];
|
363 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-enable-5g-firewall-nonce'))
|
364 |
-
{
|
365 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed on enable 5G firewall settings!",4);
|
366 |
-
die("Nonce check failed on enable 5G firewall settings!");
|
367 |
-
}
|
368 |
-
|
369 |
-
//Save settings
|
370 |
-
if(isset($_POST['aiowps_enable_5g_firewall']))
|
371 |
-
{
|
372 |
-
$aio_wp_security->configs->set_value('aiowps_enable_5g_firewall','1');
|
373 |
-
}
|
374 |
-
else
|
375 |
-
{
|
376 |
-
$aio_wp_security->configs->set_value('aiowps_enable_5g_firewall','');
|
377 |
-
}
|
378 |
-
|
379 |
-
//Commit the config settings
|
380 |
-
$aio_wp_security->configs->save_config();
|
381 |
-
|
382 |
-
//Now let's write the applicable rules to the .htaccess file
|
383 |
-
$res = AIOWPSecurity_Utility_Htaccess::write_to_htaccess();
|
384 |
-
|
385 |
-
if ($res)
|
386 |
-
{
|
387 |
-
$this->show_msg_updated(__('You have successfully saved the 5G Firewall Protection configuration', 'aiowpsecurity'));
|
388 |
-
}
|
389 |
-
else if($res == -1)
|
390 |
-
{
|
391 |
-
$this->show_msg_error(__('Could not write to the .htaccess file. Please check the file permissions.', 'aiowpsecurity'));
|
392 |
-
}
|
393 |
-
}
|
394 |
-
|
395 |
-
?>
|
396 |
-
<h2><?php _e('Firewall Settings', 'aiowpsecurity')?></h2>
|
397 |
-
<div class="aio_blue_box">
|
398 |
-
<?php
|
399 |
-
$backup_tab_link = '<a href="admin.php?page='.AIOWPSEC_SETTINGS_MENU_SLUG.'&tab=tab2" target="_blank">backup</a>';
|
400 |
-
$info_msg = '<p>'.sprintf( __('This feature allows you to activate the 5G firewall security protection rules designed and produced by %s.', 'aiowpsecurity'), '<a href="http://perishablepress.com/5g-blacklist-2013/" target="_blank">Perishable Press</a>').'</p>';
|
401 |
-
$info_msg .= '<p>'.__('The 5G Blacklist is a simple, flexible blacklist that helps reduce the number of malicious URL requests that hit your website.', 'aiowpsecurity').'</p>';
|
402 |
-
$info_msg .= '<p>'.__('The added advantage of applying the 5G firewall to your site is that it has been tested and confirmed by the people at PerishablePress.com to be an optimal and least disruptive set of .htaccess security rules for general WP sites running on an Apache server or similar.', 'aiowpsecurity').'</p>';
|
403 |
-
$info_msg .= '<p>'.sprintf( __('Therefore the 5G firewall rules should not have any impact on your site\'s general functionality but if you wish you can take a %s of your .htaccess file before proceeding.', 'aiowpsecurity'), $backup_tab_link).'</p>';
|
404 |
-
echo $info_msg;
|
405 |
-
?>
|
406 |
-
</div>
|
407 |
-
|
408 |
-
<div class="postbox">
|
409 |
-
<h3><label for="title"><?php _e('5G Blacklist/Firewall Settings', 'aiowpsecurity'); ?></label></h3>
|
410 |
-
<div class="inside">
|
411 |
-
<?php
|
412 |
-
//Display security info badge
|
413 |
-
global $aiowps_feature_mgr;
|
414 |
-
$aiowps_feature_mgr->output_feature_details_badge("firewall-enable-5g-blacklist");
|
415 |
-
?>
|
416 |
-
|
417 |
-
<form action="" method="POST">
|
418 |
-
<?php wp_nonce_field('aiowpsec-enable-5g-firewall-nonce'); ?>
|
419 |
-
<table class="form-table">
|
420 |
-
<tr valign="top">
|
421 |
-
<th scope="row"><?php _e('Enable 5G Firewall Protection', 'aiowpsecurity')?>:</th>
|
422 |
-
<td>
|
423 |
-
<input name="aiowps_enable_5g_firewall" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_enable_5g_firewall')=='1') echo ' checked="checked"'; ?> value="1"/>
|
424 |
-
<span class="description"><?php _e('Check this if you want to apply the 5G Blacklist firewall protection from perishablepress.com to your site.', 'aiowpsecurity'); ?></span>
|
425 |
-
<span class="aiowps_more_info_anchor"><span class="aiowps_more_info_toggle_char">+</span><span class="aiowps_more_info_toggle_text"><?php _e('More Info', 'aiowpsecurity'); ?></span></span>
|
426 |
-
<div class="aiowps_more_info_body">
|
427 |
-
<?php
|
428 |
-
echo '<p class="description">'.__('This setting will implement the 5G security firewall protection mechanisms on your site which include the following things:', 'aiowpsecurity').'</p>';
|
429 |
-
echo '<p class="description">'.__('1) Block forbidden characters commonly used in exploitative attacks.', 'aiowpsecurity').'</p>';
|
430 |
-
echo '<p class="description">'.__('2) Block malicious encoded URL characters such as the ".css(" string.', 'aiowpsecurity').'</p>';
|
431 |
-
echo '<p class="description">'.__('3) Guard against the common patterns and specific exploits in the root portion of targeted URLs.', 'aiowpsecurity').'</p>';
|
432 |
-
echo '<p class="description">'.__('4) Stop attackers from manipulating query strings by disallowing illicit characters.', 'aiowpsecurity').'</p>';
|
433 |
-
echo '<p class="description">'.__('....and much more.', 'aiowpsecurity').'</p>';
|
434 |
-
?>
|
435 |
-
</div>
|
436 |
-
</td>
|
437 |
-
</tr>
|
438 |
-
</table>
|
439 |
-
<input type="submit" name="aiowps_apply_5g_firewall_settings" value="<?php _e('Save 5G Firewall Settings', 'aiowpsecurity')?>" class="button-primary" />
|
440 |
-
</form>
|
441 |
-
</div></div>
|
442 |
-
<?php
|
443 |
-
}
|
444 |
-
|
445 |
-
} //end class
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/admin/wp-security-list-acct-activity.php
DELETED
@@ -1,159 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
class AIOWPSecurity_List_Account_Activity extends AIOWPSecurity_List_Table {
|
3 |
-
|
4 |
-
function __construct(){
|
5 |
-
global $status, $page;
|
6 |
-
|
7 |
-
//Set parent defaults
|
8 |
-
parent::__construct( array(
|
9 |
-
'singular' => 'item', //singular name of the listed records
|
10 |
-
'plural' => 'items', //plural name of the listed records
|
11 |
-
'ajax' => false //does this table support ajax?
|
12 |
-
) );
|
13 |
-
|
14 |
-
}
|
15 |
-
|
16 |
-
function column_default($item, $column_name){
|
17 |
-
return $item[$column_name];
|
18 |
-
}
|
19 |
-
|
20 |
-
function column_user_id($item){
|
21 |
-
$tab = strip_tags($_REQUEST['tab']);
|
22 |
-
//Build row actions
|
23 |
-
$actions = array(
|
24 |
-
'delete' => sprintf('<a href="admin.php?page=%s&tab=%s&action=%s&activity_login_rec=%s" onclick="return confirm(\'Are you sure you want to delete this item?\')">Delete</a>',AIOWPSEC_USER_LOGIN_MENU_SLUG,$tab,'delete_acct_activity_rec',$item['id']),
|
25 |
-
);
|
26 |
-
|
27 |
-
//Return the user_login contents
|
28 |
-
return sprintf('%1$s <span style="color:silver"></span>%2$s',
|
29 |
-
/*$1%s*/ $item['user_id'],
|
30 |
-
/*$2%s*/ $this->row_actions($actions)
|
31 |
-
);
|
32 |
-
}
|
33 |
-
|
34 |
-
|
35 |
-
function column_cb($item){
|
36 |
-
return sprintf(
|
37 |
-
'<input type="checkbox" name="%1$s[]" value="%2$s" />',
|
38 |
-
/*$1%s*/ $this->_args['singular'], //Let's simply repurpose the table's singular label
|
39 |
-
/*$2%s*/ $item['id'] //The value of the checkbox should be the record's id
|
40 |
-
);
|
41 |
-
}
|
42 |
-
|
43 |
-
function get_columns(){
|
44 |
-
$columns = array(
|
45 |
-
'cb' => '<input type="checkbox" />', //Render a checkbox
|
46 |
-
'user_id' => 'User ID',
|
47 |
-
'user_login' => 'Username',
|
48 |
-
'login_date' => 'Login Date',
|
49 |
-
'logout_date' => 'Logout Date',
|
50 |
-
'login_ip' => 'IP'
|
51 |
-
);
|
52 |
-
return $columns;
|
53 |
-
}
|
54 |
-
|
55 |
-
function get_sortable_columns() {
|
56 |
-
$sortable_columns = array(
|
57 |
-
'user_id' => array('user_id',false),
|
58 |
-
'user_login' => array('user_login',false),
|
59 |
-
'login_date' => array('login_date',false),
|
60 |
-
'login_ip' => array('login_ip',false),
|
61 |
-
'logout_date' => array('logout_date',false),
|
62 |
-
);
|
63 |
-
return $sortable_columns;
|
64 |
-
}
|
65 |
-
|
66 |
-
function get_bulk_actions() {
|
67 |
-
$actions = array(
|
68 |
-
'delete' => 'Delete'
|
69 |
-
);
|
70 |
-
return $actions;
|
71 |
-
}
|
72 |
-
|
73 |
-
function process_bulk_action() {
|
74 |
-
if('delete'===$this->current_action())
|
75 |
-
{//Process delete bulk actions
|
76 |
-
if(!isset($_REQUEST['item']))
|
77 |
-
{
|
78 |
-
$error_msg = '<div id="message" class="error"><p><strong>';
|
79 |
-
$error_msg .= __('Please select some records using the checkboxes','aiowpsecurity');
|
80 |
-
$error_msg .= '</strong></p></div>';
|
81 |
-
_e($error_msg);
|
82 |
-
} else{
|
83 |
-
$this->delete_login_activity_records(($_REQUEST['item']));
|
84 |
-
}
|
85 |
-
}
|
86 |
-
}
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
/*
|
91 |
-
* This function will delete selected records from the "user_login_activity" table.
|
92 |
-
* The function accepts either an array of IDs or a single ID
|
93 |
-
*/
|
94 |
-
function delete_login_activity_records($entries)
|
95 |
-
{
|
96 |
-
global $wpdb;
|
97 |
-
$login_activity_table = AIOWPSEC_TBL_USER_LOGIN_ACTIVITY;
|
98 |
-
if (is_array($entries))
|
99 |
-
{
|
100 |
-
//Delete multiple records
|
101 |
-
$id_list = "(" .implode(",",$entries) .")"; //Create comma separate list for DB operation
|
102 |
-
$delete_command = "DELETE FROM ".$login_activity_table." WHERE id IN ".$id_list;
|
103 |
-
$result = $wpdb->query($delete_command);
|
104 |
-
if($result != NULL)
|
105 |
-
{
|
106 |
-
$success_msg = '<div id="message" class="updated fade"><p><strong>';
|
107 |
-
$success_msg .= __('The selected entries were deleted successfully!','aiowpsecurity');
|
108 |
-
$success_msg .= '</strong></p></div>';
|
109 |
-
_e($success_msg);
|
110 |
-
}
|
111 |
-
}
|
112 |
-
elseif ($entries != NULL)
|
113 |
-
{
|
114 |
-
//Delete single record
|
115 |
-
$delete_command = "DELETE FROM ".$login_activity_table." WHERE id = '".absint($entries)."'";
|
116 |
-
$result = $wpdb->query($delete_command);
|
117 |
-
if($result != NULL)
|
118 |
-
{
|
119 |
-
$success_msg = '<div id="message" class="updated fade"><p><strong>';
|
120 |
-
$success_msg .= __('The selected entry was deleted successfully!','aiowpsecurity');
|
121 |
-
$success_msg .= '</strong></p></div>';
|
122 |
-
_e($success_msg);
|
123 |
-
}
|
124 |
-
}
|
125 |
-
}
|
126 |
-
|
127 |
-
function prepare_items() {
|
128 |
-
/**
|
129 |
-
* First, lets decide how many records per page to show
|
130 |
-
*/
|
131 |
-
$per_page = 20;
|
132 |
-
$columns = $this->get_columns();
|
133 |
-
$hidden = array();
|
134 |
-
$sortable = $this->get_sortable_columns();
|
135 |
-
|
136 |
-
$this->_column_headers = array($columns, $hidden, $sortable);
|
137 |
-
|
138 |
-
$this->process_bulk_action();
|
139 |
-
|
140 |
-
global $wpdb;
|
141 |
-
$login_activity_table = AIOWPSEC_TBL_USER_LOGIN_ACTIVITY;
|
142 |
-
|
143 |
-
/* -- Ordering parameters -- */
|
144 |
-
//Parameters that are going to be used to order the result
|
145 |
-
$orderby = !empty($_GET["orderby"]) ? mysql_real_escape_string($_GET["orderby"]) : 'login_date';
|
146 |
-
$order = !empty($_GET["order"]) ? mysql_real_escape_string($_GET["order"]) : 'DESC';
|
147 |
-
|
148 |
-
$data = $wpdb->get_results("SELECT * FROM $login_activity_table ORDER BY $orderby $order LIMIT 50", ARRAY_A); //Get the last 50 records
|
149 |
-
$current_page = $this->get_pagenum();
|
150 |
-
$total_items = count($data);
|
151 |
-
$data = array_slice($data,(($current_page-1)*$per_page),$per_page);
|
152 |
-
$this->items = $data;
|
153 |
-
$this->set_pagination_args( array(
|
154 |
-
'total_items' => $total_items, //WE have to calculate the total number of items
|
155 |
-
'per_page' => $per_page, //WE have to determine how many items to show on a page
|
156 |
-
'total_pages' => ceil($total_items/$per_page) //WE have to calculate the total number of pages
|
157 |
-
) );
|
158 |
-
}
|
159 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/admin/wp-security-list-comment-spammer-ip.php
DELETED
@@ -1,195 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_List_Comment_Spammer_IP extends AIOWPSecurity_List_Table {
|
4 |
-
|
5 |
-
function __construct(){
|
6 |
-
global $status, $page;
|
7 |
-
|
8 |
-
//Set parent defaults
|
9 |
-
parent::__construct( array(
|
10 |
-
'singular' => 'item', //singular name of the listed records
|
11 |
-
'plural' => 'items', //plural name of the listed records
|
12 |
-
'ajax' => false //does this table support ajax?
|
13 |
-
) );
|
14 |
-
|
15 |
-
}
|
16 |
-
|
17 |
-
function column_default($item, $column_name){
|
18 |
-
return $item[$column_name];
|
19 |
-
}
|
20 |
-
|
21 |
-
function column_comment_author_IP($item){
|
22 |
-
$tab = strip_tags($_REQUEST['tab']);
|
23 |
-
//Build row actions
|
24 |
-
$actions = array(
|
25 |
-
'block' => sprintf('<a href="admin.php?page=%s&tab=%s&action=%s&spammer_ip=%s" onclick="return confirm(\'Are you sure you want to add this IP address to your blacklist?\')">Block</a>',AIOWPSEC_BLACKLIST_MENU_SLUG,$tab,'block_spammer_ip',$item['comment_author_IP']),
|
26 |
-
);
|
27 |
-
|
28 |
-
//Return the user_login contents
|
29 |
-
return sprintf('%1$s <span style="color:silver"></span>%2$s',
|
30 |
-
/*$1%s*/ $item['comment_author_IP'],
|
31 |
-
/*$2%s*/ $this->row_actions($actions)
|
32 |
-
);
|
33 |
-
}
|
34 |
-
|
35 |
-
|
36 |
-
function column_cb($item){
|
37 |
-
return sprintf(
|
38 |
-
'<input type="checkbox" name="%1$s[]" value="%2$s" />',
|
39 |
-
/*$1%s*/ $this->_args['singular'], //Let's simply repurpose the table's singular label
|
40 |
-
/*$2%s*/ $item['comment_author_IP'] //The value of the checkbox should be the record's id
|
41 |
-
);
|
42 |
-
}
|
43 |
-
|
44 |
-
function get_columns(){
|
45 |
-
$columns = array(
|
46 |
-
'cb' => '<input type="checkbox" />', //Render a checkbox
|
47 |
-
'comment_author_IP' => 'Spammer IP',
|
48 |
-
'amount' => 'Number of SPAM Comments From This IP',
|
49 |
-
);
|
50 |
-
return $columns;
|
51 |
-
}
|
52 |
-
|
53 |
-
function get_sortable_columns() {
|
54 |
-
$sortable_columns = array(
|
55 |
-
'comment_author_IP' => array('comment_author_IP',false),
|
56 |
-
'amount' => array('amount',false),
|
57 |
-
);
|
58 |
-
return $sortable_columns;
|
59 |
-
}
|
60 |
-
|
61 |
-
function get_bulk_actions() {
|
62 |
-
$actions = array(
|
63 |
-
'block' => 'Block'
|
64 |
-
);
|
65 |
-
return $actions;
|
66 |
-
}
|
67 |
-
|
68 |
-
function process_bulk_action() {
|
69 |
-
global $aio_wp_security;
|
70 |
-
if('block'===$this->current_action())
|
71 |
-
{
|
72 |
-
//Process block bulk actions
|
73 |
-
if(!isset($_REQUEST['item']))
|
74 |
-
{
|
75 |
-
$error_msg = '<div id="message" class="error"><p><strong>';
|
76 |
-
$error_msg .= __('Please select some records using the checkboxes','aiowpsecurity');
|
77 |
-
$error_msg .= '</strong></p></div>';
|
78 |
-
_e($error_msg);
|
79 |
-
} else {
|
80 |
-
$this->block_spammer_ip_records(($_REQUEST['item']));
|
81 |
-
}
|
82 |
-
}
|
83 |
-
}
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
/*
|
88 |
-
* This function will add the selected IP addresses to the blacklist.
|
89 |
-
* The function accepts either an array of IDs or a single ID
|
90 |
-
*/
|
91 |
-
function block_spammer_ip_records($entries)
|
92 |
-
{
|
93 |
-
global $wpdb, $aio_wp_security;
|
94 |
-
$raw_banned_ip_list = $aio_wp_security->configs->get_value('aiowps_banned_ip_addresses');
|
95 |
-
$currently_banned_ips = explode(PHP_EOL, $aio_wp_security->configs->get_value('aiowps_banned_ip_addresses'));
|
96 |
-
if (is_array($entries))
|
97 |
-
{
|
98 |
-
//Bulk selection using checkboxes were used
|
99 |
-
foreach ($entries as $ip_add)
|
100 |
-
{
|
101 |
-
if (!empty($currently_banned_ips) && !(sizeof($currently_banned_ips) == 1 && trim($currently_banned_ips[0]) == ''))
|
102 |
-
{
|
103 |
-
//Check if the IP address is already in the blacklist. If not add it to the list.
|
104 |
-
if (!in_array($ip_add, $currently_banned_ips))
|
105 |
-
{
|
106 |
-
$raw_banned_ip_list .= PHP_EOL.$ip_add;
|
107 |
-
}
|
108 |
-
}
|
109 |
-
else
|
110 |
-
{
|
111 |
-
//if blacklist is currently empty just add all IP addresses to the list regardless
|
112 |
-
$raw_banned_ip_list .= PHP_EOL.$ip_add;
|
113 |
-
}
|
114 |
-
}
|
115 |
-
}
|
116 |
-
else if ($entries != NULL)
|
117 |
-
{
|
118 |
-
//individual entry where "block" link was clicked
|
119 |
-
//Check if the IP address is already in the blacklist. If not add it to the list.
|
120 |
-
if (!in_array($entries, $currently_banned_ips))
|
121 |
-
{
|
122 |
-
$raw_banned_ip_list .= PHP_EOL.$entries;
|
123 |
-
}
|
124 |
-
}
|
125 |
-
|
126 |
-
//Let's save the selected IP addresses to the blacklist config
|
127 |
-
$aio_wp_security->configs->set_value('aiowps_banned_ip_addresses',$raw_banned_ip_list); //Save the blocked IP address config variable with the newly added addresses
|
128 |
-
$aio_wp_security->configs->save_config();
|
129 |
-
AIOWPSecurity_Admin_Menu::show_msg_updated_st(__('The selected IP addresses were saved in the blacklist configuration settings.','aiowpsecurity'));
|
130 |
-
|
131 |
-
//Let's check if the Enable Blacklisting flag has been set - If so, we will write the new data to the .htaccess file.
|
132 |
-
if($aio_wp_security->configs->get_value('aiowps_enable_blacklisting')=='1')
|
133 |
-
{
|
134 |
-
$write_result = AIOWPSecurity_Utility_Htaccess::write_to_htaccess();
|
135 |
-
if ($write_result == -1)
|
136 |
-
{
|
137 |
-
AIOWPSecurity_Admin_Menu::show_msg_error_st(__('The plugin was unable to write to the .htaccess file. Please edit file manually.','aiowpsecurity'));
|
138 |
-
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_Blacklist_Menu - The plugin was unable to write to the .htaccess file.");
|
139 |
-
}
|
140 |
-
else
|
141 |
-
{
|
142 |
-
|
143 |
-
AIOWPSecurity_Admin_Menu::show_msg_updated_st(__('The .htaccess file was successfully modified to include the selected IP addresses.','aiowpsecurity'));
|
144 |
-
}
|
145 |
-
}
|
146 |
-
else
|
147 |
-
{
|
148 |
-
$blacklist_settings_link = '<a href="admin.php?page='.AIOWPSEC_BLACKLIST_MENU_SLUG.'">Ban Users</a>';
|
149 |
-
$info_msg = '<p>'.__('NOTE: The .htaccess file was not modified because you have disabled the "Enable IP or User Agent Blacklisting" check box.', 'aiowpsecurity').
|
150 |
-
'<br />'.sprintf( __('To block these IP addresses you will need to enable the above flag in the %s menu', 'aiowpsecurity'), $blacklist_settings_link).'</p>';
|
151 |
-
AIOWPSecurity_Admin_Menu::show_msg_updated_st($info_msg);
|
152 |
-
}
|
153 |
-
}
|
154 |
-
|
155 |
-
function prepare_items() {
|
156 |
-
//First, lets decide how many records per page to show
|
157 |
-
$per_page = 20;
|
158 |
-
$columns = $this->get_columns();
|
159 |
-
$hidden = array();
|
160 |
-
$sortable = $this->get_sortable_columns();
|
161 |
-
|
162 |
-
$this->_column_headers = array($columns, $hidden, $sortable);
|
163 |
-
|
164 |
-
$this->process_bulk_action();
|
165 |
-
|
166 |
-
global $wpdb;
|
167 |
-
global $aio_wp_security;
|
168 |
-
$minimum_comments_per_ip = $aio_wp_security->configs->get_value('aiowps_spam_ip_min_comments');
|
169 |
-
if(empty($minimum_comments_per_ip)){
|
170 |
-
$minimum_comments_per_ip = 5;
|
171 |
-
}
|
172 |
-
/* -- Ordering parameters -- */
|
173 |
-
//Parameters that are going to be used to order the result
|
174 |
-
$orderby = !empty($_GET["orderby"]) ? mysql_real_escape_string($_GET["orderby"]) : 'amount';
|
175 |
-
$order = !empty($_GET["order"]) ? mysql_real_escape_string($_GET["order"]) : 'DESC';
|
176 |
-
|
177 |
-
$sql = "SELECT comment_author_IP, COUNT(*) AS amount
|
178 |
-
FROM $wpdb->comments
|
179 |
-
WHERE comment_approved = 'spam'
|
180 |
-
GROUP BY comment_author_IP
|
181 |
-
HAVING amount >= $minimum_comments_per_ip
|
182 |
-
ORDER BY $orderby $order
|
183 |
-
";
|
184 |
-
$data = $wpdb->get_results($sql, ARRAY_A);
|
185 |
-
$current_page = $this->get_pagenum();
|
186 |
-
$total_items = count($data);
|
187 |
-
$data = array_slice($data,(($current_page-1)*$per_page),$per_page);
|
188 |
-
$this->items = $data;
|
189 |
-
$this->set_pagination_args( array(
|
190 |
-
'total_items' => $total_items, //WE have to calculate the total number of items
|
191 |
-
'per_page' => $per_page, //WE have to determine how many items to show on a page
|
192 |
-
'total_pages' => ceil($total_items/$per_page) //WE have to calculate the total number of pages
|
193 |
-
));
|
194 |
-
}
|
195 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/admin/wp-security-list-locked-ip.php
DELETED
@@ -1,194 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
class AIOWPSecurity_List_Locked_IP extends AIOWPSecurity_List_Table {
|
3 |
-
|
4 |
-
function __construct(){
|
5 |
-
global $status, $page;
|
6 |
-
|
7 |
-
//Set parent defaults
|
8 |
-
parent::__construct( array(
|
9 |
-
'singular' => 'item', //singular name of the listed records
|
10 |
-
'plural' => 'items', //plural name of the listed records
|
11 |
-
'ajax' => false //does this table support ajax?
|
12 |
-
) );
|
13 |
-
|
14 |
-
}
|
15 |
-
|
16 |
-
function column_default($item, $column_name){
|
17 |
-
return $item[$column_name];
|
18 |
-
}
|
19 |
-
|
20 |
-
function column_failed_login_ip($item){
|
21 |
-
$tab = strip_tags($_REQUEST['tab']);
|
22 |
-
//Build row actions
|
23 |
-
$actions = array(
|
24 |
-
'unlock' => sprintf('<a href="admin.php?page=%s&tab=%s&action=%s&lockdown_id=%s" onclick="return confirm(\'Are you sure you want to unlock this address range?\')">Unlock</a>',AIOWPSEC_USER_LOGIN_MENU_SLUG,$tab,'unlock_ip',$item['id']),
|
25 |
-
'delete' => sprintf('<a href="admin.php?page=%s&tab=%s&action=%s&lockdown_id=%s" onclick="return confirm(\'Are you sure you want to delete this item?\')">Delete</a>',AIOWPSEC_USER_LOGIN_MENU_SLUG,$tab,'delete_blocked_ip',$item['id']),
|
26 |
-
);
|
27 |
-
|
28 |
-
//Return the user_login contents
|
29 |
-
return sprintf('%1$s <span style="color:silver"></span>%2$s',
|
30 |
-
/*$1%s*/ $item['failed_login_ip'],
|
31 |
-
/*$2%s*/ $this->row_actions($actions)
|
32 |
-
);
|
33 |
-
}
|
34 |
-
|
35 |
-
|
36 |
-
function column_cb($item){
|
37 |
-
return sprintf(
|
38 |
-
'<input type="checkbox" name="%1$s[]" value="%2$s" />',
|
39 |
-
/*$1%s*/ $this->_args['singular'], //Let's simply repurpose the table's singular label
|
40 |
-
/*$2%s*/ $item['id'] //The value of the checkbox should be the record's id
|
41 |
-
);
|
42 |
-
}
|
43 |
-
|
44 |
-
function get_columns(){
|
45 |
-
$columns = array(
|
46 |
-
'cb' => '<input type="checkbox" />', //Render a checkbox
|
47 |
-
'failed_login_ip' => 'Locked IP Range',
|
48 |
-
'user_id' => 'User ID',
|
49 |
-
'user_login' => 'Username',
|
50 |
-
'lockdown_date' => 'Date Locked',
|
51 |
-
'release_date' => 'Release Date'
|
52 |
-
);
|
53 |
-
return $columns;
|
54 |
-
}
|
55 |
-
|
56 |
-
function get_sortable_columns() {
|
57 |
-
$sortable_columns = array(
|
58 |
-
'failed_login_ip' => array('failed_login_ip',false),
|
59 |
-
'user_id' => array('user_id',false),
|
60 |
-
'user_login' => array('user_login',false),
|
61 |
-
'lockdown_date' => array('lockdown_date',false),
|
62 |
-
'release_date' => array('release_date',false)
|
63 |
-
);
|
64 |
-
return $sortable_columns;
|
65 |
-
}
|
66 |
-
|
67 |
-
function get_bulk_actions() {
|
68 |
-
$actions = array(
|
69 |
-
'unlock' => 'Unlock',
|
70 |
-
'delete' => 'Delete'
|
71 |
-
);
|
72 |
-
return $actions;
|
73 |
-
}
|
74 |
-
|
75 |
-
function process_bulk_action() {
|
76 |
-
if('delete'===$this->current_action())
|
77 |
-
{//Process delete bulk actions
|
78 |
-
if(!isset($_REQUEST['item']))
|
79 |
-
{
|
80 |
-
AIOWPSecurity_Admin_Menu::show_msg_error_st(__('Please select some records using the checkboxes','aiowpsecurity'));
|
81 |
-
}else
|
82 |
-
{
|
83 |
-
$this->delete_lockdown_records(($_REQUEST['item']));
|
84 |
-
}
|
85 |
-
}
|
86 |
-
|
87 |
-
if('unlock'===$this->current_action())
|
88 |
-
{//Process unlock bulk actions
|
89 |
-
if(!isset($_REQUEST['item']))
|
90 |
-
{
|
91 |
-
AIOWPSecurity_Admin_Menu::show_msg_error_st(__('Please select some records using the checkboxes','aiowpsecurity'));
|
92 |
-
}else
|
93 |
-
{
|
94 |
-
$this->unlock_ip_range(($_REQUEST['item']));
|
95 |
-
}
|
96 |
-
}
|
97 |
-
}
|
98 |
-
|
99 |
-
|
100 |
-
/*
|
101 |
-
* This function will unlock an IP range by modifying the "release_date" column of a record in the "login_lockdown" table
|
102 |
-
*/
|
103 |
-
function unlock_ip_range($entries)
|
104 |
-
{
|
105 |
-
global $wpdb;
|
106 |
-
$lockdown_table = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
107 |
-
if (is_array($entries))
|
108 |
-
{
|
109 |
-
//Unlock multiple records
|
110 |
-
$id_list = "(" .implode(",",$entries) .")"; //Create comma separate list for DB operation
|
111 |
-
$unlock_command = "UPDATE ".$lockdown_table." SET release_date = now() WHERE id IN ".$id_list;
|
112 |
-
$result = $wpdb->query($unlock_command);
|
113 |
-
if($result != NULL)
|
114 |
-
{
|
115 |
-
AIOWPSecurity_Admin_Menu::show_msg_updated_st(__('The selected IP ranges were unlocked successfully!','aiowpsecurity'));
|
116 |
-
}
|
117 |
-
} elseif ($entries != NULL)
|
118 |
-
{
|
119 |
-
//Delete single record
|
120 |
-
$unlock_command = "UPDATE ".$lockdown_table." SET release_date = now() WHERE id = '".absint($entries)."'";
|
121 |
-
$result = $wpdb->query($unlock_command);
|
122 |
-
if($result != NULL)
|
123 |
-
{
|
124 |
-
AIOWPSecurity_Admin_Menu::show_msg_updated_st(__('The selected IP range was unlocked successfully!','aiowpsecurity'));
|
125 |
-
}
|
126 |
-
}
|
127 |
-
}
|
128 |
-
|
129 |
-
/*
|
130 |
-
* This function will delete selected records from the "login_lockdown" table.
|
131 |
-
* The function accepts either an array of IDs or a single ID
|
132 |
-
*/
|
133 |
-
function delete_lockdown_records($entries)
|
134 |
-
{
|
135 |
-
global $wpdb;
|
136 |
-
$lockdown_table = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
137 |
-
if (is_array($entries))
|
138 |
-
{
|
139 |
-
//Delete multiple records
|
140 |
-
$id_list = "(" .implode(",",$entries) .")"; //Create comma separate list for DB operation
|
141 |
-
$delete_command = "DELETE FROM ".$lockdown_table." WHERE id IN ".$id_list;
|
142 |
-
$result = $wpdb->query($delete_command);
|
143 |
-
if($result != NULL)
|
144 |
-
{
|
145 |
-
AIOWPSecurity_Admin_Menu::show_msg_record_deleted_st();
|
146 |
-
}
|
147 |
-
}
|
148 |
-
elseif ($entries != NULL)
|
149 |
-
{
|
150 |
-
//Delete single record
|
151 |
-
$delete_command = "DELETE FROM ".$lockdown_table." WHERE id = '".absint($entries)."'";
|
152 |
-
$result = $wpdb->query($delete_command);
|
153 |
-
if($result != NULL)
|
154 |
-
{
|
155 |
-
AIOWPSecurity_Admin_Menu::show_msg_record_deleted_st();
|
156 |
-
}
|
157 |
-
}
|
158 |
-
}
|
159 |
-
|
160 |
-
function prepare_items() {
|
161 |
-
/**
|
162 |
-
* First, lets decide how many records per page to show
|
163 |
-
*/
|
164 |
-
$per_page = 20;
|
165 |
-
$columns = $this->get_columns();
|
166 |
-
$hidden = array();
|
167 |
-
$sortable = $this->get_sortable_columns();
|
168 |
-
|
169 |
-
$this->_column_headers = array($columns, $hidden, $sortable);
|
170 |
-
|
171 |
-
$this->process_bulk_action();
|
172 |
-
|
173 |
-
global $wpdb;
|
174 |
-
$lockdown_table_name = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
175 |
-
|
176 |
-
/* -- Ordering parameters -- */
|
177 |
-
//Parameters that are going to be used to order the result
|
178 |
-
$orderby = !empty($_GET["orderby"]) ? mysql_real_escape_string($_GET["orderby"]) : 'lockdown_date';
|
179 |
-
$order = !empty($_GET["order"]) ? mysql_real_escape_string($_GET["order"]) : 'DESC';
|
180 |
-
|
181 |
-
$data = $wpdb->get_results("SELECT * FROM $lockdown_table_name WHERE release_date > now() ORDER BY $orderby $order", ARRAY_A);
|
182 |
-
//$data = $wpdb->get_results("SELECT ID, floor((UNIX_TIMESTAMP(release_date)-UNIX_TIMESTAMP(now()))/60) AS minutes_left, ".
|
183 |
-
// "failed_login_IP FROM $lockdown_table_name WHERE release_date > now()", ARRAY_A);
|
184 |
-
$current_page = $this->get_pagenum();
|
185 |
-
$total_items = count($data);
|
186 |
-
$data = array_slice($data,(($current_page-1)*$per_page),$per_page);
|
187 |
-
$this->items = $data;
|
188 |
-
$this->set_pagination_args( array(
|
189 |
-
'total_items' => $total_items, //WE have to calculate the total number of items
|
190 |
-
'per_page' => $per_page, //WE have to determine how many items to show on a page
|
191 |
-
'total_pages' => ceil($total_items/$per_page) //WE have to calculate the total number of pages
|
192 |
-
) );
|
193 |
-
}
|
194 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/admin/wp-security-list-login-fails.php
DELETED
@@ -1,158 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
class AIOWPSecurity_List_Login_Failed_Attempts extends AIOWPSecurity_List_Table {
|
3 |
-
|
4 |
-
function __construct(){
|
5 |
-
global $status, $page;
|
6 |
-
|
7 |
-
//Set parent defaults
|
8 |
-
parent::__construct( array(
|
9 |
-
'singular' => 'item', //singular name of the listed records
|
10 |
-
'plural' => 'items', //plural name of the listed records
|
11 |
-
'ajax' => false //does this table support ajax?
|
12 |
-
) );
|
13 |
-
|
14 |
-
}
|
15 |
-
|
16 |
-
function column_default($item, $column_name){
|
17 |
-
return $item[$column_name];
|
18 |
-
}
|
19 |
-
|
20 |
-
function column_login_attempt_ip($item){
|
21 |
-
$tab = strip_tags($_REQUEST['tab']);
|
22 |
-
//Build row actions
|
23 |
-
$actions = array(
|
24 |
-
'delete' => sprintf('<a href="admin.php?page=%s&tab=%s&action=%s&failed_login_id=%s" onclick="return confirm(\'Are you sure you want to delete this item?\')">Delete</a>',AIOWPSEC_USER_LOGIN_MENU_SLUG,$tab,'delete_failed_login_rec',$item['id']),
|
25 |
-
);
|
26 |
-
|
27 |
-
//Return the user_login contents
|
28 |
-
return sprintf('%1$s <span style="color:silver"></span>%2$s',
|
29 |
-
/*$1%s*/ $item['login_attempt_ip'],
|
30 |
-
/*$2%s*/ $this->row_actions($actions)
|
31 |
-
);
|
32 |
-
}
|
33 |
-
|
34 |
-
|
35 |
-
function column_cb($item){
|
36 |
-
return sprintf(
|
37 |
-
'<input type="checkbox" name="%1$s[]" value="%2$s" />',
|
38 |
-
/*$1%s*/ $this->_args['singular'], //Let's simply repurpose the table's singular label
|
39 |
-
/*$2%s*/ $item['id'] //The value of the checkbox should be the record's id
|
40 |
-
);
|
41 |
-
}
|
42 |
-
|
43 |
-
function get_columns(){
|
44 |
-
$columns = array(
|
45 |
-
'cb' => '<input type="checkbox" />', //Render a checkbox
|
46 |
-
'login_attempt_ip' => 'Login IP Range',
|
47 |
-
'user_id' => 'User ID',
|
48 |
-
'user_login' => 'Username',
|
49 |
-
'failed_login_date' => 'Date'
|
50 |
-
);
|
51 |
-
return $columns;
|
52 |
-
}
|
53 |
-
|
54 |
-
function get_sortable_columns() {
|
55 |
-
$sortable_columns = array(
|
56 |
-
'login_attempt_ip' => array('login_attempt_ip',false),
|
57 |
-
'user_id' => array('user_id',false),
|
58 |
-
'user_login' => array('user_login',false),
|
59 |
-
'failed_login_date' => array('failed_login_date',false),
|
60 |
-
);
|
61 |
-
return $sortable_columns;
|
62 |
-
}
|
63 |
-
|
64 |
-
function get_bulk_actions() {
|
65 |
-
$actions = array(
|
66 |
-
'delete' => 'Delete'
|
67 |
-
);
|
68 |
-
return $actions;
|
69 |
-
}
|
70 |
-
|
71 |
-
function process_bulk_action() {
|
72 |
-
global $aio_wp_security;
|
73 |
-
if('delete'===$this->current_action())
|
74 |
-
{//Process delete bulk actions
|
75 |
-
if(!isset($_REQUEST['item']))
|
76 |
-
{
|
77 |
-
$error_msg = '<div id="message" class="error"><p><strong>';
|
78 |
-
$error_msg .= __('Please select some records using the checkboxes','aiowpsecurity');
|
79 |
-
$error_msg .= '</strong></p></div>';
|
80 |
-
_e($error_msg);
|
81 |
-
} else{
|
82 |
-
$this->delete_login_failed_records(($_REQUEST['item']));
|
83 |
-
|
84 |
-
}
|
85 |
-
}
|
86 |
-
}
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
/*
|
91 |
-
* This function will delete selected records from the "failed_logins" table.
|
92 |
-
* The function accepts either an array of IDs or a single ID
|
93 |
-
*/
|
94 |
-
function delete_login_failed_records($entries)
|
95 |
-
{
|
96 |
-
global $wpdb, $aio_wp_security;
|
97 |
-
$failed_login_table = AIOWPSEC_TBL_FAILED_LOGINS;
|
98 |
-
if (is_array($entries))
|
99 |
-
{
|
100 |
-
//Delete multiple records
|
101 |
-
$id_list = "(" .implode(",",$entries) .")"; //Create comma separate list for DB operation
|
102 |
-
$delete_command = "DELETE FROM ".$failed_login_table." WHERE ID IN ".$id_list;
|
103 |
-
$result = $wpdb->query($delete_command);
|
104 |
-
if($result != NULL)
|
105 |
-
{
|
106 |
-
$success_msg = '<div id="message" class="updated fade"><p><strong>';
|
107 |
-
$success_msg .= __('The selected entries were deleted successfully!','aiowpsecurity');
|
108 |
-
$success_msg .= '</strong></p></div>';
|
109 |
-
_e($success_msg);
|
110 |
-
}
|
111 |
-
} elseif ($entries != NULL)
|
112 |
-
{
|
113 |
-
//Delete single record
|
114 |
-
$delete_command = "DELETE FROM ".$failed_login_table." WHERE ID = '".absint($entries)."'";
|
115 |
-
$result = $wpdb->query($delete_command);
|
116 |
-
if($result != NULL)
|
117 |
-
{
|
118 |
-
$success_msg = '<div id="message" class="updated fade"><p><strong>';
|
119 |
-
$success_msg .= __('The selected entry was deleted successfully!','aiowpsecurity');
|
120 |
-
$success_msg .= '</strong></p></div>';
|
121 |
-
_e($success_msg);
|
122 |
-
}
|
123 |
-
}
|
124 |
-
}
|
125 |
-
|
126 |
-
function prepare_items() {
|
127 |
-
/**
|
128 |
-
* First, lets decide how many records per page to show
|
129 |
-
*/
|
130 |
-
$per_page = 20;
|
131 |
-
$columns = $this->get_columns();
|
132 |
-
$hidden = array();
|
133 |
-
$sortable = $this->get_sortable_columns();
|
134 |
-
|
135 |
-
$this->_column_headers = array($columns, $hidden, $sortable);
|
136 |
-
|
137 |
-
$this->process_bulk_action();
|
138 |
-
|
139 |
-
global $wpdb;
|
140 |
-
$failed_logins_table_name = AIOWPSEC_TBL_FAILED_LOGINS;
|
141 |
-
|
142 |
-
/* -- Ordering parameters -- */
|
143 |
-
//Parameters that are going to be used to order the result
|
144 |
-
$orderby = !empty($_GET["orderby"]) ? mysql_real_escape_string($_GET["orderby"]) : 'failed_login_date';
|
145 |
-
$order = !empty($_GET["order"]) ? mysql_real_escape_string($_GET["order"]) : 'DESC';
|
146 |
-
|
147 |
-
$data = $wpdb->get_results("SELECT * FROM $failed_logins_table_name ORDER BY $orderby $order", ARRAY_A);
|
148 |
-
$current_page = $this->get_pagenum();
|
149 |
-
$total_items = count($data);
|
150 |
-
$data = array_slice($data,(($current_page-1)*$per_page),$per_page);
|
151 |
-
$this->items = $data;
|
152 |
-
$this->set_pagination_args( array(
|
153 |
-
'total_items' => $total_items, //WE have to calculate the total number of items
|
154 |
-
'per_page' => $per_page, //WE have to determine how many items to show on a page
|
155 |
-
'total_pages' => ceil($total_items/$per_page) //WE have to calculate the total number of pages
|
156 |
-
) );
|
157 |
-
}
|
158 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/admin/wp-security-settings-menu.php
DELETED
@@ -1,433 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_Settings_Menu extends AIOWPSecurity_Admin_Menu
|
4 |
-
{
|
5 |
-
var $menu_page_slug = AIOWPSEC_SETTINGS_MENU_SLUG;
|
6 |
-
|
7 |
-
/* Specify all the tabs of this menu in the following array */
|
8 |
-
var $menu_tabs = array(
|
9 |
-
'tab1' => 'General Settings',
|
10 |
-
'tab2' => '.htaccess File',
|
11 |
-
'tab3' => 'wp-config.php File',
|
12 |
-
);
|
13 |
-
|
14 |
-
var $menu_tabs_handler = array(
|
15 |
-
'tab1' => 'render_tab1',
|
16 |
-
'tab2' => 'render_tab2',
|
17 |
-
'tab3' => 'render_tab3',
|
18 |
-
);
|
19 |
-
|
20 |
-
function __construct()
|
21 |
-
{
|
22 |
-
$this->render_menu_page();
|
23 |
-
}
|
24 |
-
|
25 |
-
function get_current_tab()
|
26 |
-
{
|
27 |
-
$tab_keys = array_keys($this->menu_tabs);
|
28 |
-
$tab = isset( $_GET['tab'] ) ? $_GET['tab'] : $tab_keys[0];
|
29 |
-
return $tab;
|
30 |
-
}
|
31 |
-
|
32 |
-
/*
|
33 |
-
* Renders our tabs of this menu as nav items
|
34 |
-
*/
|
35 |
-
function render_menu_tabs()
|
36 |
-
{
|
37 |
-
$current_tab = $this->get_current_tab();
|
38 |
-
|
39 |
-
echo '<h2 class="nav-tab-wrapper">';
|
40 |
-
foreach ( $this->menu_tabs as $tab_key => $tab_caption )
|
41 |
-
{
|
42 |
-
$active = $current_tab == $tab_key ? 'nav-tab-active' : '';
|
43 |
-
echo '<a class="nav-tab ' . $active . '" href="?page=' . $this->menu_page_slug . '&tab=' . $tab_key . '">' . $tab_caption . '</a>';
|
44 |
-
}
|
45 |
-
echo '</h2>';
|
46 |
-
}
|
47 |
-
|
48 |
-
/*
|
49 |
-
* The menu rendering goes here
|
50 |
-
*/
|
51 |
-
function render_menu_page()
|
52 |
-
{
|
53 |
-
$tab = $this->get_current_tab();
|
54 |
-
?>
|
55 |
-
<div class="wrap">
|
56 |
-
<div id="poststuff"><div id="post-body">
|
57 |
-
<?php
|
58 |
-
$this->render_menu_tabs();
|
59 |
-
//$tab_keys = array_keys($this->menu_tabs);
|
60 |
-
call_user_func(array(&$this, $this->menu_tabs_handler[$tab]));
|
61 |
-
?>
|
62 |
-
</div></div>
|
63 |
-
</div><!-- end of wrap -->
|
64 |
-
<?php
|
65 |
-
}
|
66 |
-
|
67 |
-
function render_tab1()
|
68 |
-
{
|
69 |
-
global $aio_wp_security;
|
70 |
-
if(isset($_POST['aiowpsec_disable_all_features']))//Do form submission tasks
|
71 |
-
{
|
72 |
-
$nonce=$_REQUEST['_wpnonce'];
|
73 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-disable-all-features'))
|
74 |
-
{
|
75 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed on disable all security features!",4);
|
76 |
-
die("Nonce check failed on disable all security features!");
|
77 |
-
}
|
78 |
-
AIOWPSecurity_Configure_Settings::turn_off_all_security_features();
|
79 |
-
$this->show_msg_updated(__('All the security features have been disabled successfully!', 'aiowpsecurity'));
|
80 |
-
}
|
81 |
-
|
82 |
-
|
83 |
-
?>
|
84 |
-
<div class="aio_grey_box">
|
85 |
-
<p>For information, updates and documentation, please visit the <a href="http://www.tipsandtricks-hq.com/wordpress-security-and-firewall-plugin" target="_blank">AIO WP Security & Firewall Plugin</a> Page.</p>
|
86 |
-
<p><a href="http://www.tipsandtricks-hq.com/development-center" target="_blank">Follow us</a> on Twitter, Google+ or via Email to stay upto date about the new security features of this plugin.</p>
|
87 |
-
</div>
|
88 |
-
|
89 |
-
<div class="postbox">
|
90 |
-
<h3><label for="title"><?php _e('WP Security Plugin', 'aiowpsecurity'); ?></label></h3>
|
91 |
-
<div class="inside">
|
92 |
-
<p><?php _e('Thank you for using our WordPress security plugin. There are a lot of security features in this plugin.', 'aiowpsecurity'); ?></p>
|
93 |
-
<p><?php _e('Go through each menu items and enable the security options to add more security to your site.', 'aiowpsecurity'); ?></p>
|
94 |
-
<p><?php _e('It is a good practice to take a backup of your .htaccess file, database and wp-config.php file before activating the security features. This plugin has options that you can use to backup those resources easily.', 'aiowpsecurity'); ?></p>
|
95 |
-
<p>
|
96 |
-
<ul class="aiowps_admin_ul_grp1">
|
97 |
-
<li><a href="admin.php?page=aiowpsec_database&tab=tab2" target="_blank"><?php _e('Backup your database', 'aiowpsecurity'); ?></a></li>
|
98 |
-
<li><a href="admin.php?page=aiowpsec_settings&tab=tab2" target="_blank"><?php _e('Backup .htaccess file', 'aiowpsecurity'); ?></a></li>
|
99 |
-
<li><a href="admin.php?page=aiowpsec_settings&tab=tab3" target="_blank"><?php _e('Backup wp-config.php file', 'aiowpsecurity'); ?></a></li>
|
100 |
-
</ul>
|
101 |
-
</p>
|
102 |
-
</div></div>
|
103 |
-
|
104 |
-
<div class="postbox">
|
105 |
-
<h3><label for="title"><?php _e('Disable Security Features', 'aiowpsecurity'); ?></label></h3>
|
106 |
-
<div class="inside">
|
107 |
-
<form method="post" action="<?php echo $_SERVER["REQUEST_URI"]; ?>">
|
108 |
-
<?php wp_nonce_field('aiowpsec-disable-all-features'); ?>
|
109 |
-
<div class="aio_blue_box">
|
110 |
-
<?php
|
111 |
-
echo '<p>'.__('If you think that some plugin functionality on your site is broken due to a security feature you enabled in this plugin, then use the following option to turn off all the security features of this plugin.', 'aiowpsecurity').'</p>';
|
112 |
-
?>
|
113 |
-
</div>
|
114 |
-
<div class="submit">
|
115 |
-
<input type="submit" name="aiowpsec_disable_all_features" value="<?php _e('Disable All Security Features'); ?>" />
|
116 |
-
</div>
|
117 |
-
</form>
|
118 |
-
</div></div>
|
119 |
-
<?php
|
120 |
-
}
|
121 |
-
|
122 |
-
function render_tab2()
|
123 |
-
{
|
124 |
-
global $aio_wp_security;
|
125 |
-
|
126 |
-
if(isset($_POST['aiowps_save_htaccess']))//Do form submission tasks
|
127 |
-
{
|
128 |
-
$nonce=$_REQUEST['_wpnonce'];
|
129 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-save-htaccess-nonce'))
|
130 |
-
{
|
131 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed on htaccess file save!",4);
|
132 |
-
die("Nonce check failed on htaccess file save!");
|
133 |
-
}
|
134 |
-
$htaccess_path = ABSPATH . '.htaccess';
|
135 |
-
$result = AIOWPSecurity_Utility_File::backup_a_file($htaccess_path); //Backup the htaccess file
|
136 |
-
|
137 |
-
if ($result)
|
138 |
-
{
|
139 |
-
if (rename(ABSPATH.'.htaccess.backup', ABSPATH.'htaccess_backup.txt'))
|
140 |
-
{
|
141 |
-
$backup_file_url = AIOWPSEC_WP_URL . '/htaccess_backup.txt';
|
142 |
-
echo '<div id="message" class="updated fade"><p>';
|
143 |
-
_e('Your .htaccess file was successfully backed up! Right click on the following file name and save the backup to your computer.','aiowpsecurity');
|
144 |
-
echo '<p>';
|
145 |
-
_e('Your .htaccess File: ');
|
146 |
-
echo '<a href="'.$backup_file_url.'" target="_blank">'.$backup_file_url.'</a>';
|
147 |
-
echo '</p>';
|
148 |
-
echo '</p></div>';
|
149 |
-
}
|
150 |
-
else
|
151 |
-
{
|
152 |
-
$aio_wp_security->debug_logger->log_debug("htaccess file rename failed during backup!",4);
|
153 |
-
$this->show_msg_error(__('htaccess file rename failed during backup. Please check your root directory for the backup file using FTP.','aiowpsecurity'));
|
154 |
-
}
|
155 |
-
}
|
156 |
-
else
|
157 |
-
{
|
158 |
-
$aio_wp_security->debug_logger->log_debug("htaccess - Backup operation failed!",4);
|
159 |
-
$this->show_msg_error(__('htaccess backup failed.','aiowpsecurity'));
|
160 |
-
}
|
161 |
-
}
|
162 |
-
|
163 |
-
if(isset($_POST['aiowps_restore_htaccess_button']))//Do form submission tasks
|
164 |
-
{
|
165 |
-
$nonce=$_REQUEST['_wpnonce'];
|
166 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-restore-htaccess-nonce'))
|
167 |
-
{
|
168 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed on htaccess file restore!",4);
|
169 |
-
die("Nonce check failed on htaccess file restore!");
|
170 |
-
}
|
171 |
-
|
172 |
-
if (empty($_POST['aiowps_htaccess_file']))
|
173 |
-
{
|
174 |
-
$this->show_msg_error(__('Please choose a .htaccess to restore from.', 'aiowpsecurity'));
|
175 |
-
}
|
176 |
-
else
|
177 |
-
{
|
178 |
-
//Let's copy the uploaded .htaccess file into the active root file
|
179 |
-
$new_htaccess_file_path = trim($_POST['aiowps_htaccess_file']);
|
180 |
-
//TODO
|
181 |
-
//Verify that file chosen has contents which are relevant to .htaccess file
|
182 |
-
$is_htaccess = AIOWPSecurity_Utility_Htaccess::check_if_htaccess_contents($new_htaccess_file_path);
|
183 |
-
if ($is_htaccess == 1)
|
184 |
-
{
|
185 |
-
$active_root_htaccess = ABSPATH.'.htaccess';
|
186 |
-
if (!copy($new_htaccess_file_path, $active_root_htaccess))
|
187 |
-
{
|
188 |
-
//Failed to make a backup copy
|
189 |
-
$aio_wp_security->debug_logger->log_debug("htaccess - Restore from .htaccess operation failed!",4);
|
190 |
-
$this->show_msg_error(__('htaccess file restore failed. Please attempt to restore the .htaccess manually using FTP.','aiowpsecurity'));
|
191 |
-
}
|
192 |
-
else
|
193 |
-
{
|
194 |
-
$this->show_msg_updated(__('Your .htaccess file has successfully been restored!', 'aiowpsecurity'));
|
195 |
-
}
|
196 |
-
}
|
197 |
-
else
|
198 |
-
{
|
199 |
-
$aio_wp_security->debug_logger->log_debug("htaccess restore failed - Contents of restore file appear invalid!",4);
|
200 |
-
$this->show_msg_error(__('htaccess Restore operation failed! Please check the contents of the file you are trying to restore from.','aiowpsecurity'));
|
201 |
-
}
|
202 |
-
}
|
203 |
-
}
|
204 |
-
|
205 |
-
?>
|
206 |
-
<h2><?php _e('.htaccess File Operations', 'aiowpsecurity')?></h2>
|
207 |
-
<div class="aio_blue_box">
|
208 |
-
<?php
|
209 |
-
echo '<p>'.__('Your ".htaccess" file is a key component of your website\'s security and it can be modified to implement various levels of protection mechanisms.', 'aiowpsecurity').'
|
210 |
-
<br />'.__('This feature allows you to backup and save your currently active .htaccess file should you need to re-use the the backed up file in the future.', 'aiowpsecurity').'
|
211 |
-
<br />'.__('You can also restore your site\'s .htaccess settings using a backed up .htaccess file.', 'aiowpsecurity').'
|
212 |
-
</p>';
|
213 |
-
?>
|
214 |
-
</div>
|
215 |
-
|
216 |
-
<div class="postbox">
|
217 |
-
<h3><label for="title"><?php _e('Save the current .htaccess file', 'aiowpsecurity'); ?></label></h3>
|
218 |
-
<div class="inside">
|
219 |
-
<form action="" method="POST">
|
220 |
-
<?php wp_nonce_field('aiowpsec-save-htaccess-nonce'); ?>
|
221 |
-
<p class="description"><?php _e('Click the button below to backup and save the currently active .htaccess file.', 'aiowpsecurity'); ?></p>
|
222 |
-
<input type="submit" name="aiowps_save_htaccess" value="<?php _e('Backup .htaccess File', 'aiowpsecurity')?>" class="button-primary" />
|
223 |
-
</form>
|
224 |
-
</div></div>
|
225 |
-
<div class="postbox">
|
226 |
-
<h3><label for="title"><?php _e('Restore from a backed up .htaccess file', 'aiowpsecurity'); ?></label></h3>
|
227 |
-
<div class="inside">
|
228 |
-
<form action="" method="POST">
|
229 |
-
<?php wp_nonce_field('aiowpsec-restore-htaccess-nonce'); ?>
|
230 |
-
<table class="form-table">
|
231 |
-
<tr valign="top">
|
232 |
-
<th scope="row"><?php _e('.htaccess file to restore from', 'aiowpsecurity')?>:</th>
|
233 |
-
<td>
|
234 |
-
<input type="button" id="aiowps_htaccess_file_button" name="aiowps_htaccess_file_button" class="button rbutton" value="Select Your htaccess File" />
|
235 |
-
<input name="aiowps_htaccess_file" type="text" id="aiowps_htaccess_file" value="" size="80" />
|
236 |
-
<p class="description">
|
237 |
-
<?php
|
238 |
-
_e('After selecting your file, click the button below to restore your site using the backed up htaccess file (htaccess_backup.txt).', 'aiowpsecurity');
|
239 |
-
?>
|
240 |
-
</p>
|
241 |
-
</td>
|
242 |
-
</tr>
|
243 |
-
</table>
|
244 |
-
<input type="submit" name="aiowps_restore_htaccess_button" value="<?php _e('Restore .htaccess File', 'aiowpsecurity')?>" class="button-primary" />
|
245 |
-
</form>
|
246 |
-
</div></div>
|
247 |
-
<div class="postbox">
|
248 |
-
<h3><label for="title"><?php _e('View Contents of the currently active .htaccess file', 'aiowpsecurity'); ?></label></h3>
|
249 |
-
<div class="inside">
|
250 |
-
<?php
|
251 |
-
$ht_file = ABSPATH . '.htaccess';
|
252 |
-
$ht_contents = AIOWPSecurity_Utility_File::get_file_contents($ht_file);
|
253 |
-
//echo $ht_contents;
|
254 |
-
?>
|
255 |
-
<textarea class="aio_text_area_file_output aio_half_width aio_spacer_10_tb" rows="15" readonly><?php echo $ht_contents; ?></textarea>
|
256 |
-
</div></div>
|
257 |
-
|
258 |
-
<?php
|
259 |
-
}
|
260 |
-
|
261 |
-
function render_tab3()
|
262 |
-
{
|
263 |
-
global $aio_wp_security;
|
264 |
-
|
265 |
-
if(isset($_POST['aiowps_save_wp_config']))//Do form submission tasks
|
266 |
-
{
|
267 |
-
$nonce=$_REQUEST['_wpnonce'];
|
268 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-save-wp-config-nonce'))
|
269 |
-
{
|
270 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed on wp_config file save!",4);
|
271 |
-
die("Nonce check failed on wp_config file save!");
|
272 |
-
}
|
273 |
-
$wp_config_path = ABSPATH . 'wp-config.php';
|
274 |
-
$result = AIOWPSecurity_Utility_File::backup_a_file($wp_config_path); //Backup the wp_config.php file
|
275 |
-
|
276 |
-
if ($result)
|
277 |
-
{
|
278 |
-
if (rename(ABSPATH.'wp-config.php.backup', ABSPATH.'wp-config.php.backup.txt'))
|
279 |
-
{
|
280 |
-
$backup_file_url = AIOWPSEC_WP_URL . '/wp-config.php.backup.txt';
|
281 |
-
echo '<div id="message" class="updated fade"><p>';
|
282 |
-
_e('Your wp-config.php file was successfully backed up! Right click on the following file name and save the backup to your computer.','aiowpsecurity');
|
283 |
-
echo '<p>';
|
284 |
-
_e('Your wp-config.php File: ');
|
285 |
-
echo '<a href="'.$backup_file_url.'" target="_blank">'.$backup_file_url.'</a>';
|
286 |
-
echo '</p>';
|
287 |
-
echo '</p></div>';
|
288 |
-
}
|
289 |
-
else
|
290 |
-
{
|
291 |
-
$aio_wp_security->debug_logger->log_debug("wp-config.php file rename failed during backup!",4);
|
292 |
-
$this->show_msg_error(__('wp-config.php file rename failed during backup. Please check your root directory for the backup file using FTP.','aiowpsecurity'));
|
293 |
-
}
|
294 |
-
}
|
295 |
-
else
|
296 |
-
{
|
297 |
-
$aio_wp_security->debug_logger->log_debug("wp-config.php - Backup operation failed!",4);
|
298 |
-
$this->show_msg_error(__('wp-config.php backup failed.','aiowpsecurity'));
|
299 |
-
}
|
300 |
-
}
|
301 |
-
|
302 |
-
if(isset($_POST['aiowps_restore_wp_config_button']))//Do form submission tasks
|
303 |
-
{
|
304 |
-
$nonce=$_REQUEST['_wpnonce'];
|
305 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-restore-wp-config-nonce'))
|
306 |
-
{
|
307 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed on wp-config file restore!",4);
|
308 |
-
die("Nonce check failed on wp-config file restore!");
|
309 |
-
}
|
310 |
-
|
311 |
-
if (empty($_POST['aiowps_wp_config_file']))
|
312 |
-
{
|
313 |
-
$this->show_msg_error(__('Please choose a wp-config.php file to restore from.', 'aiowpsecurity'));
|
314 |
-
}
|
315 |
-
else
|
316 |
-
{
|
317 |
-
//Let's copy the uploaded wp-config.php file into the active root file
|
318 |
-
$new_wp_config_file_path = trim($_POST['aiowps_wp_config_file']);
|
319 |
-
//TODO
|
320 |
-
//Verify that file chosen has contents which are relevant to .htaccess file
|
321 |
-
$is_wp_config = $this->check_if_wp_config_contents($new_wp_config_file_path); //TODO - write the function
|
322 |
-
if ($is_wp_config == 1)
|
323 |
-
{
|
324 |
-
$active_root_wp_config = ABSPATH.'wp-config.php';
|
325 |
-
if (!copy($new_wp_config_file_path, $active_root_wp_config))
|
326 |
-
{
|
327 |
-
//Failed to make a backup copy
|
328 |
-
$aio_wp_security->debug_logger->log_debug("wp-config.php - Restore from backed up wp-config operation failed!",4);
|
329 |
-
$this->show_msg_error(__('wp-config.php file restore failed. Please attempt to restore this file manually using FTP.','aiowpsecurity'));
|
330 |
-
}
|
331 |
-
else
|
332 |
-
{
|
333 |
-
$this->show_msg_updated(__('Your wp-config.php file has successfully been restored!', 'aiowpsecurity'));
|
334 |
-
}
|
335 |
-
}
|
336 |
-
else
|
337 |
-
{
|
338 |
-
$aio_wp_security->debug_logger->log_debug("wp-config.php restore failed - Contents of restore file appear invalid!",4);
|
339 |
-
$this->show_msg_error(__('wp-config.php Restore operation failed! Please check the contents of the file you are trying to restore from.','aiowpsecurity'));
|
340 |
-
}
|
341 |
-
}
|
342 |
-
}
|
343 |
-
|
344 |
-
?>
|
345 |
-
<h2><?php _e('wp-config.php File Operations', 'aiowpsecurity')?></h2>
|
346 |
-
<div class="aio_blue_box">
|
347 |
-
<?php
|
348 |
-
echo '<p>'.__('Your "wp-config.php" file is one of the most important in your WordPress installation. It is a primary configuration file and contains crucial things such as details of your database and other critical components.', 'aiowpsecurity').'
|
349 |
-
<br />'.__('This feature allows you to backup and save your currently active wp-config.php file should you need to re-use the the backed up file in the future.', 'aiowpsecurity').'
|
350 |
-
<br />'.__('You can also restore your site\'s wp-config.php settings using a backed up wp-config.php file.', 'aiowpsecurity').'
|
351 |
-
</p>';
|
352 |
-
?>
|
353 |
-
</div>
|
354 |
-
|
355 |
-
<div class="postbox">
|
356 |
-
<h3><label for="title"><?php _e('Save the current wp-config.php file', 'aiowpsecurity'); ?></label></h3>
|
357 |
-
<div class="inside">
|
358 |
-
<form action="" method="POST">
|
359 |
-
<?php wp_nonce_field('aiowpsec-save-wp-config-nonce'); ?>
|
360 |
-
<p class="description"><?php _e('Click the button below to backup and save the currently active wp-config.php file.', 'aiowpsecurity'); ?></p>
|
361 |
-
<input type="submit" name="aiowps_save_wp_config" value="<?php _e('Backup wp-config.php File', 'aiowpsecurity')?>" class="button-primary" />
|
362 |
-
</form>
|
363 |
-
</div></div>
|
364 |
-
<div class="postbox">
|
365 |
-
<h3><label for="title"><?php _e('Restore from a backed up wp-config file', 'aiowpsecurity'); ?></label></h3>
|
366 |
-
<div class="inside">
|
367 |
-
<form action="" method="POST">
|
368 |
-
<?php wp_nonce_field('aiowpsec-restore-wp-config-nonce'); ?>
|
369 |
-
<table class="form-table">
|
370 |
-
<tr valign="top">
|
371 |
-
<th scope="row"><?php _e('wp-config file to restore from', 'aiowpsecurity')?>:</th>
|
372 |
-
<td>
|
373 |
-
<input type="button" id="aiowps_wp_config_file_button" name="aiowps_wp_config_file_button" class="button rbutton" value="Select Your wp-config File" />
|
374 |
-
<input name="aiowps_wp_config_file" type="text" id="aiowps_wp_config_file" value="" size="80" />
|
375 |
-
<p class="description">
|
376 |
-
<?php
|
377 |
-
_e('After selecting your file click the button below to restore your site using the backed up wp-config file (wp-config.php.backup.txt).', 'aiowpsecurity');
|
378 |
-
?>
|
379 |
-
</p>
|
380 |
-
</td>
|
381 |
-
</tr>
|
382 |
-
</table>
|
383 |
-
<input type="submit" name="aiowps_restore_wp_config_button" value="<?php _e('Restore wp-config File', 'aiowpsecurity')?>" class="button-primary" />
|
384 |
-
</form>
|
385 |
-
</div></div>
|
386 |
-
<div class="postbox">
|
387 |
-
<h3><label for="title"><?php _e('View Contents of the currently active wp-config.php file', 'aiowpsecurity'); ?></label></h3>
|
388 |
-
<div class="inside">
|
389 |
-
<?php
|
390 |
-
$wp_config_file = ABSPATH . 'wp-config.php';
|
391 |
-
$wp_config_contents = AIOWPSecurity_Utility_File::get_file_contents($wp_config_file);
|
392 |
-
?>
|
393 |
-
<textarea class="aio_text_area_file_output aio_width_80 aio_spacer_10_tb" rows="20" readonly><?php echo $wp_config_contents; ?></textarea>
|
394 |
-
</div></div>
|
395 |
-
|
396 |
-
<?php
|
397 |
-
}
|
398 |
-
|
399 |
-
function check_if_wp_config_contents($wp_file)
|
400 |
-
{
|
401 |
-
$is_wp_config = false;
|
402 |
-
|
403 |
-
$file_contents = file($wp_file);
|
404 |
-
|
405 |
-
if ($file_contents == '' || $file_contents == NULL || $file_contents == false)
|
406 |
-
{
|
407 |
-
return -1;
|
408 |
-
}
|
409 |
-
foreach ($file_contents as $line)
|
410 |
-
{
|
411 |
-
if ((strpos($line, "define('DB_NAME'") !== false))
|
412 |
-
{
|
413 |
-
$is_wp_config = true; //It appears that we have some sort of wp-config.php file
|
414 |
-
break;
|
415 |
-
}
|
416 |
-
else
|
417 |
-
{
|
418 |
-
//see if we're at the end of the section
|
419 |
-
$is_wp_config = false;
|
420 |
-
}
|
421 |
-
}
|
422 |
-
if ($is_wp_config)
|
423 |
-
{
|
424 |
-
return 1;
|
425 |
-
}
|
426 |
-
else
|
427 |
-
{
|
428 |
-
return -1;
|
429 |
-
}
|
430 |
-
|
431 |
-
}
|
432 |
-
|
433 |
-
} //end class
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/admin/wp-security-user-accounts-menu.php
DELETED
@@ -1,289 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_User_Accounts_Menu extends AIOWPSecurity_Admin_Menu
|
4 |
-
{
|
5 |
-
var $menu_page_slug = AIOWPSEC_USER_ACCOUNTS_MENU_SLUG;
|
6 |
-
|
7 |
-
/* Specify all the tabs of this menu in the following array */
|
8 |
-
var $menu_tabs = array(
|
9 |
-
'tab1' => 'WP Username',
|
10 |
-
'tab2' => 'Display Name'
|
11 |
-
);
|
12 |
-
var $menu_tabs_handler = array(
|
13 |
-
'tab1' => 'render_tab1',
|
14 |
-
'tab2' => 'render_tab2',
|
15 |
-
);
|
16 |
-
function __construct()
|
17 |
-
{
|
18 |
-
$this->render_user_account_menu_page();
|
19 |
-
}
|
20 |
-
|
21 |
-
function get_current_tab()
|
22 |
-
{
|
23 |
-
$tab_keys = array_keys($this->menu_tabs);
|
24 |
-
$tab = isset( $_GET['tab'] ) ? $_GET['tab'] : $tab_keys[0];
|
25 |
-
return $tab;
|
26 |
-
}
|
27 |
-
|
28 |
-
/*
|
29 |
-
* Renders our tabs of this menu as nav items
|
30 |
-
*/
|
31 |
-
function render_menu_tabs()
|
32 |
-
{
|
33 |
-
$current_tab = $this->get_current_tab();
|
34 |
-
|
35 |
-
echo '<h2 class="nav-tab-wrapper">';
|
36 |
-
foreach ( $this->menu_tabs as $tab_key => $tab_caption )
|
37 |
-
{
|
38 |
-
$active = $current_tab == $tab_key ? 'nav-tab-active' : '';
|
39 |
-
echo '<a class="nav-tab ' . $active . '" href="?page=' . $this->menu_page_slug . '&tab=' . $tab_key . '">' . $tab_caption . '</a>';
|
40 |
-
}
|
41 |
-
echo '</h2>';
|
42 |
-
}
|
43 |
-
|
44 |
-
/*
|
45 |
-
* The menu rendering goes here
|
46 |
-
*/
|
47 |
-
function render_user_account_menu_page()
|
48 |
-
{
|
49 |
-
$tab = $this->get_current_tab();
|
50 |
-
?>
|
51 |
-
<div class="wrap">
|
52 |
-
<div id="poststuff"><div id="post-body">
|
53 |
-
<?php
|
54 |
-
$this->render_menu_tabs();
|
55 |
-
//$tab_keys = array_keys($this->menu_tabs);
|
56 |
-
call_user_func(array(&$this, $this->menu_tabs_handler[$tab]));
|
57 |
-
?>
|
58 |
-
</div></div>
|
59 |
-
</div><!-- end of wrap -->
|
60 |
-
<?php
|
61 |
-
}
|
62 |
-
|
63 |
-
function render_tab1()
|
64 |
-
{
|
65 |
-
if (isset($_POST['aiowps_change_admin_username']))//Do form submission tasks
|
66 |
-
{
|
67 |
-
echo $this->validate_change_username_form();
|
68 |
-
}
|
69 |
-
?>
|
70 |
-
<h2><?php _e('Admin User Security', 'aiowpsecurity')?></h2>
|
71 |
-
<div class="aio_blue_box">
|
72 |
-
<?php
|
73 |
-
echo '<p>'.__('By default, WordPress sets the administrator username to "admin" at installation time.', 'aiowpsecurity').'
|
74 |
-
<br />'.__('A lot of hackers try to take advantage of this information by attempting "Brute Force Login Attacks" where they repeatedly try to guess the password by using "admin" for username.', 'aiowpsecurity').'
|
75 |
-
<br />'.__('From a security perspective, changing the default "admin" user name is one of the first and smartest things you should do on your site.', 'aiowpsecurity').'
|
76 |
-
<br /><br />'.__('This feature will allow you to change your default "admin" user name to a more secure name of your choosing.', 'aiowpsecurity').'
|
77 |
-
</p>';
|
78 |
-
?>
|
79 |
-
</div>
|
80 |
-
|
81 |
-
<?php
|
82 |
-
//display a list of all administrator accounts for this site
|
83 |
-
$postbox_title = __('List of Administrator Accounts', 'aiowpsecurity');
|
84 |
-
//TODO: Multi-site: might need to put separate code for multi-site, ie, check if multi-site and then call get_all_admin_accounts($blog_id).
|
85 |
-
//if (is_multisite()) { //get admin accounts for current site
|
86 |
-
// $blog_id = get_current_blog_id();
|
87 |
-
// $this->postbox($postbox_title, $this->get_all_admin_accounts($blog_id));
|
88 |
-
//} else {
|
89 |
-
$this->postbox($postbox_title, $this->get_all_admin_accounts());
|
90 |
-
//}
|
91 |
-
?>
|
92 |
-
<div class="postbox">
|
93 |
-
<h3><label for="title"><?php _e('Change Admin Username', 'aiowpsecurity')?></label></h3>
|
94 |
-
<div class="inside">
|
95 |
-
<?php
|
96 |
-
global $aiowps_feature_mgr;
|
97 |
-
$aiowps_feature_mgr->output_feature_details_badge("user-accounts-change-admin-user");
|
98 |
-
|
99 |
-
if (AIOWPSecurity_Utility::check_user_exists('admin'))
|
100 |
-
{
|
101 |
-
echo '<div class="aio_red_box"><p>'.__('Your site currently has an account which uses the default "admin" username.
|
102 |
-
It is highly recommended that you change this name to something else.
|
103 |
-
Use the following field to change the admin username.', 'aiowpsecurity').'</p></div>';
|
104 |
-
?>
|
105 |
-
<form action="" method="POST">
|
106 |
-
<?php wp_nonce_field('aiowpsec-change-admin-nonce'); ?>
|
107 |
-
<table class="form-table">
|
108 |
-
<tr valign="top">
|
109 |
-
<th scope="row"><label for="NewUserName"> <?php _e('New Admin Username', 'aiowpsecurity')?>:</label></th>
|
110 |
-
<td><input size="16" name="aiowps_new_user_name" />
|
111 |
-
<p class="description"><?php _e('Choose a new username for admin.', 'aiowpsecurity'); ?></p>
|
112 |
-
</td>
|
113 |
-
</tr>
|
114 |
-
</table>
|
115 |
-
<input type="submit" name="aiowps_change_admin_username" value="<?php _e('Change Username', 'aiowpsecurity')?>" class="button-primary" />
|
116 |
-
<div class="aio_spacer_15"></div>
|
117 |
-
<p class="description"><?php _e('NOTE: If you are currently logged in as "admin" you will be automatically logged out after changing your username and will be required to log back in.', 'aiowpsecurity')?></p>
|
118 |
-
</form>
|
119 |
-
<?php
|
120 |
-
}
|
121 |
-
else
|
122 |
-
{
|
123 |
-
echo '<div id="aios_message" class="aio_green_box"><p><strong>';
|
124 |
-
_e ('No action required! ', 'aiowpsecurity');
|
125 |
-
echo '</strong><br />';
|
126 |
-
_e ('Your site does not have any account which uses the default "admin" username. ', 'aiowpsecurity');
|
127 |
-
_e ('This is good security practice.', 'aiowpsecurity');
|
128 |
-
echo '</p></div>';
|
129 |
-
}
|
130 |
-
?>
|
131 |
-
</div>
|
132 |
-
</div>
|
133 |
-
<?php
|
134 |
-
}
|
135 |
-
|
136 |
-
function render_tab2()
|
137 |
-
{
|
138 |
-
?>
|
139 |
-
<h2><?php _e('Display Name Security', 'aiowpsecurity')?></h2>
|
140 |
-
<div class="aio_blue_box">
|
141 |
-
<?php
|
142 |
-
echo '<p>'.__('When you submit a post or answer a comment, WordPress will usually display your "nickname".', 'aiowpsecurity').'
|
143 |
-
<br />'.__('By default the nickname is set to the login (or user) name of your account.', 'aiowpsecurity').'
|
144 |
-
<br />'.__('From a security perspective, leaving your nickname the same as your user name is bad practice because it gives a hacker at least half of your account\'s login credentials.', 'aiowpsecurity').'
|
145 |
-
<br /><br />'.__('Therefore to further tighten your site\'s security you are advised to change your <strong>nickname</strong> and <strong>Display name</strong> to be different from your <strong>Username</strong>.', 'aiowpsecurity').'
|
146 |
-
</p>';
|
147 |
-
?>
|
148 |
-
</div>
|
149 |
-
|
150 |
-
<div class="postbox">
|
151 |
-
<h3><label for="title"><?php _e('Modify Accounts With Identical Login Name & Display Name', 'aiowpsecurity')?></label></h3>
|
152 |
-
<div class="inside">
|
153 |
-
<?php
|
154 |
-
global $aiowps_feature_mgr;
|
155 |
-
$aiowps_feature_mgr->output_feature_details_badge("user-accounts-display-name");
|
156 |
-
|
157 |
-
//now let's find any accounts which have login name same as display name
|
158 |
-
$login_nick_name_accounts = AIOWPSecurity_Utility::check_identical_login_and_nick_names();
|
159 |
-
if ($login_nick_name_accounts) {
|
160 |
-
echo '<div class="aio_red_box"><p>'.__('Your site currently has the following accounts which have an identical login name and display name.', 'aiowpsecurity').'
|
161 |
-
<span class="description">('.__('Click on the link to edit the settings of that particular user account', 'aiowpsecurity').'</span></p></div>';
|
162 |
-
?>
|
163 |
-
<table class="form-table">
|
164 |
-
<?php
|
165 |
-
$edit_user_page = get_option('siteurl').'/wp-admin/user-edit.php?user_id=';
|
166 |
-
foreach ($login_nick_name_accounts as $usr){
|
167 |
-
echo '<tr valign="top">';
|
168 |
-
// echo '<th scope="row"><label for="UserID'.$usr['ID'].'"> Login Name: </label></th>';
|
169 |
-
echo '<td><a href="'.$edit_user_page.$usr['ID'].'" target="_blank">'.$usr['user_login'].'</a>';
|
170 |
-
echo '</tr>';
|
171 |
-
}
|
172 |
-
?>
|
173 |
-
</table>
|
174 |
-
<?php
|
175 |
-
} else {
|
176 |
-
echo '<div id="aios_message" class="aio_green_box"><p><strong>'.__('No action required.', 'aiowpsecurity').'</strong>
|
177 |
-
<br />'.__('Your site does not have a user account where the display name is identical to the username.', 'aiowpsecurity').'</p></div>';
|
178 |
-
}
|
179 |
-
?>
|
180 |
-
</div>
|
181 |
-
</div>
|
182 |
-
<?php
|
183 |
-
}
|
184 |
-
|
185 |
-
function validate_change_username_form()
|
186 |
-
{
|
187 |
-
global $wpdb;
|
188 |
-
global $aio_wp_security;
|
189 |
-
$errors = '';
|
190 |
-
$nonce=$_REQUEST['_wpnonce'];
|
191 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-change-admin-nonce'))
|
192 |
-
{
|
193 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed on admin username change operation!",4);
|
194 |
-
die(__('Nonce check failed on admin username change operation!','aiowpsecurity'));
|
195 |
-
}
|
196 |
-
if (!empty($_POST['aiowps_new_user_name'])) {
|
197 |
-
$new_username = sanitize_text_field($_POST['aiowps_new_user_name']);
|
198 |
-
if (validate_username($new_username))
|
199 |
-
{
|
200 |
-
if (AIOWPSecurity_Utility::check_user_exists($new_username)){
|
201 |
-
$errors .= __('Username ', 'aiowpsecurity').$new_username.__(' already exists. Please enter another value. ', 'aiowpsecurity');
|
202 |
-
}
|
203 |
-
else
|
204 |
-
{
|
205 |
-
//let's check if currently logged in username is 'admin'
|
206 |
-
global $user_login;
|
207 |
-
get_currentuserinfo();
|
208 |
-
if (strtolower($user_login) == 'admin'){
|
209 |
-
$username_is_admin = TRUE;
|
210 |
-
} else {
|
211 |
-
$username_is_admin = FALSE;
|
212 |
-
}
|
213 |
-
//Now let's change the username
|
214 |
-
$result = $wpdb->query("UPDATE `" . $wpdb->users . "` SET user_login = '" . $wpdb->escape($new_username) . "' WHERE user_login='admin';");
|
215 |
-
if (!$result) {
|
216 |
-
//There was an error updating the users table
|
217 |
-
$user_update_error = __('The database update operation of the user account failed!', 'aiowpsecurity');
|
218 |
-
//TODO## - add error logging here
|
219 |
-
$return_msg = '<div id="message" class="updated fade"><p>'.$user_update_error.'</p></div>';
|
220 |
-
return $return_msg;
|
221 |
-
}
|
222 |
-
|
223 |
-
//If user is logged in with username "admin" then log user out and send to login page so they can login again
|
224 |
-
if ($username_is_admin) {
|
225 |
-
//Lets logout the user
|
226 |
-
$aio_wp_security->debug_logger->log_debug("Logging User Out with login ".$user_login. " because they changed their username.");
|
227 |
-
$after_logout_url = AIOWPSecurity_Utility::get_current_page_url();
|
228 |
-
$after_logout_payload = 'redirect_to='.$after_logout_url.'&msg='.$aio_wp_security->user_login_obj->key_login_msg.'=admin_user_changed';//Place the handle for the login screen message in the URL
|
229 |
-
$encrypted_payload = base64_encode($after_logout_payload);
|
230 |
-
$logout_url = AIOWPSEC_WP_URL.'?aiowpsec_do_log_out=1';
|
231 |
-
$logout_url = AIOWPSecurity_Utility::add_query_data_to_url($logout_url, 'al_additional_data', $encrypted_payload);
|
232 |
-
AIOWPSecurity_Utility::redirect_to_url($logout_url);
|
233 |
-
}
|
234 |
-
|
235 |
-
//TODO - multisite considerations
|
236 |
-
// if ( is_multisite() ) { //process sitemeta if we're in a multi-site situation
|
237 |
-
// $oldAdmins = $wpdb->get_var( "SELECT meta_value FROM `" . $wpdb->sitemeta . "` WHERE meta_key = 'site_admins'" );
|
238 |
-
// $newAdmins = str_replace( '5:"admin"', strlen( $newuser ) . ':"' . $wpdb->escape( $new_username ) . '"', $oldAdmins );
|
239 |
-
// $wpdb->query( "UPDATE `" . $wpdb->sitemeta . "` SET meta_value = '" . $wpdb->escape( $newAdmins ) . "' WHERE meta_key = 'site_admins'" );
|
240 |
-
// }
|
241 |
-
}
|
242 |
-
}
|
243 |
-
else {//An invalid username was entered
|
244 |
-
$errors .= __('You entered an invalid username. Please enter another value. ', 'aiowpsecurity');
|
245 |
-
}
|
246 |
-
}
|
247 |
-
else {//No username value was entered
|
248 |
-
$errors .= __('Please enter a value for your username. ', 'aiowpsecurity');
|
249 |
-
}
|
250 |
-
|
251 |
-
if (strlen($errors)> 0){//We have some validation or other error
|
252 |
-
$return_msg = '<div id="message" class="error"><p>' . $errors . '</p></div>';
|
253 |
-
}
|
254 |
-
else{
|
255 |
-
$return_msg = '<div id="message" class="updated fade"><p>'.__('Username Successfully Changed!', 'aiowpsecurity').'</p></div>';
|
256 |
-
}
|
257 |
-
return $return_msg;
|
258 |
-
}
|
259 |
-
|
260 |
-
|
261 |
-
/*
|
262 |
-
* This function will retrieve all user accounts which have 'administrator' role and will return html code with results in a table
|
263 |
-
*/
|
264 |
-
function get_all_admin_accounts($blog_id='') {
|
265 |
-
//TODO: Have included the "blog_id" variable for future use for cases where people want to search particular blog (eg, multi-site)
|
266 |
-
if ($blog_id) {
|
267 |
-
$admin_users = get_users('blog_id='.$blog_id.'orderby=login&role=administrator');
|
268 |
-
} else {
|
269 |
-
$admin_users = get_users('orderby=login&role=administrator');
|
270 |
-
}
|
271 |
-
//now let's put the results in an HTML table
|
272 |
-
$account_output = "";
|
273 |
-
if ($admin_users != NULL) {
|
274 |
-
$account_output .= '<table>';
|
275 |
-
$account_output .= '<tr><th>'.__('Account Login Name', 'aiowpsecurity').'</th></tr>';
|
276 |
-
foreach ($admin_users as $entry) {
|
277 |
-
$account_output .= '<tr>';
|
278 |
-
if ($entry->user_login == 'admin') {
|
279 |
-
$account_output .= '<td style="color:red; font-weight: bold;">'.$entry->user_login.'</td>';
|
280 |
-
}else {
|
281 |
-
$account_output .= '<td>'.$entry->user_login.'</td>';
|
282 |
-
}
|
283 |
-
$account_output .= '</tr>';
|
284 |
-
}
|
285 |
-
$account_output .= '</table>';
|
286 |
-
}
|
287 |
-
return $account_output;
|
288 |
-
}
|
289 |
-
} //end class
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/admin/wp-security-user-login-menu.php
DELETED
@@ -1,435 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_User_Login_Menu extends AIOWPSecurity_Admin_Menu
|
4 |
-
{
|
5 |
-
var $menu_page_slug = AIOWPSEC_USER_LOGIN_MENU_SLUG;
|
6 |
-
|
7 |
-
/* Specify all the tabs of this menu in the following array */
|
8 |
-
var $menu_tabs = array(
|
9 |
-
'tab1' => 'Login Lockdown',
|
10 |
-
'tab2' => 'Failed Login Records',
|
11 |
-
'tab3' => 'Force Logout',
|
12 |
-
'tab4' => 'Account Activity',
|
13 |
-
);
|
14 |
-
var $menu_tabs_handler = array(
|
15 |
-
'tab1' => 'render_tab1',
|
16 |
-
'tab2' => 'render_tab2',
|
17 |
-
'tab3' => 'render_tab3',
|
18 |
-
'tab4' => 'render_tab4',
|
19 |
-
);
|
20 |
-
|
21 |
-
function __construct()
|
22 |
-
{
|
23 |
-
$this->render_user_login_menu_page();
|
24 |
-
}
|
25 |
-
|
26 |
-
function get_current_tab()
|
27 |
-
{
|
28 |
-
$tab_keys = array_keys($this->menu_tabs);
|
29 |
-
$tab = isset( $_GET['tab'] ) ? $_GET['tab'] : $tab_keys[0];
|
30 |
-
return $tab;
|
31 |
-
}
|
32 |
-
|
33 |
-
/*
|
34 |
-
* Renders our tabs of this menu as nav items
|
35 |
-
*/
|
36 |
-
function render_menu_tabs()
|
37 |
-
{
|
38 |
-
$current_tab = $this->get_current_tab();
|
39 |
-
|
40 |
-
echo '<h2 class="nav-tab-wrapper">';
|
41 |
-
foreach ( $this->menu_tabs as $tab_key => $tab_caption )
|
42 |
-
{
|
43 |
-
$active = $current_tab == $tab_key ? 'nav-tab-active' : '';
|
44 |
-
echo '<a class="nav-tab ' . $active . '" href="?page=' . $this->menu_page_slug . '&tab=' . $tab_key . '">' . $tab_caption . '</a>';
|
45 |
-
}
|
46 |
-
echo '</h2>';
|
47 |
-
}
|
48 |
-
|
49 |
-
/*
|
50 |
-
* The menu rendering goes here
|
51 |
-
*/
|
52 |
-
function render_user_login_menu_page()
|
53 |
-
{
|
54 |
-
$tab = $this->get_current_tab();
|
55 |
-
?>
|
56 |
-
<div class="wrap">
|
57 |
-
<div id="poststuff"><div id="post-body">
|
58 |
-
<?php
|
59 |
-
$this->render_menu_tabs();
|
60 |
-
//$tab_keys = array_keys($this->menu_tabs);
|
61 |
-
call_user_func(array(&$this, $this->menu_tabs_handler[$tab]));
|
62 |
-
?>
|
63 |
-
</div></div>
|
64 |
-
</div><!-- end of wrap -->
|
65 |
-
<?php
|
66 |
-
}
|
67 |
-
|
68 |
-
function render_tab1()
|
69 |
-
{
|
70 |
-
global $aio_wp_security;
|
71 |
-
include_once 'wp-security-list-locked-ip.php'; //For rendering the AIOWPSecurity_List_Table in tab1
|
72 |
-
$locked_ip_list = new AIOWPSecurity_List_Locked_IP(); //For rendering the AIOWPSecurity_List_Table in tab1
|
73 |
-
|
74 |
-
if(isset($_POST['aiowps_login_lockdown']))//Do form submission tasks
|
75 |
-
{
|
76 |
-
$error = '';
|
77 |
-
$nonce=$_REQUEST['_wpnonce'];
|
78 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-login-lockdown-nonce'))
|
79 |
-
{
|
80 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed on login lockdown options save!",4);
|
81 |
-
die("Nonce check failed on login lockdown options save!");
|
82 |
-
}
|
83 |
-
|
84 |
-
$max_login_attempt_val = sanitize_text_field($_POST['aiowps_max_login_attempts']);
|
85 |
-
if(!is_numeric($max_login_attempt_val))
|
86 |
-
{
|
87 |
-
$error .= '<br />'.__('You entered a non numeric value for the max login attempts field. It has been set to the default value.','aiowpsecurity');
|
88 |
-
$max_login_attempt_val = '3';//Set it to the default value for this field
|
89 |
-
}
|
90 |
-
|
91 |
-
$login_retry_time_period = sanitize_text_field($_POST['aiowps_retry_time_period']);
|
92 |
-
if(!is_numeric($login_retry_time_period))
|
93 |
-
{
|
94 |
-
$error .= '<br />'.__('You entered a non numeric value for the login retry time period field. It has been set to the default value.','aiowpsecurity');
|
95 |
-
$login_retry_time_period = '5';//Set it to the default value for this field
|
96 |
-
}
|
97 |
-
|
98 |
-
$lockout_time_length = sanitize_text_field($_POST['aiowps_lockout_time_length']);
|
99 |
-
if(!is_numeric($lockout_time_length))
|
100 |
-
{
|
101 |
-
$error .= '<br />'.__('You entered a non numeric value for the lockout time length field. It has been set to the default value.','aiowpsecurity');
|
102 |
-
$lockout_time_length = '60';//Set it to the default value for this field
|
103 |
-
}
|
104 |
-
|
105 |
-
$email_address = sanitize_email($_POST['aiowps_email_address']);
|
106 |
-
if(!is_email($email_address))
|
107 |
-
{
|
108 |
-
$error .= '<br />'.__('You have entered an incorrect email address format. It has been set to your WordPress admin email as default.','aiowpsecurity');
|
109 |
-
$email_address = get_bloginfo('admin_email'); //Set the default value to the blog admin email
|
110 |
-
}
|
111 |
-
|
112 |
-
if($error)
|
113 |
-
{
|
114 |
-
$this->show_msg_error(__('Attention!','aiowpsecurity').$error);
|
115 |
-
}
|
116 |
-
|
117 |
-
//Save all the form values to the options
|
118 |
-
$aio_wp_security->configs->set_value('aiowps_enable_login_lockdown',isset($_POST["aiowps_enable_login_lockdown"])?'1':'');
|
119 |
-
$aio_wp_security->configs->set_value('aiowps_max_login_attempts',absint($max_login_attempt_val));
|
120 |
-
$aio_wp_security->configs->set_value('aiowps_retry_time_period',absint($login_retry_time_period));
|
121 |
-
$aio_wp_security->configs->set_value('aiowps_lockout_time_length',absint($lockout_time_length));
|
122 |
-
$aio_wp_security->configs->set_value('aiowps_set_generic_login_msg',isset($_POST["aiowps_set_generic_login_msg"])?'1':'');
|
123 |
-
$aio_wp_security->configs->set_value('aiowps_enable_email_notify',isset($_POST["aiowps_enable_email_notify"])?'1':'');
|
124 |
-
$aio_wp_security->configs->set_value('aiowps_email_address',$email_address);
|
125 |
-
$aio_wp_security->configs->save_config();
|
126 |
-
$this->show_msg_settings_updated();
|
127 |
-
}
|
128 |
-
|
129 |
-
|
130 |
-
if(isset($_REQUEST['action'])) //Do list table form row action tasks
|
131 |
-
{
|
132 |
-
if($_REQUEST['action'] == 'delete_blocked_ip'){ //Delete link was clicked for a row in list table
|
133 |
-
$locked_ip_list->delete_lockdown_records(strip_tags($_REQUEST['lockdown_id']));
|
134 |
-
}
|
135 |
-
|
136 |
-
if($_REQUEST['action'] == 'unlock_ip'){ //Unlock link was clicked for a row in list table
|
137 |
-
$locked_ip_list->unlock_ip_range(strip_tags($_REQUEST['lockdown_id']));
|
138 |
-
}
|
139 |
-
}
|
140 |
-
?>
|
141 |
-
<h2><?php _e('Login Lockdown Configuration', 'aiowpsecurity')?></h2>
|
142 |
-
<div class="aio_blue_box">
|
143 |
-
<?php
|
144 |
-
echo '<p>'.__('One of the ways hackers try to compromise sites is via a ', 'aiowpsecurity').'<strong>'.__('Brute Force Login Attack', 'aiowpsecurity').'</strong>.
|
145 |
-
<br />'.__('This is where attackers use repeated login attempts until they guess the password.', 'aiowpsecurity').'
|
146 |
-
<br />'.__('Apart from choosing strong passwords, monitoring and blocking IP addresses which are involved in repeated login failures in a short period of time is a very effective way to stop these types of attacks.', 'aiowpsecurity').'
|
147 |
-
</p>';
|
148 |
-
?>
|
149 |
-
</div>
|
150 |
-
|
151 |
-
<div class="postbox">
|
152 |
-
<h3><label for="title"><?php _e('Login Lockdown Options', 'aiowpsecurity'); ?></label></h3>
|
153 |
-
<div class="inside">
|
154 |
-
<?php
|
155 |
-
//Display security info badge
|
156 |
-
global $aiowps_feature_mgr;
|
157 |
-
$aiowps_feature_mgr->output_feature_details_badge("user-login-login-lockdown");
|
158 |
-
?>
|
159 |
-
|
160 |
-
<form action="" method="POST">
|
161 |
-
<?php wp_nonce_field('aiowpsec-login-lockdown-nonce'); ?>
|
162 |
-
<table class="form-table">
|
163 |
-
<tr valign="top">
|
164 |
-
<th scope="row"><?php _e('Enable Login Lockdown Feature', 'aiowpsecurity')?>:</th>
|
165 |
-
<td>
|
166 |
-
<input name="aiowps_enable_login_lockdown" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_enable_login_lockdown')=='1') echo ' checked="checked"'; ?> value="1"/>
|
167 |
-
<span class="description"><?php _e('Check this if you want to enable the login lockdown feature and apply the settings below', 'aiowpsecurity'); ?></span>
|
168 |
-
</td>
|
169 |
-
</tr>
|
170 |
-
<tr valign="top">
|
171 |
-
<th scope="row"><?php _e('Max Login Attempts', 'aiowpsecurity')?>:</th>
|
172 |
-
<td><input size="5" name="aiowps_max_login_attempts" value="<?php echo $aio_wp_security->configs->get_value('aiowps_max_login_attempts'); ?>" />
|
173 |
-
<span class="description"><?php _e('Set the value for the maximum login retries before IP address is locked out', 'aiowpsecurity'); ?></span>
|
174 |
-
</td>
|
175 |
-
</tr>
|
176 |
-
<tr valign="top">
|
177 |
-
<th scope="row"><?php _e('Login Retry Time Period (min)', 'aiowpsecurity')?>:</th>
|
178 |
-
<td><input size="5" name="aiowps_retry_time_period" value="<?php echo $aio_wp_security->configs->get_value('aiowps_retry_time_period'); ?>" />
|
179 |
-
<span class="description"><?php _e('If the maximum number of failed login attempts for a particular IP address occur within this time period the plugin will lock out that address', 'aiowpsecurity'); ?></span>
|
180 |
-
</td>
|
181 |
-
</tr>
|
182 |
-
<tr valign="top">
|
183 |
-
<th scope="row"><?php _e('Time Length of Lockout (min)', 'aiowpsecurity')?>:</th>
|
184 |
-
<td><input size="5" name="aiowps_lockout_time_length" value="<?php echo $aio_wp_security->configs->get_value('aiowps_lockout_time_length'); ?>" />
|
185 |
-
<span class="description"><?php _e('Set the length of time for which a particular IP address will be prevented from logging in', 'aiowpsecurity'); ?></span>
|
186 |
-
</td>
|
187 |
-
</tr>
|
188 |
-
<tr valign="top">
|
189 |
-
<th scope="row"><?php _e('Display Generic Error Message', 'aiowpsecurity')?>:</th>
|
190 |
-
<td>
|
191 |
-
<input name="aiowps_set_generic_login_msg" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_set_generic_login_msg')=='1') echo ' checked="checked"'; ?> value="1"/>
|
192 |
-
<span class="description"><?php _e('Check this if you want to show a generic error message when a login attempt fails', 'aiowpsecurity'); ?></span>
|
193 |
-
</td>
|
194 |
-
</tr>
|
195 |
-
<tr valign="top">
|
196 |
-
<th scope="row"><?php _e('Notify By Email', 'aiowpsecurity')?>:</th>
|
197 |
-
<td>
|
198 |
-
<input name="aiowps_enable_email_notify" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_enable_email_notify')=='1') echo ' checked="checked"'; ?> value="1"/>
|
199 |
-
<span class="description"><?php _e('Check this if you want to receive an email when someone has been locked out due to maximum failed login attempts', 'aiowpsecurity'); ?></span>
|
200 |
-
<br /><input size="30" name="aiowps_email_address" value="<?php echo $aio_wp_security->configs->get_value('aiowps_email_address'); ?>" />
|
201 |
-
<span class="description"><?php _e('Enter an email address', 'aiowpsecurity'); ?></span>
|
202 |
-
</td>
|
203 |
-
</tr>
|
204 |
-
</table>
|
205 |
-
<input type="submit" name="aiowps_login_lockdown" value="<?php _e('Save Settings', 'aiowpsecurity')?>" class="button-primary" />
|
206 |
-
</form>
|
207 |
-
</div></div>
|
208 |
-
<div class="postbox">
|
209 |
-
<h3><label for="title"><?php _e('Currently Locked Out IP Address Ranges', 'aiowpsecurity'); ?></label></h3>
|
210 |
-
<div class="inside">
|
211 |
-
<?php
|
212 |
-
//Fetch, prepare, sort, and filter our data...
|
213 |
-
$locked_ip_list->prepare_items();
|
214 |
-
//echo "put table of locked entries here";
|
215 |
-
?>
|
216 |
-
<form id="tables-filter" method="get" onSubmit="return confirm('Are you sure you want to perform this bulk operation on the selected entries?');">
|
217 |
-
<!-- For plugins, we also need to ensure that the form posts back to our current page -->
|
218 |
-
<input type="hidden" name="page" value="<?php echo $_REQUEST['page']; ?>" />
|
219 |
-
<input type="hidden" name="tab" value="<?php echo $_REQUEST['tab']; ?>" />
|
220 |
-
<!-- Now we can render the completed list table -->
|
221 |
-
<?php $locked_ip_list->display(); ?>
|
222 |
-
</form>
|
223 |
-
</div></div>
|
224 |
-
<?php
|
225 |
-
}
|
226 |
-
|
227 |
-
function render_tab2()
|
228 |
-
{
|
229 |
-
include_once 'wp-security-list-login-fails.php'; //For rendering the AIOWPSecurity_List_Table in tab2
|
230 |
-
$failed_login_list = new AIOWPSecurity_List_Login_Failed_Attempts(); //For rendering the AIOWPSecurity_List_Table in tab2
|
231 |
-
if(isset($_REQUEST['action'])) //Do row action tasks for list table form for failed logins
|
232 |
-
{
|
233 |
-
if($_REQUEST['action'] == 'delete_failed_login_rec'){ //Delete link was clicked for a row in list table
|
234 |
-
$failed_login_list->delete_login_failed_records(strip_tags($_REQUEST['failed_login_id']));
|
235 |
-
}
|
236 |
-
}
|
237 |
-
?>
|
238 |
-
<div class="aio_blue_box">
|
239 |
-
<?php
|
240 |
-
echo '<p>'.__('This tab displays the failed login attempts for your site.', 'aiowpsecurity').'
|
241 |
-
<br />'.__('The information below can be handy if you need to do security investigations because it will show you the IP range, username and ID (if applicable) and the time/date of the failed login attempt.', 'aiowpsecurity').'
|
242 |
-
</p>';
|
243 |
-
?>
|
244 |
-
</div>
|
245 |
-
<div class="postbox">
|
246 |
-
<h3><label for="title"><?php _e('Failed Login Records', 'aiowpsecurity'); ?></label></h3>
|
247 |
-
<div class="inside">
|
248 |
-
<?php
|
249 |
-
//Fetch, prepare, sort, and filter our data...
|
250 |
-
$failed_login_list->prepare_items();
|
251 |
-
//echo "put table of locked entries here";
|
252 |
-
?>
|
253 |
-
<form id="tables-filter" method="get" onSubmit="return confirm('Are you sure you want to perform this bulk operation on the selected entries?');">
|
254 |
-
<!-- For plugins, we also need to ensure that the form posts back to our current page -->
|
255 |
-
<input type="hidden" name="page" value="<?php echo $_REQUEST['page']; ?>" />
|
256 |
-
<input type="hidden" name="tab" value="<?php echo $_REQUEST['tab']; ?>" />
|
257 |
-
<!-- Now we can render the completed list table -->
|
258 |
-
<?php $failed_login_list->display(); ?>
|
259 |
-
</form>
|
260 |
-
</div></div>
|
261 |
-
<?php
|
262 |
-
}
|
263 |
-
|
264 |
-
function render_tab3()
|
265 |
-
{
|
266 |
-
global $aio_wp_security;
|
267 |
-
if(isset($_POST['aiowpsec_save_force_logout_settings']))//Do form submission tasks
|
268 |
-
{
|
269 |
-
$error = '';
|
270 |
-
$nonce=$_REQUEST['_wpnonce'];
|
271 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-force-logout-settings-nonce'))
|
272 |
-
{
|
273 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed on force logout options save!",4);
|
274 |
-
die("Nonce check failed on force logout options save!");
|
275 |
-
}
|
276 |
-
|
277 |
-
$logout_time_period = sanitize_text_field($_POST['aiowps_logout_time_period']);
|
278 |
-
if(!is_numeric($logout_time_period))
|
279 |
-
{
|
280 |
-
$error .= '<br />'.__('You entered a non numeric value for the logout time period field. It has been set to the default value.','aiowpsecurity');
|
281 |
-
$logout_time_period = '1';//Set it to the default value for this field
|
282 |
-
}
|
283 |
-
|
284 |
-
if($error)
|
285 |
-
{
|
286 |
-
$this->show_msg_error(__('Attention!','aiowpsecurity').$error);
|
287 |
-
}
|
288 |
-
|
289 |
-
//Save all the form values to the options
|
290 |
-
$aio_wp_security->configs->set_value('aiowps_logout_time_period',absint($logout_time_period));
|
291 |
-
$aio_wp_security->configs->set_value('aiowps_enable_forced_logout',isset($_POST["aiowps_enable_forced_logout"])?'1':'');
|
292 |
-
$aio_wp_security->configs->save_config();
|
293 |
-
$this->show_msg_settings_updated();
|
294 |
-
}
|
295 |
-
?>
|
296 |
-
<div class="aio_blue_box">
|
297 |
-
<?php
|
298 |
-
echo '<p>'.__('Setting an expiry period for your WP administration session is a simple way to protect against unauthorized access to your site from your computer.', 'aiowpsecurity').'
|
299 |
-
<br />'.__('This feature allows you to specify a time period in minutes after which the admin session will expire and the user will be forced to log back in.', 'aiowpsecurity').'
|
300 |
-
</p>';
|
301 |
-
?>
|
302 |
-
</div>
|
303 |
-
<div class="postbox">
|
304 |
-
<h3><label for="title"><?php _e('Force User Logout Options', 'aiowpsecurity'); ?></label></h3>
|
305 |
-
<div class="inside">
|
306 |
-
<?php
|
307 |
-
//Display security info badge
|
308 |
-
global $aiowps_feature_mgr;
|
309 |
-
$aiowps_feature_mgr->output_feature_details_badge("user-login-force-logout");
|
310 |
-
?>
|
311 |
-
|
312 |
-
<form action="" method="POST">
|
313 |
-
<?php wp_nonce_field('aiowpsec-force-logout-settings-nonce'); ?>
|
314 |
-
<table class="form-table">
|
315 |
-
<tr valign="top">
|
316 |
-
<th scope="row"><?php _e('Enable Force WP User Logout', 'aiowpsecurity')?>:</th>
|
317 |
-
<td>
|
318 |
-
<input name="aiowps_enable_forced_logout" type="checkbox"<?php if($aio_wp_security->configs->get_value('aiowps_enable_forced_logout')=='1') echo ' checked="checked"'; ?> value="1"/>
|
319 |
-
<span class="description"><?php _e('Check this if you want to force a wp user to be logged out after a configured amount of time', 'aiowpsecurity'); ?></span>
|
320 |
-
</td>
|
321 |
-
</tr>
|
322 |
-
<tr valign="top">
|
323 |
-
<th scope="row"><?php _e('Logout the WP User After XX Minutes', 'aiowpsecurity')?>:</th>
|
324 |
-
<td><input size="5" name="aiowps_logout_time_period" value="<?php echo $aio_wp_security->configs->get_value('aiowps_logout_time_period'); ?>" />
|
325 |
-
<span class="description"><?php _e('(Minutes) The user will be forced to log back in after this time period has elapased.', 'aiowpsecurity'); ?></span>
|
326 |
-
</td>
|
327 |
-
</tr>
|
328 |
-
</table>
|
329 |
-
<input type="submit" name="aiowpsec_save_force_logout_settings" value="<?php _e('Save Settings', 'aiowpsecurity')?>" class="button-primary" />
|
330 |
-
</form>
|
331 |
-
</div></div>
|
332 |
-
<?php
|
333 |
-
}
|
334 |
-
|
335 |
-
function render_tab4()
|
336 |
-
{
|
337 |
-
//TODO - needs completing...
|
338 |
-
include_once 'wp-security-list-acct-activity.php'; //For rendering the AIOWPSecurity_List_Table in tab4
|
339 |
-
$acct_activity_list = new AIOWPSecurity_List_Account_Activity(); //For rendering the AIOWPSecurity_List_Table in tab2
|
340 |
-
if(isset($_REQUEST['action'])) //Do row action tasks for list table form for login activity display
|
341 |
-
{
|
342 |
-
if($_REQUEST['action'] == 'delete_acct_activity_rec'){ //Delete link was clicked for a row in list table
|
343 |
-
$acct_activity_list->delete_login_activity_records(strip_tags($_REQUEST['activity_login_rec']));
|
344 |
-
}
|
345 |
-
}
|
346 |
-
?>
|
347 |
-
<div class="aio_blue_box">
|
348 |
-
<?php
|
349 |
-
echo '<p>'.__('This tab displays the login activity for WordPress admin accounts registered with your site.', 'aiowpsecurity').'
|
350 |
-
<br />'.__('The information below can be handy if you need to do security investigations because it will show you the last 50 recent login events by username, IP address and time/date.', 'aiowpsecurity').'
|
351 |
-
</p>';
|
352 |
-
?>
|
353 |
-
</div>
|
354 |
-
<div class="postbox">
|
355 |
-
<h3><label for="title"><?php _e('Account Activity Logs', 'aiowpsecurity'); ?></label></h3>
|
356 |
-
<div class="inside">
|
357 |
-
<?php
|
358 |
-
//Fetch, prepare, sort, and filter our data...
|
359 |
-
$acct_activity_list->prepare_items();
|
360 |
-
//echo "put table of locked entries here";
|
361 |
-
?>
|
362 |
-
<form id="tables-filter" method="get" onSubmit="return confirm('Are you sure you want to perform this bulk operation on the selected entries?');">
|
363 |
-
<!-- For plugins, we also need to ensure that the form posts back to our current page -->
|
364 |
-
<input type="hidden" name="page" value="<?php echo $_REQUEST['page']; ?>" />
|
365 |
-
<input type="hidden" name="tab" value="<?php echo $_REQUEST['tab']; ?>" />
|
366 |
-
<!-- Now we can render the completed list table -->
|
367 |
-
<?php $acct_activity_list->display(); ?>
|
368 |
-
</form>
|
369 |
-
</div></div>
|
370 |
-
<?php
|
371 |
-
}
|
372 |
-
|
373 |
-
|
374 |
-
/*
|
375 |
-
* This function will unlock an IP range by modifying the "release_date" column of a record in the "login_lockdown" table
|
376 |
-
*/
|
377 |
-
function unlock_ip_range($entries)
|
378 |
-
{
|
379 |
-
global $wpdb, $aio_wp_security;
|
380 |
-
$lockdown_table = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
381 |
-
if (is_array($entries))
|
382 |
-
{
|
383 |
-
//Unlock multiple records
|
384 |
-
$id_list = "(" .implode(",",$entries) .")"; //Create comma separate list for DB operation
|
385 |
-
$unlock_command = "UPDATE ".$lockdown_table." SET release_date = now() WHERE ID IN ".$id_list;
|
386 |
-
$result = $wpdb->query($unlock_command);
|
387 |
-
if($result != NULL)
|
388 |
-
{
|
389 |
-
$this->show_msg_updated(__('The selected IP ranges were unlocked successfully!','aiowpsecurity'));
|
390 |
-
}
|
391 |
-
} elseif ($entries != NULL)
|
392 |
-
{
|
393 |
-
//Delete single record
|
394 |
-
$unlock_command = "UPDATE ".$lockdown_table." SET release_date = now() WHERE ID = '".absint($entries)."'";
|
395 |
-
$result = $wpdb->query($unlock_command);
|
396 |
-
if($result != NULL)
|
397 |
-
{
|
398 |
-
$this->show_msg_updated(__('The selected IP range was unlocked successfully!','aiowpsecurity'));
|
399 |
-
}
|
400 |
-
}
|
401 |
-
//$aio_wp_security->debug_logger->log_debug("IP range unlocked from login_lockdown table - lockdown ID: ".$lockdown_id,0);
|
402 |
-
}
|
403 |
-
|
404 |
-
/*
|
405 |
-
* This function will delete selected records from the "login_lockdown" table.
|
406 |
-
* The function accepts either an array of IDs or a single ID
|
407 |
-
*/
|
408 |
-
function delete_lockdown_records($entries)
|
409 |
-
{
|
410 |
-
global $wpdb, $aio_wp_security;
|
411 |
-
$lockdown_table = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
412 |
-
if (is_array($entries))
|
413 |
-
{
|
414 |
-
//Delete multiple records
|
415 |
-
$id_list = "(" .implode(",",$entries) .")"; //Create comma separate list for DB operation
|
416 |
-
$delete_command = "DELETE FROM ".$lockdown_table." WHERE ID IN ".$id_list;
|
417 |
-
$result = $wpdb->query($delete_command);
|
418 |
-
if($result != NULL)
|
419 |
-
{
|
420 |
-
$this->show_msg_updated(__('The selected records were deleted successfully!','aiowpsecurity'));
|
421 |
-
}
|
422 |
-
} elseif ($entries != NULL)
|
423 |
-
{
|
424 |
-
//Delete single record
|
425 |
-
$delete_command = "DELETE FROM ".$lockdown_table." WHERE ID = '".absint($entries)."'";
|
426 |
-
$result = $wpdb->query($delete_command);
|
427 |
-
if($result != NULL)
|
428 |
-
{
|
429 |
-
$this->show_msg_updated(__('The selected record was deleted successfully!','aiowpsecurity'));
|
430 |
-
}
|
431 |
-
//$aio_wp_security->debug_logger->log_debug("Record deleted from login_lockdown table - lockdown ID: ".$entries,0);
|
432 |
-
}
|
433 |
-
}
|
434 |
-
|
435 |
-
} //end class
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/admin/wp-security-whois-menu.php
DELETED
@@ -1,126 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_WhoIs_Menu extends AIOWPSecurity_Admin_Menu
|
4 |
-
{
|
5 |
-
var $menu_page_slug = AIOWPSEC_WHOIS_MENU_SLUG;
|
6 |
-
|
7 |
-
/* Specify all the tabs of this menu in the following array */
|
8 |
-
var $menu_tabs = array(
|
9 |
-
'tab1' => 'WhoIS Lookup',
|
10 |
-
);
|
11 |
-
|
12 |
-
var $menu_tabs_handler = array(
|
13 |
-
'tab1' => 'render_tab1',
|
14 |
-
);
|
15 |
-
|
16 |
-
function __construct()
|
17 |
-
{
|
18 |
-
$this->render_menu_page();
|
19 |
-
}
|
20 |
-
|
21 |
-
function get_current_tab()
|
22 |
-
{
|
23 |
-
$tab_keys = array_keys($this->menu_tabs);
|
24 |
-
$tab = isset( $_GET['tab'] ) ? $_GET['tab'] : $tab_keys[0];
|
25 |
-
return $tab;
|
26 |
-
}
|
27 |
-
|
28 |
-
/*
|
29 |
-
* Renders our tabs of this menu as nav items
|
30 |
-
*/
|
31 |
-
function render_menu_tabs()
|
32 |
-
{
|
33 |
-
$current_tab = $this->get_current_tab();
|
34 |
-
|
35 |
-
echo '<h2 class="nav-tab-wrapper">';
|
36 |
-
foreach ( $this->menu_tabs as $tab_key => $tab_caption )
|
37 |
-
{
|
38 |
-
$active = $current_tab == $tab_key ? 'nav-tab-active' : '';
|
39 |
-
echo '<a class="nav-tab ' . $active . '" href="?page=' . $this->menu_page_slug . '&tab=' . $tab_key . '">' . $tab_caption . '</a>';
|
40 |
-
}
|
41 |
-
echo '</h2>';
|
42 |
-
}
|
43 |
-
|
44 |
-
/*
|
45 |
-
* The menu rendering goes here
|
46 |
-
*/
|
47 |
-
function render_menu_page()
|
48 |
-
{
|
49 |
-
$tab = $this->get_current_tab();
|
50 |
-
?>
|
51 |
-
<div class="wrap">
|
52 |
-
<div id="poststuff"><div id="post-body">
|
53 |
-
<?php
|
54 |
-
$this->render_menu_tabs();
|
55 |
-
//$tab_keys = array_keys($this->menu_tabs);
|
56 |
-
call_user_func(array(&$this, $this->menu_tabs_handler[$tab]));
|
57 |
-
?>
|
58 |
-
</div></div>
|
59 |
-
</div><!-- end of wrap -->
|
60 |
-
<?php
|
61 |
-
}
|
62 |
-
|
63 |
-
function render_tab1()
|
64 |
-
{
|
65 |
-
global $aio_wp_security;
|
66 |
-
|
67 |
-
?>
|
68 |
-
<h2><?php _e('WHOIS Lookup Information', 'aiowpsecurity')?></h2>
|
69 |
-
<div class="aio_blue_box">
|
70 |
-
<?php
|
71 |
-
echo '<p>'.__('This feature allows you to look up more detailed information about an IP address or domain name by querying the WHOIS API.', 'aiowpsecurity').'
|
72 |
-
</p>';
|
73 |
-
?>
|
74 |
-
</div>
|
75 |
-
|
76 |
-
<div class="postbox">
|
77 |
-
<h3><label for="title"><?php _e('Perform a WHOIS Lookup for an IP or Domain Name', 'aiowpsecurity'); ?></label></h3>
|
78 |
-
<div class="inside">
|
79 |
-
<p>Please click the button below to view the latest system logs:</p>
|
80 |
-
<form action="" method="POST">
|
81 |
-
<?php wp_nonce_field('aiowpsec-whois-lookup-nonce'); ?>
|
82 |
-
<table class="form-table">
|
83 |
-
<tr valign="top">
|
84 |
-
<th scope="row"><?php _e('Enter IP Address or Domain Name', 'aiowpsecurity')?>:</th>
|
85 |
-
<td><input size="20" name="aiowps_whois_lookup_field" value="<?php //echo $aio_wp_security->configs->get_value('aiowps_whois_lookup_field'); ?>" />
|
86 |
-
<span class="description"><?php _e('Enter an IP address or domain name. Example: 111.11.12.13 OR some-domain-name.com', 'aiowpsecurity'); ?></span>
|
87 |
-
</td>
|
88 |
-
</tr>
|
89 |
-
</table>
|
90 |
-
<input type="submit" name="aiowps_whois_lookup" value="<?php _e('Perform IP or Domain Lookup', 'aiowpsecurity')?>" class="button-primary ip-domain-lookup" />
|
91 |
-
</form>
|
92 |
-
</div></div>
|
93 |
-
<?php
|
94 |
-
if (isset($_POST['aiowps_whois_lookup']))
|
95 |
-
{
|
96 |
-
$nonce=$_REQUEST['_wpnonce'];
|
97 |
-
if (!wp_verify_nonce($nonce, 'aiowpsec-whois-lookup-nonce'))
|
98 |
-
{
|
99 |
-
$aio_wp_security->debug_logger->log_debug("Nonce check failed on WHOIS lookup!",4);
|
100 |
-
die("Nonce check failed on WHOIS lookup!");
|
101 |
-
}
|
102 |
-
|
103 |
-
require_once(AIO_WP_SECURITY_LIB_PATH.'/whois/whois.main.php');
|
104 |
-
require_once(AIO_WP_SECURITY_LIB_PATH.'/whois/whois.utils.php');
|
105 |
-
$input_val = trim($_POST['aiowps_whois_lookup_field']);
|
106 |
-
if (filter_var($input_val, FILTER_VALIDATE_IP) || filter_var(gethostbyname($input_val), FILTER_VALIDATE_IP))
|
107 |
-
{
|
108 |
-
//$info_msg_string = '<p class="aio_info_with_icon">'.sprintf( __('WHOIS lookup successfully completed. Please see the results below:', 'aiowpsecurity')).'</p>';
|
109 |
-
//echo ($info_msg_string);
|
110 |
-
$this->show_msg_updated(__('WHOIS lookup successfully completed. Please see the results below:', 'aiowpsecurity'));
|
111 |
-
$whois = new Whois();
|
112 |
-
$result = $whois->Lookup($input_val);
|
113 |
-
if (!empty($result['rawdata']))
|
114 |
-
{
|
115 |
-
$utils = new utils;
|
116 |
-
$winfo = $utils->showHTML($result);
|
117 |
-
echo $winfo;
|
118 |
-
}
|
119 |
-
}
|
120 |
-
else
|
121 |
-
{
|
122 |
-
$this->show_msg_error(__('You have entered an incorrectly formatted IP address or domain name. Please try again.','aiowpsecurity'));
|
123 |
-
}
|
124 |
-
}
|
125 |
-
}
|
126 |
-
} //end class
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/classes/grade-system/wp-security-feature-item-manager.php
DELETED
@@ -1,388 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_Feature_Item_Manager
|
4 |
-
{
|
5 |
-
var $feature_items;
|
6 |
-
var $total_points = 0;
|
7 |
-
var $total_achievable_points = 0;
|
8 |
-
|
9 |
-
var $feature_point_1 = "5";
|
10 |
-
var $feature_point_2 = "10";
|
11 |
-
var $feature_point_3 = "15";
|
12 |
-
var $feature_point_4 = "20";
|
13 |
-
var $sec_level_basic = "1";
|
14 |
-
var $sec_level_inter = "2";
|
15 |
-
var $sec_level_advanced = "3";
|
16 |
-
var $feature_active = "active";
|
17 |
-
var $feature_inactive = "inactive";
|
18 |
-
var $feature_partial = "partial";
|
19 |
-
|
20 |
-
function __construct(){
|
21 |
-
|
22 |
-
}
|
23 |
-
|
24 |
-
function initialize_features()
|
25 |
-
{
|
26 |
-
$this->feature_items = array();
|
27 |
-
|
28 |
-
//User Accounts Menu Features
|
29 |
-
//Change Admin Username
|
30 |
-
$this->feature_items[] = new AIOWPSecurity_Feature_Item("user-accounts-change-admin-user", "Change Admin Username", $this->feature_point_3, $this->sec_level_basic);
|
31 |
-
//Change Display Name
|
32 |
-
$this->feature_items[] = new AIOWPSecurity_Feature_Item("user-accounts-display-name", "Change Display Name", $this->feature_point_1, $this->sec_level_basic);
|
33 |
-
|
34 |
-
//User Login Menu Features
|
35 |
-
//Locking Lockdown
|
36 |
-
$this->feature_items[] = new AIOWPSecurity_Feature_Item("user-login-login-lockdown", "Login Lockdown", $this->feature_point_4, $this->sec_level_basic);
|
37 |
-
//Force Logout
|
38 |
-
$this->feature_items[] = new AIOWPSecurity_Feature_Item("user-login-force-logout", "Force Logout", $this->feature_point_1, $this->sec_level_basic);
|
39 |
-
|
40 |
-
//Database Security Menu Features
|
41 |
-
//DB Prefix
|
42 |
-
$this->feature_items[] = new AIOWPSecurity_Feature_Item("db-security-db-prefix", "DB Prefix", $this->feature_point_2, $this->sec_level_inter);
|
43 |
-
//DB Backup
|
44 |
-
$this->feature_items[] = new AIOWPSecurity_Feature_Item("db-security-db-backup", "DB Backup", $this->feature_point_4, $this->sec_level_basic);
|
45 |
-
|
46 |
-
//File System Security Menu Features
|
47 |
-
//File Permissions
|
48 |
-
$this->feature_items[] = new AIOWPSecurity_Feature_Item("filesystem-file-permissions", "File Permissions", $this->feature_point_4, $this->sec_level_basic);
|
49 |
-
//PHP File Editing
|
50 |
-
$this->feature_items[] = new AIOWPSecurity_Feature_Item("filesystem-file-editing", "File Editing", $this->feature_point_2, $this->sec_level_basic);
|
51 |
-
|
52 |
-
//Blacklist Manager Menu Features
|
53 |
-
//IP and user agent blacklisting
|
54 |
-
$this->feature_items[] = new AIOWPSecurity_Feature_Item("blacklist-manager-ip-user-agent-blacklisting", "IP and User Agent Blacklisting", $this->feature_point_3, $this->sec_level_inter);
|
55 |
-
|
56 |
-
//Firewall Menu Features
|
57 |
-
//Basic firewall
|
58 |
-
$this->feature_items[] = new AIOWPSecurity_Feature_Item("firewall-basic-rules", "Enable Basic Firewall", $this->feature_point_3, $this->sec_level_basic);
|
59 |
-
//Advanced firewall
|
60 |
-
$this->feature_items[] = new AIOWPSecurity_Feature_Item("firewall-disable-trace-track", "Disable Trace and Track", $this->feature_point_2, $this->sec_level_advanced);
|
61 |
-
$this->feature_items[] = new AIOWPSecurity_Feature_Item("firewall-forbid-proxy-comments", "Forbid Proxy Comments", $this->feature_point_2, $this->sec_level_advanced);
|
62 |
-
$this->feature_items[] = new AIOWPSecurity_Feature_Item("firewall-deny-bad-queries", "Deny Bad Queries", $this->feature_point_3, $this->sec_level_advanced);
|
63 |
-
$this->feature_items[] = new AIOWPSecurity_Feature_Item("firewall-advanced-character-string-filter", "Advanced Character String Filter", $this->feature_point_3, $this->sec_level_advanced);
|
64 |
-
$this->feature_items[] = new AIOWPSecurity_Feature_Item("firewall-enable-5g-blacklist", "5G Blacklist", $this->feature_point_4, $this->sec_level_advanced);
|
65 |
-
|
66 |
-
}
|
67 |
-
|
68 |
-
function get_feature_item_by_id($feature_id)
|
69 |
-
{
|
70 |
-
foreach($this->feature_items as $item)
|
71 |
-
{
|
72 |
-
if($item->feature_id == $feature_id)
|
73 |
-
{
|
74 |
-
return $item;
|
75 |
-
}
|
76 |
-
}
|
77 |
-
return "";
|
78 |
-
}
|
79 |
-
|
80 |
-
function output_feature_details_badge($feature_id)
|
81 |
-
{
|
82 |
-
$cau_feature_item = $this->get_feature_item_by_id($feature_id);
|
83 |
-
$cau_security_level = $cau_feature_item->security_level;
|
84 |
-
$cau_security_points = $cau_feature_item->item_points;
|
85 |
-
$cau_your_points = 0;
|
86 |
-
if($cau_feature_item->feature_status == $this->feature_active){
|
87 |
-
$cau_your_points = $cau_security_points;
|
88 |
-
}
|
89 |
-
$level_str = $cau_feature_item->get_security_level_string($cau_security_level);
|
90 |
-
?>
|
91 |
-
<div class="aiowps_feature_details_badge">
|
92 |
-
<div class="aiowps_feature_details_badge_difficulty" title="Feature Difficulty">
|
93 |
-
<span class="aiowps_feature_details_badge_difficulty_text"><?php _e($level_str, 'aiowpsecurity'); ?></span>
|
94 |
-
</div>
|
95 |
-
<div class="aiowps_feature_details_badge_points" title="Security Points">
|
96 |
-
<span class="aiowps_feature_details_badge_points_text"><?php echo $cau_your_points .'/'. $cau_security_points; ?></span>
|
97 |
-
</div>
|
98 |
-
</div>
|
99 |
-
<?php
|
100 |
-
}
|
101 |
-
|
102 |
-
function check_and_set_feature_status()
|
103 |
-
{
|
104 |
-
foreach($this->feature_items as $item)
|
105 |
-
{
|
106 |
-
if($item->feature_id == "user-accounts-change-admin-user")
|
107 |
-
{
|
108 |
-
$this->check_user_accounts_change_admin_user_feature($item);
|
109 |
-
}
|
110 |
-
if($item->feature_id == "user-accounts-display-name")
|
111 |
-
{
|
112 |
-
$this->check_user_accounts_display_name_feature($item);
|
113 |
-
}
|
114 |
-
|
115 |
-
if($item->feature_id == "db-security-db-prefix")
|
116 |
-
{
|
117 |
-
$this->check_db_security_db_prefix_feature($item);
|
118 |
-
}
|
119 |
-
if($item->feature_id == "db-security-db-backup")
|
120 |
-
{
|
121 |
-
$this->check_db_security_db_backup_feature($item);
|
122 |
-
}
|
123 |
-
|
124 |
-
if($item->feature_id == "user-login-login-lockdown")
|
125 |
-
{
|
126 |
-
$this->check_login_lockdown_feature($item);
|
127 |
-
}
|
128 |
-
if($item->feature_id == "user-login-force-logout")
|
129 |
-
{
|
130 |
-
$this->check_force_logout_feature($item);
|
131 |
-
}
|
132 |
-
|
133 |
-
if($item->feature_id == "filesystem-file-permissions")
|
134 |
-
{
|
135 |
-
$this->check_filesystem_permissions_feature($item);
|
136 |
-
}
|
137 |
-
if($item->feature_id == "filesystem-file-editing")
|
138 |
-
{
|
139 |
-
$this->check_filesystem_file_editing_feature($item);
|
140 |
-
}
|
141 |
-
|
142 |
-
if($item->feature_id == "blacklist-manager-ip-user-agent-blacklisting")
|
143 |
-
{
|
144 |
-
$this->check_enable_ip_useragent_blacklist_feature($item);
|
145 |
-
}
|
146 |
-
|
147 |
-
if($item->feature_id == "firewall-basic-rules")
|
148 |
-
{
|
149 |
-
$this->check_enable_basic_firewall_feature($item);
|
150 |
-
}
|
151 |
-
if($item->feature_id == "firewall-disable-trace-track")
|
152 |
-
{
|
153 |
-
$this->check_disable_trace_track_firewall_feature($item);
|
154 |
-
}
|
155 |
-
if($item->feature_id == "firewall-forbid-proxy-comments")
|
156 |
-
{
|
157 |
-
$this->check_forbid_proxy_comments_firewall_feature($item);
|
158 |
-
}
|
159 |
-
if($item->feature_id == "firewall-deny-bad-queries")
|
160 |
-
{
|
161 |
-
$this->check_deny_bad_queries_firewall_feature($item);
|
162 |
-
}
|
163 |
-
if($item->feature_id == "firewall-advanced-character-string-filter")
|
164 |
-
{
|
165 |
-
$this->check_advanced_char_string_filter_firewall_feature($item);
|
166 |
-
}
|
167 |
-
if($item->feature_id == "firewall-enable-5g-blacklist")
|
168 |
-
{
|
169 |
-
$this->check_enable_5G_blacklist_firewall_feature($item);
|
170 |
-
}
|
171 |
-
|
172 |
-
}
|
173 |
-
}
|
174 |
-
|
175 |
-
function calculate_total_points()
|
176 |
-
{
|
177 |
-
foreach($this->feature_items as $item)
|
178 |
-
{
|
179 |
-
if($item->feature_status == "active")
|
180 |
-
{
|
181 |
-
$this->total_points = $this->total_points + intval($item->item_points);
|
182 |
-
}
|
183 |
-
}
|
184 |
-
}
|
185 |
-
|
186 |
-
function get_total_site_points()
|
187 |
-
{
|
188 |
-
return $this->total_points;
|
189 |
-
}
|
190 |
-
|
191 |
-
function get_total_achievable_points()
|
192 |
-
{
|
193 |
-
foreach($this->feature_items as $item)
|
194 |
-
{
|
195 |
-
$this->total_achievable_points = $this->total_achievable_points + intval($item->item_points);
|
196 |
-
}
|
197 |
-
return $this->total_achievable_points;
|
198 |
-
}
|
199 |
-
|
200 |
-
function check_user_accounts_change_admin_user_feature($item)
|
201 |
-
{
|
202 |
-
if (AIOWPSecurity_Utility::check_user_exists('admin')) {
|
203 |
-
$item->set_feature_status($this->feature_inactive);
|
204 |
-
}
|
205 |
-
else
|
206 |
-
{
|
207 |
-
$item->set_feature_status($this->feature_active);
|
208 |
-
}
|
209 |
-
}
|
210 |
-
|
211 |
-
function check_user_accounts_display_name_feature($item)
|
212 |
-
{
|
213 |
-
if (AIOWPSecurity_Utility::check_identical_login_and_nick_names()) {
|
214 |
-
$item->set_feature_status($this->feature_inactive);
|
215 |
-
}
|
216 |
-
else
|
217 |
-
{
|
218 |
-
$item->set_feature_status($this->feature_active);
|
219 |
-
}
|
220 |
-
}
|
221 |
-
|
222 |
-
function check_login_lockdown_feature($item)
|
223 |
-
{
|
224 |
-
global $aio_wp_security;
|
225 |
-
if ($aio_wp_security->configs->get_value('aiowps_enable_login_lockdown') == '1') {
|
226 |
-
$item->set_feature_status($this->feature_active);
|
227 |
-
}
|
228 |
-
else
|
229 |
-
{
|
230 |
-
$item->set_feature_status($this->feature_inactive);
|
231 |
-
}
|
232 |
-
}
|
233 |
-
|
234 |
-
function check_force_logout_feature($item)
|
235 |
-
{
|
236 |
-
global $aio_wp_security;
|
237 |
-
if ($aio_wp_security->configs->get_value('aiowps_enable_forced_logout') == '1') {
|
238 |
-
$item->set_feature_status($this->feature_active);
|
239 |
-
}
|
240 |
-
else
|
241 |
-
{
|
242 |
-
$item->set_feature_status($this->feature_inactive);
|
243 |
-
}
|
244 |
-
}
|
245 |
-
|
246 |
-
function check_db_security_db_prefix_feature($item)
|
247 |
-
{
|
248 |
-
global $wpdb;
|
249 |
-
if ($wpdb->prefix == 'wp_') {
|
250 |
-
$item->set_feature_status($this->feature_inactive);
|
251 |
-
}
|
252 |
-
else
|
253 |
-
{
|
254 |
-
$item->set_feature_status($this->feature_active);
|
255 |
-
}
|
256 |
-
}
|
257 |
-
|
258 |
-
function check_db_security_db_backup_feature($item)
|
259 |
-
{
|
260 |
-
global $aio_wp_security;
|
261 |
-
if ($aio_wp_security->configs->get_value('aiowps_enable_automated_backups') == '1') {
|
262 |
-
$item->set_feature_status($this->feature_active);
|
263 |
-
}
|
264 |
-
else
|
265 |
-
{
|
266 |
-
$item->set_feature_status($this->feature_inactive);
|
267 |
-
}
|
268 |
-
}
|
269 |
-
|
270 |
-
function check_filesystem_permissions_feature($item)
|
271 |
-
{
|
272 |
-
//TODO
|
273 |
-
$is_secure = 1;
|
274 |
-
$util = new AIOWPSecurity_Utility_File;
|
275 |
-
$files_dirs_to_check = $util->files_and_dirs_to_check;
|
276 |
-
foreach ($files_dirs_to_check as $file_or_dir)
|
277 |
-
{
|
278 |
-
$actual_perm = AIOWPSecurity_Utility_File::get_file_permission($file_or_dir['path']);
|
279 |
-
$is_secure = $is_secure*AIOWPSecurity_Utility_File::is_file_permission_secure($file_or_dir['permissions'], $actual_perm);
|
280 |
-
}
|
281 |
-
|
282 |
-
//Only if all of the files' permissions are deemed secure give this a thumbs up
|
283 |
-
if ($is_secure == 1)
|
284 |
-
{
|
285 |
-
$item->set_feature_status($this->feature_active);
|
286 |
-
}
|
287 |
-
else
|
288 |
-
{
|
289 |
-
$item->set_feature_status($this->feature_inactive);
|
290 |
-
}
|
291 |
-
}
|
292 |
-
|
293 |
-
function check_filesystem_file_editing_feature($item)
|
294 |
-
{
|
295 |
-
global $aio_wp_security;
|
296 |
-
if ($aio_wp_security->configs->get_value('aiowps_disable_file_editing') == '1') {
|
297 |
-
$item->set_feature_status($this->feature_active);
|
298 |
-
}
|
299 |
-
else
|
300 |
-
{
|
301 |
-
$item->set_feature_status($this->feature_inactive);
|
302 |
-
}
|
303 |
-
}
|
304 |
-
|
305 |
-
function check_enable_ip_useragent_blacklist_feature($item)
|
306 |
-
{
|
307 |
-
global $aio_wp_security;
|
308 |
-
if ($aio_wp_security->configs->get_value('aiowps_enable_blacklisting') == '1') {
|
309 |
-
$item->set_feature_status($this->feature_active);
|
310 |
-
}
|
311 |
-
else
|
312 |
-
{
|
313 |
-
$item->set_feature_status($this->feature_inactive);
|
314 |
-
}
|
315 |
-
}
|
316 |
-
|
317 |
-
function check_enable_basic_firewall_feature($item)
|
318 |
-
{
|
319 |
-
global $aio_wp_security;
|
320 |
-
if ($aio_wp_security->configs->get_value('aiowps_enable_basic_firewall') == '1') {
|
321 |
-
$item->set_feature_status($this->feature_active);
|
322 |
-
}
|
323 |
-
else
|
324 |
-
{
|
325 |
-
$item->set_feature_status($this->feature_inactive);
|
326 |
-
}
|
327 |
-
}
|
328 |
-
|
329 |
-
function check_disable_trace_track_firewall_feature($item)
|
330 |
-
{
|
331 |
-
global $aio_wp_security;
|
332 |
-
if ($aio_wp_security->configs->get_value('aiowps_disable_trace_and_track') == '1') {
|
333 |
-
$item->set_feature_status($this->feature_active);
|
334 |
-
}
|
335 |
-
else
|
336 |
-
{
|
337 |
-
$item->set_feature_status($this->feature_inactive);
|
338 |
-
}
|
339 |
-
}
|
340 |
-
function check_forbid_proxy_comments_firewall_feature($item)
|
341 |
-
{
|
342 |
-
global $aio_wp_security;
|
343 |
-
if ($aio_wp_security->configs->get_value('aiowps_forbid_proxy_comments') == '1') {
|
344 |
-
$item->set_feature_status($this->feature_active);
|
345 |
-
}
|
346 |
-
else
|
347 |
-
{
|
348 |
-
$item->set_feature_status($this->feature_inactive);
|
349 |
-
}
|
350 |
-
}
|
351 |
-
|
352 |
-
function check_deny_bad_queries_firewall_feature($item)
|
353 |
-
{
|
354 |
-
global $aio_wp_security;
|
355 |
-
if ($aio_wp_security->configs->get_value('aiowps_deny_bad_query_strings') == '1') {
|
356 |
-
$item->set_feature_status($this->feature_active);
|
357 |
-
}
|
358 |
-
else
|
359 |
-
{
|
360 |
-
$item->set_feature_status($this->feature_inactive);
|
361 |
-
}
|
362 |
-
}
|
363 |
-
|
364 |
-
function check_advanced_char_string_filter_firewall_feature($item)
|
365 |
-
{
|
366 |
-
global $aio_wp_security;
|
367 |
-
if ($aio_wp_security->configs->get_value('aiowps_advanced_char_string_filter') == '1') {
|
368 |
-
$item->set_feature_status($this->feature_active);
|
369 |
-
}
|
370 |
-
else
|
371 |
-
{
|
372 |
-
$item->set_feature_status($this->feature_inactive);
|
373 |
-
}
|
374 |
-
}
|
375 |
-
|
376 |
-
function check_enable_5G_blacklist_firewall_feature($item)
|
377 |
-
{
|
378 |
-
global $aio_wp_security;
|
379 |
-
if ($aio_wp_security->configs->get_value('aiowps_enable_5g_firewall') == '1') {
|
380 |
-
$item->set_feature_status($this->feature_active);
|
381 |
-
}
|
382 |
-
else
|
383 |
-
{
|
384 |
-
$item->set_feature_status($this->feature_inactive);
|
385 |
-
}
|
386 |
-
}
|
387 |
-
|
388 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/classes/grade-system/wp-security-feature-item.php
DELETED
@@ -1,40 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_Feature_Item
|
4 |
-
{
|
5 |
-
var $feature_id;//Example "user-accounts-tab1-change-admin-user"
|
6 |
-
var $feature_name;
|
7 |
-
var $item_points;
|
8 |
-
var $security_level;//1, 2 or 3
|
9 |
-
|
10 |
-
var $feature_status;//active, inactive, partial
|
11 |
-
|
12 |
-
function __construct($feature_id,$feature_name,$item_points,$security_level){
|
13 |
-
$this->feature_id = $feature_id;
|
14 |
-
$this->feature_name = $feature_name;
|
15 |
-
$this->item_points = $item_points;
|
16 |
-
$this->security_level = $security_level;
|
17 |
-
}
|
18 |
-
|
19 |
-
function set_feature_status($status)
|
20 |
-
{
|
21 |
-
$this->feature_status = $status;
|
22 |
-
}
|
23 |
-
|
24 |
-
function get_security_level_string($level)
|
25 |
-
{
|
26 |
-
$level_string = "";
|
27 |
-
if($level == "1"){
|
28 |
-
$level_string = "Basic";
|
29 |
-
}
|
30 |
-
else if($level == "2"){
|
31 |
-
$level_string = "Intermediate";
|
32 |
-
}
|
33 |
-
else if($level == "3"){
|
34 |
-
$level_string = "Advanced";
|
35 |
-
}
|
36 |
-
return $level_string;
|
37 |
-
}
|
38 |
-
|
39 |
-
}
|
40 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/classes/wp-security-backup.php
DELETED
@@ -1,191 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
class AIOWPSecurity_Backup
|
3 |
-
{
|
4 |
-
var $last_backup_file_name;//Stores the name of the last backup file when execute_backup function is called
|
5 |
-
var $last_backup_file_path;
|
6 |
-
|
7 |
-
function __construct()
|
8 |
-
{
|
9 |
-
add_action('aiowps_perform_scheduled_backup_tasks', array(&$this, 'aiowps_scheduled_backup_handler')); //TODO - this action never gets fired - need to investigate
|
10 |
-
}
|
11 |
-
|
12 |
-
/**
|
13 |
-
* This function will perform a database backup
|
14 |
-
*/
|
15 |
-
function execute_backup()
|
16 |
-
{
|
17 |
-
global $wpdb, $aio_wp_security;
|
18 |
-
|
19 |
-
@ini_set( 'auto_detect_line_endings', true );
|
20 |
-
|
21 |
-
//get all of the tables
|
22 |
-
$tables = $wpdb->get_results( 'SHOW TABLES', ARRAY_N );
|
23 |
-
$return = '';
|
24 |
-
|
25 |
-
//cycle through each table
|
26 |
-
foreach($tables as $table)
|
27 |
-
{
|
28 |
-
$result = $wpdb->get_results( 'SELECT * FROM `' . $table[0] . '`;', ARRAY_N );
|
29 |
-
$num_fields = sizeof( $wpdb->get_results( 'DESCRIBE `' . $table[0] . '`;' ) );
|
30 |
-
|
31 |
-
$return.= 'DROP TABLE IF EXISTS `' . $table[0] . '`;';
|
32 |
-
$row2 = $wpdb->get_row( 'SHOW CREATE TABLE `' . $table[0] . '`;', ARRAY_N );
|
33 |
-
$return.= PHP_EOL . PHP_EOL . $row2[1] . ";" . PHP_EOL . PHP_EOL;
|
34 |
-
|
35 |
-
foreach( $result as $row )
|
36 |
-
{
|
37 |
-
$return .= 'INSERT INTO `' . $table[0] . '` VALUES(';
|
38 |
-
|
39 |
-
for( $j=0; $j < $num_fields; $j++ ) {
|
40 |
-
|
41 |
-
$row[$j] = addslashes( $row[$j] );
|
42 |
-
$row[$j] = ereg_replace( PHP_EOL, "\n", $row[$j] );
|
43 |
-
|
44 |
-
if ( isset( $row[$j] ) ) {
|
45 |
-
$return .= '"' . $row[$j] . '"' ;
|
46 |
-
} else {
|
47 |
-
$return.= '""';
|
48 |
-
}
|
49 |
-
|
50 |
-
if ( $j < ( $num_fields - 1 ) ) {
|
51 |
-
$return .= ',';
|
52 |
-
}
|
53 |
-
|
54 |
-
}
|
55 |
-
$return .= ");" . PHP_EOL;
|
56 |
-
}
|
57 |
-
$return .= PHP_EOL . PHP_EOL;
|
58 |
-
}
|
59 |
-
$return .= PHP_EOL . PHP_EOL;
|
60 |
-
|
61 |
-
//save file
|
62 |
-
$file = 'database-backup-' . current_time( 'timestamp' );
|
63 |
-
$handle = @fopen( AIO_WP_SECURITY_BACKUPS_PATH . '/' . $file . '.sql', 'w+' );
|
64 |
-
$fw_res = @fwrite( $handle, $return );
|
65 |
-
if (!$fw_res)
|
66 |
-
{
|
67 |
-
return false;
|
68 |
-
}
|
69 |
-
@fclose( $handle );
|
70 |
-
|
71 |
-
//zip the file
|
72 |
-
if ( class_exists( 'ZipArchive' ) )
|
73 |
-
{
|
74 |
-
$zip = new ZipArchive();
|
75 |
-
$archive = $zip->open(AIO_WP_SECURITY_BACKUPS_PATH . '/' . $file . '.zip', ZipArchive::CREATE);
|
76 |
-
$zip->addFile(AIO_WP_SECURITY_BACKUPS_PATH . '/' . $file . '.sql', $file . '.sql' );
|
77 |
-
$zip->close();
|
78 |
-
|
79 |
-
//delete .sql and keep zip
|
80 |
-
@unlink( AIO_WP_SECURITY_BACKUPS_PATH . '/' . $file . '.sql' );
|
81 |
-
$fileext = '.zip';
|
82 |
-
} else
|
83 |
-
{
|
84 |
-
$fileext = '.sql';
|
85 |
-
}
|
86 |
-
$this->last_backup_file_name = $file . $fileext;//database-backup-1367644822.zip or database-backup-1367644822.sql
|
87 |
-
$this->last_backup_file_path = AIO_WP_SECURITY_BACKUPS_PATH. '/' . $file . $fileext;
|
88 |
-
|
89 |
-
$this->aiowps_send_backup_email(); //Send backup file via email if applicable
|
90 |
-
$this->aiowps_delete_backup_files();
|
91 |
-
return true;
|
92 |
-
}
|
93 |
-
|
94 |
-
function aiowps_send_backup_email()
|
95 |
-
{
|
96 |
-
global $aio_wp_security;
|
97 |
-
if ( $aio_wp_security->configs->get_value('aiowps_send_backup_email_address') == '1' )
|
98 |
-
{
|
99 |
-
//Get the right email address.
|
100 |
-
if ( is_email( $aio_wp_security->configs->get_value('aiowps_send_backup_email_address') ) )
|
101 |
-
{
|
102 |
-
$toaddress = $aio_wp_security->configs->get_value('aiowps_send_backup_email_address');
|
103 |
-
} else
|
104 |
-
{
|
105 |
-
$toaddress = get_site_option( 'admin_email' );
|
106 |
-
}
|
107 |
-
|
108 |
-
$to = $toaddress;
|
109 |
-
$headers = 'From: ' . get_option( 'blogname' ) . ' <' . $to . '>' . PHP_EOL;
|
110 |
-
$subject = __( 'All In One WP Security - Site Database Backup', 'aiowpsecurity' ) . ' ' . date( 'l, F jS, Y \a\\t g:i a', current_time( 'timestamp' ) );
|
111 |
-
$attachment = array( $this->last_backup_file_path );
|
112 |
-
$message = __( 'Attached is your latest DB backup file for site URL', 'aiowpsecurity' ) . ' ' . get_option( 'siteurl' ) . __( ' generated on', 'aiowpsecurity' ) . ' ' . date( 'l, F jS, Y \a\\t g:i a', current_time( 'timestamp' ) );
|
113 |
-
|
114 |
-
wp_mail( $to, $subject, $message, $headers, $attachment );
|
115 |
-
}
|
116 |
-
}
|
117 |
-
|
118 |
-
function aiowps_delete_backup_files()
|
119 |
-
{
|
120 |
-
global $aio_wp_security;
|
121 |
-
if ( $aio_wp_security->configs->get_value('aiowps_backup_files_stored') > 0 )
|
122 |
-
{
|
123 |
-
$files = scandir( AIO_WP_SECURITY_BACKUPS_PATH. '/', 1 );
|
124 |
-
|
125 |
-
$count = 0;
|
126 |
-
|
127 |
-
foreach ( $files as $file )
|
128 |
-
{
|
129 |
-
if ( strstr( $file, 'database-backup' ) )
|
130 |
-
{
|
131 |
-
if ( $count >= $aio_wp_security->configs->get_value('aiowps_backup_files_stored') )
|
132 |
-
{
|
133 |
-
@unlink( AIO_WP_SECURITY_BACKUPS_PATH. '/' . $file );
|
134 |
-
}
|
135 |
-
$count++;
|
136 |
-
}
|
137 |
-
|
138 |
-
}
|
139 |
-
}
|
140 |
-
}
|
141 |
-
|
142 |
-
function aiowps_scheduled_backup_handler()
|
143 |
-
{
|
144 |
-
global $aio_wp_security;
|
145 |
-
if($aio_wp_security->configs->get_value('aiowps_enable_automated_backups')=='1')
|
146 |
-
{
|
147 |
-
$aio_wp_security->debug_logger->log_debug_cron("DB Backup - Scheduled backup is enabled. Checking if a backup needs to be done now...");
|
148 |
-
$current_time = strtotime(current_time('mysql'));
|
149 |
-
$backup_frequency = $aio_wp_security->configs->get_value('aiowps_db_backup_frequency'); //Number of hours or days or months interval per backup
|
150 |
-
$interval_setting = $aio_wp_security->configs->get_value('aiowps_db_backup_interval'); //Hours/Days/Months
|
151 |
-
switch($interval_setting)
|
152 |
-
{
|
153 |
-
case '0':
|
154 |
-
$interval = 'hours';
|
155 |
-
break;
|
156 |
-
case '1':
|
157 |
-
$interval = 'days';
|
158 |
-
break;
|
159 |
-
case '2':
|
160 |
-
$interval = 'weeks';
|
161 |
-
break;
|
162 |
-
}
|
163 |
-
$last_backup_time = $aio_wp_security->configs->get_value('aiowps_last_backup_time');
|
164 |
-
if ($last_backup_time != NULL)
|
165 |
-
{
|
166 |
-
$last_backup_time = strtotime($aio_wp_security->configs->get_value('aiowps_last_backup_time'));
|
167 |
-
$next_backup_time = strtotime("+".abs($backup_frequency).$interval, $last_backup_time);
|
168 |
-
if ($next_backup_time <= $current_time)
|
169 |
-
{
|
170 |
-
//It's time to do a backup
|
171 |
-
$result = $this->execute_backup();
|
172 |
-
if ($result)
|
173 |
-
{
|
174 |
-
$aio_wp_security->configs->set_value('aiowps_last_backup_time', current_time('mysql'));
|
175 |
-
$aio_wp_security->debug_logger->log_debug_cron("DB Backup - Scheduled backup was successfully completed.");
|
176 |
-
}
|
177 |
-
else
|
178 |
-
{
|
179 |
-
$aio_wp_security->debug_logger->log_debug_cron("DB Backup - Scheduled backup operation failed!",4);
|
180 |
-
}
|
181 |
-
}
|
182 |
-
}
|
183 |
-
else
|
184 |
-
{
|
185 |
-
//Set the last backup time to now so it can trigger for the next scheduled period
|
186 |
-
$aio_wp_security->configs->set_value('aiowps_last_backup_time', current_time('mysql'));
|
187 |
-
$aio_wp_security->configs->save_config();
|
188 |
-
}
|
189 |
-
}
|
190 |
-
}
|
191 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/classes/wp-security-config.php
DELETED
@@ -1,54 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
class AIOWPSecurity_Config{
|
3 |
-
var $configs;
|
4 |
-
var $message_stack;
|
5 |
-
static $_this;
|
6 |
-
|
7 |
-
function __construct(){
|
8 |
-
$this->message_stack = new stdClass();
|
9 |
-
}
|
10 |
-
|
11 |
-
function load_config(){
|
12 |
-
$this->configs = get_option('aio_wp_security_configs');
|
13 |
-
}
|
14 |
-
|
15 |
-
function get_value($key){
|
16 |
-
return isset($this->configs[$key])?$this->configs[$key] : '';
|
17 |
-
}
|
18 |
-
|
19 |
-
function set_value($key, $value){
|
20 |
-
$this->configs[$key] = $value;
|
21 |
-
}
|
22 |
-
|
23 |
-
function add_value($key, $value){
|
24 |
-
if (array_key_exists($key, $this->configs)){
|
25 |
-
//Don't update the value for this key
|
26 |
-
}
|
27 |
-
else{//It is safe to update the value for this key
|
28 |
-
$this->configs[$key] = $value;
|
29 |
-
}
|
30 |
-
}
|
31 |
-
|
32 |
-
function save_config(){
|
33 |
-
update_option('aio_wp_security_configs', $this->configs);
|
34 |
-
}
|
35 |
-
|
36 |
-
function get_stacked_message($key){
|
37 |
-
if(isset($this->message_stack->{$key}))
|
38 |
-
return $this->message_stack->{$key};
|
39 |
-
return "";
|
40 |
-
}
|
41 |
-
|
42 |
-
function set_stacked_message($key,$value){
|
43 |
-
$this->message_stack->{$key} = $value;
|
44 |
-
}
|
45 |
-
|
46 |
-
static function get_instance(){
|
47 |
-
if(empty(self::$_this)){
|
48 |
-
self::$_this = new AIOWPSecurity_Config();
|
49 |
-
self::$_this->load_config();
|
50 |
-
return self::$_this;
|
51 |
-
}
|
52 |
-
return self::$_this;
|
53 |
-
}
|
54 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/classes/wp-security-configure-settings.php
DELETED
@@ -1,70 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_Configure_Settings
|
4 |
-
{
|
5 |
-
function __construct(){
|
6 |
-
|
7 |
-
}
|
8 |
-
|
9 |
-
static function set_default_settings()
|
10 |
-
{
|
11 |
-
global $aio_wp_security;
|
12 |
-
//User password feature
|
13 |
-
|
14 |
-
//Lockdown feature
|
15 |
-
$aio_wp_security->configs->set_value('aiowps_enable_login_lockdown','');//Checkbox
|
16 |
-
$aio_wp_security->configs->set_value('aiowps_max_login_attempts','3');
|
17 |
-
$aio_wp_security->configs->set_value('aiowps_retry_time_period','5');
|
18 |
-
$aio_wp_security->configs->set_value('aiowps_lockout_time_length','60');
|
19 |
-
$aio_wp_security->configs->set_value('aiowps_set_generic_login_msg','');//Checkbox
|
20 |
-
$aio_wp_security->configs->set_value('aiowps_enable_email_notify','');//Checkbox
|
21 |
-
//$aio_wp_security->configs->set_value('aiowps_email_address','');//text field
|
22 |
-
$aio_wp_security->configs->set_value('aiowps_enable_forced_logout','');//Checkbox
|
23 |
-
$aio_wp_security->configs->set_value('aiowps_logout_time_period','60');
|
24 |
-
|
25 |
-
//DB Security feature
|
26 |
-
//$aio_wp_security->configs->set_value('aiowps_new_manual_db_pefix',''); //text field
|
27 |
-
$aio_wp_security->configs->set_value('aiowps_enable_random_prefix','');//Checkbox
|
28 |
-
$aio_wp_security->configs->set_value('aiowps_enable_automated_backups','');//Checkbox
|
29 |
-
$aio_wp_security->configs->set_value('aiowps_db_backup_frequency','4');
|
30 |
-
$aio_wp_security->configs->set_value('aiowps_db_backup_interval','2'); //Dropdown box where (0,1,2) => (hours,days,weeks)
|
31 |
-
$aio_wp_security->configs->set_value('aiowps_backup_files_stored','2');
|
32 |
-
$aio_wp_security->configs->set_value('aiowps_send_backup_email_address','');//Checkbox
|
33 |
-
$aio_wp_security->configs->set_value('aiowps_backup_email_address','');
|
34 |
-
|
35 |
-
//Filesystem Security feature
|
36 |
-
$aio_wp_security->configs->set_value('aiowps_disable_file_editing','');//Checkbox
|
37 |
-
|
38 |
-
//Blacklist feature
|
39 |
-
$aio_wp_security->configs->set_value('aiowps_enable_blacklisting','');//Checkbox
|
40 |
-
$aio_wp_security->configs->set_value('aiowps_banned_ip_addresses','');
|
41 |
-
|
42 |
-
//Firewall features
|
43 |
-
$aio_wp_security->configs->set_value('aiowps_enable_basic_firewall','');//Checkbox
|
44 |
-
$aio_wp_security->configs->set_value('aiowps_disable_trace_and_track','');//Checkbox
|
45 |
-
$aio_wp_security->configs->set_value('aiowps_forbid_proxy_comments','');//Checkbox
|
46 |
-
$aio_wp_security->configs->set_value('aiowps_deny_bad_query_strings','');//Checkbox
|
47 |
-
$aio_wp_security->configs->set_value('aiowps_advanced_char_string_filter','');//Checkbox
|
48 |
-
$aio_wp_security->configs->set_value('aiowps_enable_5g_firewall','');//Checkbox
|
49 |
-
|
50 |
-
//TODO - keep adding default opitons for any fields that require it
|
51 |
-
|
52 |
-
//Save it
|
53 |
-
$aio_wp_security->configs->save_config();
|
54 |
-
}
|
55 |
-
|
56 |
-
static function turn_off_all_security_features()
|
57 |
-
{
|
58 |
-
AIOWPSecurity_Configure_Settings::set_default_settings();
|
59 |
-
}
|
60 |
-
|
61 |
-
static function restore_to_factory_default()
|
62 |
-
{
|
63 |
-
//TOOD - complete the implementation
|
64 |
-
//restore wp_config_file();//TODO - //TODO - write implementation in the utility class
|
65 |
-
//restore site_htaccess_file();//TODO - write implementation in the utility class
|
66 |
-
//AIOWPSecurity_Configure_Settings::set_default_settings();
|
67 |
-
//Maybe allow them to revert the DB Prefix too?
|
68 |
-
//File permissions
|
69 |
-
}
|
70 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/classes/wp-security-cronjob-handler.php
DELETED
@@ -1,27 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_Cronjob_Handler {
|
4 |
-
function __construct()
|
5 |
-
{
|
6 |
-
add_action ('aiowps_hourly_cron_event', array(&$this, 'aiowps_hourly_cron_event_handler'));
|
7 |
-
//add_action ('aiowps_daily_cron_event', array(&$this, 'aiowps_daily_cron_event_handler'));
|
8 |
-
}
|
9 |
-
|
10 |
-
function aiowps_hourly_cron_event_handler()
|
11 |
-
{
|
12 |
-
//Do stuff that needs checking every hours
|
13 |
-
global $aio_wp_security;
|
14 |
-
$aio_wp_security->debug_logger->log_debug_cron("Cronjob_Handler - Hourly cron handler got fired.");
|
15 |
-
|
16 |
-
//do_action('aiowps_force_logout_check');
|
17 |
-
//do_action('aiowps_check_password_stuff');
|
18 |
-
do_action('aiowps_perform_scheduled_backup_tasks');
|
19 |
-
}
|
20 |
-
|
21 |
-
// function aiowps_daily_cron_event_handler()
|
22 |
-
// {
|
23 |
-
//
|
24 |
-
// }
|
25 |
-
|
26 |
-
}
|
27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/classes/wp-security-debug-logger.php
DELETED
@@ -1,100 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
* Logs debug data to a file. Here is an example usage
|
4 |
-
* global $aio_wp_security;
|
5 |
-
* $aio_wp_security->debug_logger->log_debug("Log messaged goes here");
|
6 |
-
*/
|
7 |
-
class AIOWPSecurity_Logger
|
8 |
-
{
|
9 |
-
var $log_folder_path;
|
10 |
-
var $default_log_file = 'wp-security-log.txt';
|
11 |
-
var $default_log_file_cron = 'wp-security-log-cron-job.txt';
|
12 |
-
var $debug_enabled = false;
|
13 |
-
var $debug_status = array('SUCCESS','STATUS','NOTICE','WARNING','FAILURE','CRITICAL');
|
14 |
-
var $section_break_marker = "\n----------------------------------------------------------\n\n";
|
15 |
-
var $log_reset_marker = "-------- Log File Reset --------\n";
|
16 |
-
|
17 |
-
function __construct()
|
18 |
-
{
|
19 |
-
$this->log_folder_path = AIO_WP_SECURITY_PATH . '/logs';
|
20 |
-
//TODO - check config and if debug is enabled then set the enabled flag to true
|
21 |
-
$this->debug_enabled = true;
|
22 |
-
}
|
23 |
-
|
24 |
-
function get_debug_timestamp()
|
25 |
-
{
|
26 |
-
return '['.date('m/d/Y g:i A').'] - ';
|
27 |
-
}
|
28 |
-
|
29 |
-
function get_debug_status($level)
|
30 |
-
{
|
31 |
-
$size = count($this->debug_status);
|
32 |
-
if($level >= $size){
|
33 |
-
return 'UNKNOWN';
|
34 |
-
}
|
35 |
-
else{
|
36 |
-
return $this->debug_status[$level];
|
37 |
-
}
|
38 |
-
}
|
39 |
-
|
40 |
-
function get_section_break($section_break)
|
41 |
-
{
|
42 |
-
if ($section_break) {
|
43 |
-
return $this->section_break_marker;
|
44 |
-
}
|
45 |
-
return "";
|
46 |
-
}
|
47 |
-
|
48 |
-
function append_to_file($content,$file_name)
|
49 |
-
{
|
50 |
-
if(empty($file_name))$file_name = $this->default_log_file;
|
51 |
-
$debug_log_file = $this->log_folder_path.'/'.$file_name;
|
52 |
-
$fp=fopen($debug_log_file,'a');
|
53 |
-
fwrite($fp, $content);
|
54 |
-
fclose($fp);
|
55 |
-
}
|
56 |
-
|
57 |
-
function reset_log_file($file_name='')
|
58 |
-
{
|
59 |
-
if(empty($file_name))$file_name = $this->default_log_file;
|
60 |
-
$debug_log_file = $this->log_folder_path.'/'.$file_name;
|
61 |
-
$content = $this->get_debug_timestamp().$this->log_reset_marker;
|
62 |
-
$fp=fopen($debug_log_file,'w');
|
63 |
-
fwrite($fp, $content);
|
64 |
-
fclose($fp);
|
65 |
-
}
|
66 |
-
|
67 |
-
function log_debug($message,$level=0,$section_break=false,$file_name='')
|
68 |
-
{
|
69 |
-
if (!$this->debug_enabled) return;
|
70 |
-
$content = $this->get_debug_timestamp();//Timestamp
|
71 |
-
$content .= $this->get_debug_status($level);//Debug status
|
72 |
-
$content .= ' : ';
|
73 |
-
$content .= $message . "\n";
|
74 |
-
$content .= $this->get_section_break($section_break);
|
75 |
-
$this->append_to_file($content, $file_name);
|
76 |
-
}
|
77 |
-
|
78 |
-
function log_debug_cron($message,$level=0,$section_break=false)
|
79 |
-
{
|
80 |
-
if (!$this->debug_enabled) return;
|
81 |
-
$content = $this->get_debug_timestamp();//Timestamp
|
82 |
-
$content .= $this->get_debug_status($level);//Debug status
|
83 |
-
$content .= ' : ';
|
84 |
-
$content .= $message . "\n";
|
85 |
-
$content .= $this->get_section_break($section_break);
|
86 |
-
//$file_name = $this->default_log_file_cron;
|
87 |
-
$this->append_to_file($content, $this->default_log_file_cron);
|
88 |
-
}
|
89 |
-
|
90 |
-
//TODO - this function need to be completed
|
91 |
-
static function log_debug_st($message,$level=0,$section_break=false,$file_name='')
|
92 |
-
{
|
93 |
-
$content = "\n". $message . "\n";
|
94 |
-
$debug_log_file = 'wp-security-log-static.txt';
|
95 |
-
//$debug_log_file = AIO_WP_SECURITY_PATH .'/wp-security-log.txt';
|
96 |
-
$fp=fopen($debug_log_file,'a');
|
97 |
-
fwrite($fp, $content);
|
98 |
-
fclose($fp);
|
99 |
-
}
|
100 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/classes/wp-security-installer.php
DELETED
@@ -1,73 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_Installer
|
4 |
-
{
|
5 |
-
static function run_installer()
|
6 |
-
{
|
7 |
-
global $wpdb;
|
8 |
-
if (function_exists('is_multisite') && is_multisite())
|
9 |
-
{
|
10 |
-
// check if it is a network activation - if so, run the activation function for each blog id
|
11 |
-
if (isset($_GET['networkwide']) && ($_GET['networkwide'] == 1))
|
12 |
-
{
|
13 |
-
$old_blog = $wpdb->blogid;
|
14 |
-
// Get all blog ids
|
15 |
-
$blogids = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs");
|
16 |
-
foreach ($blogids as $blog_id) {
|
17 |
-
switch_to_blog($blog_id);
|
18 |
-
AIOWPSecurity_Installer::create_db_tables();
|
19 |
-
}
|
20 |
-
switch_to_blog($old_blog);
|
21 |
-
return;
|
22 |
-
}
|
23 |
-
}
|
24 |
-
AIOWPSecurity_Installer::create_db_tables();
|
25 |
-
}
|
26 |
-
|
27 |
-
static function create_db_tables()
|
28 |
-
{
|
29 |
-
//global $wpdb;
|
30 |
-
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
|
31 |
-
|
32 |
-
//"User Login" related tables
|
33 |
-
$lockdown_tbl_name = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
34 |
-
$failed_login_tbl_name = AIOWPSEC_TBL_FAILED_LOGINS;
|
35 |
-
$user_login_activity_tbl_name = AIOWPSEC_TBL_USER_LOGIN_ACTIVITY;
|
36 |
-
|
37 |
-
$ld_tbl_sql = "CREATE TABLE " . $lockdown_tbl_name . " (
|
38 |
-
id bigint(20) NOT NULL AUTO_INCREMENT,
|
39 |
-
user_id bigint(20) NOT NULL,
|
40 |
-
user_login VARCHAR(150) NOT NULL,
|
41 |
-
lockdown_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
42 |
-
release_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
43 |
-
failed_login_ip varchar(100) NOT NULL DEFAULT '',
|
44 |
-
PRIMARY KEY (id)
|
45 |
-
)ENGINE=MyISAM DEFAULT CHARSET=utf8;";
|
46 |
-
dbDelta($ld_tbl_sql);
|
47 |
-
|
48 |
-
$fl_tbl_sql = "CREATE TABLE " . $failed_login_tbl_name . " (
|
49 |
-
id bigint(20) NOT NULL AUTO_INCREMENT,
|
50 |
-
user_id bigint(20) NOT NULL,
|
51 |
-
user_login VARCHAR(150) NOT NULL,
|
52 |
-
failed_login_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
53 |
-
login_attempt_ip varchar(100) NOT NULL DEFAULT '',
|
54 |
-
PRIMARY KEY (id)
|
55 |
-
)ENGINE=MyISAM DEFAULT CHARSET=utf8;";
|
56 |
-
dbDelta($fl_tbl_sql);
|
57 |
-
|
58 |
-
$ula_tbl_sql = "CREATE TABLE " . $user_login_activity_tbl_name . " (
|
59 |
-
id bigint(20) NOT NULL AUTO_INCREMENT,
|
60 |
-
user_id bigint(20) NOT NULL,
|
61 |
-
user_login VARCHAR(150) NOT NULL,
|
62 |
-
login_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
63 |
-
logout_date datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
64 |
-
login_ip varchar(100) NOT NULL DEFAULT '',
|
65 |
-
login_country varchar(150) NOT NULL DEFAULT '',
|
66 |
-
browser_type varchar(150) NOT NULL DEFAULT '',
|
67 |
-
PRIMARY KEY (id)
|
68 |
-
)ENGINE=MyISAM DEFAULT CHARSET=utf8;";
|
69 |
-
dbDelta($ula_tbl_sql);
|
70 |
-
|
71 |
-
update_option("aiowpsec_db_version", AIO_WP_SECURITY_DB_VERSION);
|
72 |
-
}
|
73 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/classes/wp-security-user-login.php
DELETED
@@ -1,373 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
class AIOWPSecurity_User_Login
|
3 |
-
{
|
4 |
-
/**
|
5 |
-
* This will store a URI query string key for passing messages to the login form
|
6 |
-
* @var string
|
7 |
-
*/
|
8 |
-
var $key_login_msg;
|
9 |
-
|
10 |
-
function __construct()
|
11 |
-
{
|
12 |
-
$this->initialize();
|
13 |
-
remove_filter('authenticate', 'wp_authenticate_username_password', 20, 3);
|
14 |
-
add_filter('authenticate', array(&$this, 'aiowp_auth_login'), 10, 3);
|
15 |
-
add_action('aiowps_force_logout_check', array(&$this, 'aiowps_force_logout_action_handler'));
|
16 |
-
//add_action('wp_login', array(&$this, 'wp_login_action_handler'), 10, 2);
|
17 |
-
add_action('clear_auth_cookie', array(&$this, 'wp_logout_action_handler'));
|
18 |
-
add_filter('login_message', array(&$this, 'aiowps_login_message')); //WP filter to add or modify messages on the login page
|
19 |
-
}
|
20 |
-
|
21 |
-
protected function initialize()
|
22 |
-
{
|
23 |
-
$this->key_login_msg = 'aiowps_login_msg_id';
|
24 |
-
}
|
25 |
-
|
26 |
-
|
27 |
-
/*
|
28 |
-
* This function will take care of the authentication operations
|
29 |
-
* It will return a WP_User object if successful or WP_Error if not
|
30 |
-
*/
|
31 |
-
function aiowp_auth_login($user, $username, $password)
|
32 |
-
{
|
33 |
-
global $aio_wp_security;
|
34 |
-
$login_attempts_permitted = $aio_wp_security->configs->get_value('aiowps_max_login_attempts');
|
35 |
-
|
36 |
-
$user_locked = $this->check_locked_user();
|
37 |
-
if ($user_locked != NULL) {
|
38 |
-
$aio_wp_security->debug_logger->log_debug("Login attempt from blocked IP range - ".$user_locked['failed_login_IP'],2);
|
39 |
-
return new WP_Error('authentication_failed', __('<strong>ERROR</strong>: Login failed because your IP address has been blocked due to too many failed login attempts.
|
40 |
-
Please contact the administrator.', 'aiowpsecurity'));
|
41 |
-
}
|
42 |
-
|
43 |
-
if ( is_a($user, 'WP_User') ) { return $user; } //Existing WP core code
|
44 |
-
|
45 |
-
if ( empty($username) || empty($password) ) { //Existing WP core code
|
46 |
-
$error = new WP_Error();
|
47 |
-
if (empty($username)){
|
48 |
-
$error->add('empty_username', __('<strong>ERROR</strong>: The username field is empty.', 'aiowpsecurity'));
|
49 |
-
}
|
50 |
-
|
51 |
-
if (empty($password)){
|
52 |
-
$error->add('empty_password', __('<strong>ERROR</strong>: The password field is empty.', 'aiowpsecurity'));
|
53 |
-
}
|
54 |
-
return $error;
|
55 |
-
}
|
56 |
-
|
57 |
-
$userdata = get_user_by('login',$username);
|
58 |
-
if (!$userdata)
|
59 |
-
{
|
60 |
-
//This means an unknown username is being used for login
|
61 |
-
$this->increment_failed_logins($username);
|
62 |
-
if($login_attempts_permitted <= $this->get_login_fail_count())
|
63 |
-
{
|
64 |
-
$this->lock_the_user(__('unknown','aiowpsecurity'));
|
65 |
-
}
|
66 |
-
if($aio_wp_security->configs->get_value('aiowps_set_generic_login_msg')=='1')
|
67 |
-
{
|
68 |
-
//Return generic error message if configured
|
69 |
-
return new WP_Error('authentication_failed', __('<strong>ERROR</strong>: Invalid login credentials.', 'aiowpsecurity'));
|
70 |
-
} else
|
71 |
-
{
|
72 |
-
return new WP_Error('invalid_username', __('<strong>ERROR</strong>: Invalid username.', 'aiowpsecurity'));
|
73 |
-
}
|
74 |
-
}
|
75 |
-
|
76 |
-
$userdata = apply_filters('wp_authenticate_user', $userdata, $password); //Existing WP core code
|
77 |
-
if ( is_wp_error($userdata) ) { //Existing WP core code
|
78 |
-
return $userdata;
|
79 |
-
}
|
80 |
-
|
81 |
-
if ( !wp_check_password($password, $userdata->user_pass, $userdata->ID) )
|
82 |
-
{
|
83 |
-
//This means wrong password was entered
|
84 |
-
$this->increment_failed_logins($username);
|
85 |
-
if($login_attempts_permitted <= $this->get_login_fail_count())
|
86 |
-
{
|
87 |
-
$this->lock_the_user($username);
|
88 |
-
}
|
89 |
-
if($aio_wp_security->configs->get_value('aiowps_set_generic_login_msg')=='1')
|
90 |
-
{
|
91 |
-
//Return generic error message if configured
|
92 |
-
return new WP_Error('authentication_failed', __('<strong>ERROR</strong>: Invalid login credentials.', 'aiowpsecurity'));
|
93 |
-
} else
|
94 |
-
{
|
95 |
-
return new WP_Error('incorrect_password', sprintf(__('<strong>ERROR</strong>: Incorrect password. <a href="%s" title="Password Lost and Found">Lost your password</a>?', 'aiowpsecurity'), site_url('wp-login.php?action=lostpassword', 'login')));
|
96 |
-
}
|
97 |
-
}
|
98 |
-
|
99 |
-
$user = new WP_User($userdata->ID);
|
100 |
-
return $user;
|
101 |
-
}
|
102 |
-
|
103 |
-
/*
|
104 |
-
* This function queries the aiowps_login_lockdown table.
|
105 |
-
* If the release_date has not expired AND the current visitor IP addr matches
|
106 |
-
* it will return a record
|
107 |
-
*/
|
108 |
-
function check_locked_user()
|
109 |
-
{
|
110 |
-
global $wpdb;
|
111 |
-
$login_lockdown_table = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
112 |
-
$ip_range = $this->get_sanitized_ip_range(); //Get the IP range of the current user
|
113 |
-
$locked_user = $wpdb->get_var("SELECT user_id FROM $login_lockdown_table " .
|
114 |
-
"WHERE release_date > now() AND " .
|
115 |
-
"failed_login_IP LIKE '" . $wpdb->escape($ip_range) . "%'");
|
116 |
-
return $locked_user;
|
117 |
-
}
|
118 |
-
|
119 |
-
/*
|
120 |
-
* This function queries the aiowps_failed_logins table and returns the number of failures for current IP range within allowed failure period
|
121 |
-
*/
|
122 |
-
function get_login_fail_count()
|
123 |
-
{
|
124 |
-
global $wpdb, $aio_wp_security;
|
125 |
-
$failed_logins_table = AIOWPSEC_TBL_FAILED_LOGINS;
|
126 |
-
$login_retry_interval = $aio_wp_security->configs->get_value('aiowps_retry_time_period');
|
127 |
-
|
128 |
-
$ip_range = $this->get_sanitized_ip_range(); //Get the IP range of the current user
|
129 |
-
$login_failures = $wpdb->get_var("SELECT COUNT(ID) FROM $failed_logins_table " .
|
130 |
-
"WHERE failed_login_date + INTERVAL " .
|
131 |
-
$login_retry_interval . " MINUTE > now() AND " .
|
132 |
-
"login_attempt_ip LIKE '" . $wpdb->escape($ip_range) . "%'");
|
133 |
-
return $login_failures;
|
134 |
-
}
|
135 |
-
|
136 |
-
/*
|
137 |
-
* Adds an entry to the aiowps_lockdowns table
|
138 |
-
*/
|
139 |
-
function lock_the_user($username='')
|
140 |
-
{
|
141 |
-
global $wpdb, $aio_wp_security;
|
142 |
-
$login_lockdown_table = AIOWPSEC_TBL_LOGIN_LOCKDOWN;
|
143 |
-
$lockout_time_length = $aio_wp_security->configs->get_value('aiowps_lockout_time_length');
|
144 |
-
|
145 |
-
$ip_range = $this->get_sanitized_ip_range(); //Get the IP range of the current user
|
146 |
-
$username = sanitize_user($username);
|
147 |
-
$user = get_user_by('login',$username); //Returns WP_User object if exists
|
148 |
-
if ($user)
|
149 |
-
{
|
150 |
-
//If the login attempt was made using a valid user set variables for DB storage later on
|
151 |
-
$user_id = $user->ID;
|
152 |
-
} else {
|
153 |
-
//If the login attempt was made using a non-existent user then let's set user_id to blank and record the attempted user login name for DB storage later on
|
154 |
-
$user_id = '';
|
155 |
-
}
|
156 |
-
|
157 |
-
$insert = "INSERT INTO " . $login_lockdown_table . " (user_id, user_login, lockdown_date, release_date, failed_login_IP) " .
|
158 |
-
"VALUES ('" . $user_id . "', '" . $username . "', now(), date_add(now(), INTERVAL " .
|
159 |
-
$lockout_time_length . " MINUTE), '" . $wpdb->escape($ip_range) . "')";
|
160 |
-
$result = $wpdb->query($insert);
|
161 |
-
if ($result > 0)
|
162 |
-
{
|
163 |
-
do_action('aiowps_lockdown_event', $ip_range, $username);
|
164 |
-
$this->send_notification_email($username, $ip_range);
|
165 |
-
$aio_wp_security->debug_logger->log_debug("The following IP address range has been locked out for exceeding the maximum login attempts: ".$ip_range,2);//Log the lockdown event
|
166 |
-
}
|
167 |
-
else if ($result == FALSE)
|
168 |
-
{
|
169 |
-
$aio_wp_security->debug_logger->log_debug("Error inserting record into ".$login_lockdown_table,4);//Log the highly unlikely event of DB error
|
170 |
-
}
|
171 |
-
}
|
172 |
-
|
173 |
-
/*
|
174 |
-
* Adds an entry to the aiowps_failed_logins table
|
175 |
-
*/
|
176 |
-
function increment_failed_logins($username='')
|
177 |
-
{
|
178 |
-
global $wpdb, $aio_wp_security;
|
179 |
-
//$login_attempts_permitted = $aio_wp_security->configs->get_value('aiowps_max_login_attempts');
|
180 |
-
//$lockout_time_length = $aio_wp_security->configs->get_value('aiowps_lockout_time_length');
|
181 |
-
$login_fails_table = AIOWPSEC_TBL_FAILED_LOGINS;
|
182 |
-
$ip_range = $this->get_sanitized_ip_range(); //Get the IP range of the current user
|
183 |
-
|
184 |
-
$username = sanitize_user($username);
|
185 |
-
$user = get_user_by('login',$username); //Returns WP_User object if it exists
|
186 |
-
if ($user)
|
187 |
-
{
|
188 |
-
//If the login attempt was made using a valid user set variables for DB storage later on
|
189 |
-
$user_id = $user->ID;
|
190 |
-
} else {
|
191 |
-
//If the login attempt was made using a non-existent user then let's set user_id to blank and record the attempted user login name for DB storage later on
|
192 |
-
$user_id = '';
|
193 |
-
}
|
194 |
-
$insert = "INSERT INTO " . $login_fails_table . " (user_id, user_login, failed_login_date, login_attempt_ip) " .
|
195 |
-
"VALUES ('" . $user_id . "', '" . $username . "', now(), '" . $wpdb->escape($ip_range) . "')";
|
196 |
-
$result = $wpdb->query($insert);
|
197 |
-
if ($result == FALSE)
|
198 |
-
{
|
199 |
-
$aio_wp_security->debug_logger->log_debug("Error inserting record into ".$login_fails_table,4);//Log the highly unlikely event of DB error
|
200 |
-
}
|
201 |
-
|
202 |
-
}
|
203 |
-
|
204 |
-
/*
|
205 |
-
* Returns the first three octets of a sanitized IP address so it can used as an IP address range
|
206 |
-
*/
|
207 |
-
function get_sanitized_ip_range()
|
208 |
-
{
|
209 |
-
global $aio_wp_security;
|
210 |
-
$ip = AIOWPSecurity_Utility_IP::get_user_ip_address(); //Get the IP address of user
|
211 |
-
$ip_range = '';
|
212 |
-
$valid_ip = filter_var($ip, FILTER_VALIDATE_IP); //Sanitize the IP address
|
213 |
-
if ($valid_ip)
|
214 |
-
{
|
215 |
-
$ip_range = substr($valid_ip, 0 , strrpos ($valid_ip, ".")); //strip last portion of address to leave an IP range
|
216 |
-
}
|
217 |
-
else
|
218 |
-
{
|
219 |
-
//Write log if the 'REMOTE_ADDR' contains something which is not an IP
|
220 |
-
$aio_wp_security->debug_logger->log_debug("AIOWPSecurity_User_Login - Invalid IP received ".$ip,4);
|
221 |
-
}
|
222 |
-
return $ip_range;
|
223 |
-
}
|
224 |
-
|
225 |
-
/*
|
226 |
-
* This function queries the aiowps_failed_logins table and returns the number of failures for current IP range within allowed failure period
|
227 |
-
*/
|
228 |
-
function send_notification_email($username, $ip_range)
|
229 |
-
{
|
230 |
-
global $aio_wp_security;
|
231 |
-
$email_notification_enabled = $aio_wp_security->configs->get_value('aiowps_enable_email_notify');
|
232 |
-
$to_email_address = $aio_wp_security->configs->get_value('aiowps_email_address');
|
233 |
-
$email_msg = '';
|
234 |
-
if ($email_notification_enabled == 1)
|
235 |
-
{
|
236 |
-
$subject = '['.get_option('siteurl').'] '. __('Site Lockout Notification','aiowpsecurity');
|
237 |
-
$email_msg .= __('A lockdown event has occurred due to too many failed login attempts with the following user details','aiowpsecurity')."\n";
|
238 |
-
$email_msg .= __('Username: '.($username?$username:"Unknown"),'aiowpsecurity')."\n";
|
239 |
-
$email_msg .= __('IP Range: '.$ip_range,'aiowpsecurity')."\n\n";
|
240 |
-
$email_msg .= __('Log into your site\'s WordPress administration panel to see the duration of the lockout or to unlock the user.','aiowpsecurity')."\n";
|
241 |
-
$email_header = 'From: '.get_bloginfo( 'name' ).' <'.get_bloginfo('admin_email').'>' . "\r\n\\";
|
242 |
-
$sendMail = wp_mail($to_email_address, $subject, $email_msg, $email_header);
|
243 |
-
}
|
244 |
-
}
|
245 |
-
|
246 |
-
|
247 |
-
/*
|
248 |
-
* This function will check the settings and log the user after the configured time period
|
249 |
-
*/
|
250 |
-
function aiowps_force_logout_action_handler()
|
251 |
-
{
|
252 |
-
global $aio_wp_security;
|
253 |
-
//$aio_wp_security->debug_logger->log_debug("Force Logout - Checking if any user need to be logged out...");
|
254 |
-
if($aio_wp_security->configs->get_value('aiowps_enable_forced_logout')=='1') //if this feature is enabled then do something
|
255 |
-
{
|
256 |
-
if(is_user_logged_in())
|
257 |
-
{
|
258 |
-
$current_user = wp_get_current_user();
|
259 |
-
$user_id = $current_user->ID;
|
260 |
-
$current_time = current_time('mysql');
|
261 |
-
$login_time = $this->get_wp_user_last_login_time($user_id);
|
262 |
-
$diff = strtotime($current_time) - strtotime($login_time);
|
263 |
-
$logout_time_interval_value = $aio_wp_security->configs->get_value('aiowps_logout_time_period');
|
264 |
-
$logout_time_interval_val_seconds = $logout_time_interval_value * 60;
|
265 |
-
if($diff > $logout_time_interval_val_seconds)
|
266 |
-
{
|
267 |
-
$aio_wp_security->debug_logger->log_debug("Force Logout - This user logged in more than (".$logout_time_interval_value.") minutes ago. Doing a force log out for the user with username: ".$current_user->user_login);
|
268 |
-
$this->wp_logout_action_handler(); //this will register the logout time/date in the logout_date column
|
269 |
-
|
270 |
-
$curr_page_url = AIOWPSecurity_Utility::get_current_page_url();
|
271 |
-
$after_logout_payload = 'redirect_to='.$curr_page_url.'&msg='.$this->key_login_msg.'=session_expired';
|
272 |
-
$encrypted_payload = base64_encode($after_logout_payload);
|
273 |
-
$logout_url = AIOWPSEC_WP_URL.'?aiowpsec_do_log_out=1';
|
274 |
-
$logout_url = AIOWPSecurity_Utility::add_query_data_to_url($logout_url, 'al_additional_data', $encrypted_payload);
|
275 |
-
AIOWPSecurity_Utility::redirect_to_url($logout_url);
|
276 |
-
}
|
277 |
-
}
|
278 |
-
}
|
279 |
-
}
|
280 |
-
|
281 |
-
function get_wp_user_last_login_time($user_id)
|
282 |
-
{
|
283 |
-
$last_login = get_user_meta($user_id, 'last_login_time', true);
|
284 |
-
return $last_login;
|
285 |
-
}
|
286 |
-
|
287 |
-
function wp_login_action_handler($user_login, $user)
|
288 |
-
{
|
289 |
-
global $wpdb, $aio_wp_security;
|
290 |
-
$login_activity_table = AIOWPSEC_TBL_USER_LOGIN_ACTIVITY;
|
291 |
-
$login_date_time = current_time('mysql');
|
292 |
-
update_user_meta($user->ID, 'last_login_time', $login_date_time); //store last login time in meta table
|
293 |
-
$curr_ip_address = AIOWPSecurity_Utility_IP::get_user_ip_address();
|
294 |
-
$insert = "INSERT INTO " . $login_activity_table . " (user_id, user_login, login_date, login_ip) " .
|
295 |
-
"VALUES ('" . $user->ID . "', '" . $user_login . "', '" . $login_date_time . "', '" . $curr_ip_address . "')";
|
296 |
-
$result = $wpdb->query($insert);
|
297 |
-
if ($result == FALSE)
|
298 |
-
{
|
299 |
-
$aio_wp_security->debug_logger->log_debug("Error inserting record into ".$login_activity_table,4);//Log the highly unlikely event of DB error
|
300 |
-
}
|
301 |
-
|
302 |
-
}
|
303 |
-
|
304 |
-
/**
|
305 |
-
* The handler for logout events, ie, uses the WP "clear_auth_cookies" action.
|
306 |
-
|
307 |
-
* Modifies the login activity record for the current user by registering the logout time/date in the logout_date column.
|
308 |
-
* (NOTE: Because of the way we are doing a force logout, the "clear_auth_cookies" hook does not fire.
|
309 |
-
* upon auto logout. The current workaround is to call this function directly from the aiowps_force_logout_action_handler() when
|
310 |
-
* an auto logout occurs due to the "force logout" feature).
|
311 |
-
*
|
312 |
-
*/
|
313 |
-
function wp_logout_action_handler()
|
314 |
-
{
|
315 |
-
global $wpdb, $aio_wp_security;
|
316 |
-
$current_user = wp_get_current_user();
|
317 |
-
$ip_addr = AIOWPSecurity_Utility_IP::get_user_ip_address();
|
318 |
-
$user_id = $current_user->ID;
|
319 |
-
$login_activity_table = AIOWPSEC_TBL_USER_LOGIN_ACTIVITY;
|
320 |
-
$logout_date_time = current_time('mysql');
|
321 |
-
$data = array('logout_date' => $logout_date_time);
|
322 |
-
$where = array('user_id' => $user_id,
|
323 |
-
'login_ip' => $ip_addr,
|
324 |
-
'logout_date' => '0000-00-00 00:00:00');
|
325 |
-
$result = $wpdb->update($login_activity_table, $data, $where);
|
326 |
-
if ($result == FALSE)
|
327 |
-
{
|
328 |
-
$aio_wp_security->debug_logger->log_debug("Error inserting record into ".$login_activity_table,4);//Log the highly unlikely event of DB error
|
329 |
-
}
|
330 |
-
}
|
331 |
-
|
332 |
-
/**
|
333 |
-
* The handler for the WP "login_message" filter
|
334 |
-
* Adds custom messages to the other messages that appear above the login form.
|
335 |
-
*
|
336 |
-
* NOTE: This method is automatically called by WordPress for displaying
|
337 |
-
* text above the login form.
|
338 |
-
*
|
339 |
-
* @param string $message the output from earlier login_message filters
|
340 |
-
* @return string
|
341 |
-
*
|
342 |
-
*/
|
343 |
-
function aiowps_login_message($message = '')
|
344 |
-
{
|
345 |
-
global $aio_wp_security;
|
346 |
-
$msg = '';
|
347 |
-
if(isset($_GET[$this->key_login_msg]) && !empty($_GET[$this->key_login_msg]))
|
348 |
-
{
|
349 |
-
$logout_msg = strip_tags($_GET[$this->key_login_msg]);
|
350 |
-
}
|
351 |
-
if (!empty($logout_msg))
|
352 |
-
{
|
353 |
-
switch ($logout_msg) {
|
354 |
-
case 'session_expired':
|
355 |
-
$msg = sprintf(__('Your session has expired because it has been over %d minutes since your last login.', 'aiowpsecurity'), $aio_wp_security->configs->get_value('aiowps_logout_time_period'));
|
356 |
-
$msg .= ' ' . __('Please log back in to continue.', 'aiowpsecurity');
|
357 |
-
break;
|
358 |
-
case 'admin_user_changed':
|
359 |
-
$msg = __('You were logged out because you just changed the "admin" username.', 'aiowpsecurity');
|
360 |
-
$msg .= ' ' . __('Please log back in to continue.', 'aiowpsecurity');
|
361 |
-
break;
|
362 |
-
default:
|
363 |
-
}
|
364 |
-
}
|
365 |
-
if (!empty($msg))
|
366 |
-
{
|
367 |
-
$msg = htmlspecialchars($msg, ENT_QUOTES, 'UTF-8');
|
368 |
-
$message .= '<p class="login message">'. $msg . '</p>';
|
369 |
-
}
|
370 |
-
return $message;
|
371 |
-
}
|
372 |
-
|
373 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/classes/wp-security-utility-file.php
DELETED
@@ -1,230 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_Utility_File
|
4 |
-
{
|
5 |
-
|
6 |
-
/* This variable will be an array which will contain all of the files and/or directories we wish to check permissions for */
|
7 |
-
public $files_and_dirs_to_check;
|
8 |
-
|
9 |
-
function __construct(){
|
10 |
-
/* Let's initiliaze our class variable array with all of the files and/or directories we wish to check permissions for.
|
11 |
-
* NOTE: we can add to this list in future if we wish
|
12 |
-
*/
|
13 |
-
$this->files_and_dirs_to_check = array(
|
14 |
-
array('name'=>'root directory','path'=>ABSPATH,'permissions'=>'0755'),
|
15 |
-
array('name'=>'wp-includes/','path'=>ABSPATH."wp-includes",'permissions'=>'0755'),
|
16 |
-
array('name'=>'.htaccess','path'=>ABSPATH.".htaccess",'permissions'=>'0644'),
|
17 |
-
array('name'=>'wp-admin/index.php','path'=>ABSPATH."wp-admin/index.php",'permissions'=>'0644'),
|
18 |
-
array('name'=>'wp-admin/js/','path'=>ABSPATH."wp-admin/js/",'permissions'=>'0755'),
|
19 |
-
array('name'=>'wp-content/themes/','path'=>ABSPATH."wp-content/themes",'permissions'=>'0755'),
|
20 |
-
array('name'=>'wp-content/plugins/','path'=>ABSPATH."wp-content/plugins",'permissions'=>'0755'),
|
21 |
-
array('name'=>'wp-admin/','path'=>ABSPATH."wp-admin",'permissions'=>'0755'),
|
22 |
-
array('name'=>'wp-content/','path'=>ABSPATH."wp-content",'permissions'=>'0755'),
|
23 |
-
array('name'=>'wp-config.php','path'=>ABSPATH."wp-config.php",'permissions'=>'0644')
|
24 |
-
//Add as many files or dirs as needed by following the convention above
|
25 |
-
);
|
26 |
-
|
27 |
-
}
|
28 |
-
|
29 |
-
static function write_content_to_file($file_path, $new_contents)
|
30 |
-
{
|
31 |
-
@chmod($file_path, 0777);
|
32 |
-
if (is_writeable($file_path))
|
33 |
-
{
|
34 |
-
$handle = fopen($file_path, 'w');
|
35 |
-
foreach( $new_contents as $line ) {
|
36 |
-
fwrite($handle, $line);
|
37 |
-
}
|
38 |
-
fclose($handle);
|
39 |
-
@chmod($file_path, 0644); //Let's change the file back to a secure permission setting
|
40 |
-
return true;
|
41 |
-
} else {
|
42 |
-
return false;
|
43 |
-
}
|
44 |
-
}
|
45 |
-
|
46 |
-
static function backup_a_file($src_file_path, $suffix = 'backup')
|
47 |
-
{
|
48 |
-
$backup_file_path = $src_file_path . '.' . $suffix;
|
49 |
-
if (!copy($src_file_path, $backup_file_path)) {
|
50 |
-
//Failed to make a backup copy
|
51 |
-
return false;
|
52 |
-
}
|
53 |
-
return true;
|
54 |
-
}
|
55 |
-
|
56 |
-
static function recursive_file_search($pattern='*', $flags = 0, $path='')
|
57 |
-
{
|
58 |
-
$paths=glob($path.'*', GLOB_MARK|GLOB_ONLYDIR|GLOB_NOSORT);
|
59 |
-
$files=glob($path.$pattern, $flags);
|
60 |
-
foreach ($paths as $path) { $files=array_merge($files,AIOWPSecurity_Utility_File::recursive_file_search($pattern, $flags, $path)); }
|
61 |
-
return $files;
|
62 |
-
}
|
63 |
-
|
64 |
-
/*
|
65 |
-
* Useful when wanting to echo file contents to screen with <br /> tags
|
66 |
-
*/
|
67 |
-
static function get_file_contents_with_br($src_file)
|
68 |
-
{
|
69 |
-
$file_contents = file_get_contents($src_file);
|
70 |
-
return nl2br($file_contents);
|
71 |
-
}
|
72 |
-
|
73 |
-
/*
|
74 |
-
* Useful when wanting to echo file contents inside textarea
|
75 |
-
*/
|
76 |
-
static function get_file_contents($src_file)
|
77 |
-
{
|
78 |
-
$file_contents = file_get_contents($src_file);
|
79 |
-
return $file_contents;
|
80 |
-
}
|
81 |
-
|
82 |
-
/*
|
83 |
-
* Returns the file's permission value eg, "0755"
|
84 |
-
*/
|
85 |
-
static function get_file_permission($filepath)
|
86 |
-
{
|
87 |
-
if (!function_exists('fileperms'))
|
88 |
-
{
|
89 |
-
$perms = '-1';
|
90 |
-
}
|
91 |
-
else
|
92 |
-
{
|
93 |
-
clearstatcache();
|
94 |
-
$perms = substr(sprintf("%o", @fileperms($filepath)), -4);
|
95 |
-
}
|
96 |
-
return $perms;
|
97 |
-
}
|
98 |
-
|
99 |
-
/*
|
100 |
-
* This function will compare the current permission value for a file or dir with the recommended value.
|
101 |
-
* It will compare the individual "execute", "write" and "read" bits for the "public", "group" and "owner" permissions.
|
102 |
-
* If the permissions for an actual bit value are greater than the recommended value it returns '0' (=less secure)
|
103 |
-
* Otherwise it returns '1' which means it is secure
|
104 |
-
* Accepts permission value parameters in octal, ie, "0777" or "777"
|
105 |
-
*/
|
106 |
-
static function is_file_permission_secure($recommended, $actual)
|
107 |
-
{
|
108 |
-
$result = 1; //initialize return result
|
109 |
-
|
110 |
-
//Check "public" permissions
|
111 |
-
$public_value_actual = substr($actual,-1,1); //get dec value for actual public permission
|
112 |
-
$public_value_rec = substr($recommended,-1,1); //get dec value for recommended public permission
|
113 |
-
|
114 |
-
$pva_bin = decbin($public_value_actual); //Convert value to binary
|
115 |
-
$pvr_bin = decbin($public_value_rec); //Convert value to binary
|
116 |
-
//Compare the "executable" bit values for the public actual versus the recommended
|
117 |
-
if (substr($pva_bin,-1,1)<=substr($pvr_bin,-1,1))
|
118 |
-
{
|
119 |
-
//The "execute" bit is the same or less as the recommended value
|
120 |
-
$result = 1*$result;
|
121 |
-
}else
|
122 |
-
{
|
123 |
-
//The "execute" bit is switched on for the actual value - meaning it is less secure
|
124 |
-
$result = 0*$result;
|
125 |
-
}
|
126 |
-
|
127 |
-
//Compare the "write" bit values for the public actual versus the recommended
|
128 |
-
if (substr($pva_bin,-2,1)<=substr($pvr_bin,-2,1))
|
129 |
-
{
|
130 |
-
//The "write" bit is the same or less as the recommended value
|
131 |
-
$result = 1*$result;
|
132 |
-
}else
|
133 |
-
{
|
134 |
-
//The "write" bit is switched on for the actual value - meaning it is less secure
|
135 |
-
$result = 0*$result;
|
136 |
-
}
|
137 |
-
|
138 |
-
//Compare the "read" bit values for the public actual versus the recommended
|
139 |
-
if (substr($pva_bin,-3,1)<=substr($pvr_bin,-3,1))
|
140 |
-
{
|
141 |
-
//The "read" bit is the same or less as the recommended value
|
142 |
-
$result = 1*$result;
|
143 |
-
}else
|
144 |
-
{
|
145 |
-
//The "read" bit is switched on for the actual value - meaning it is less secure
|
146 |
-
$result = 0*$result;
|
147 |
-
}
|
148 |
-
|
149 |
-
//Check "group" permissions
|
150 |
-
$group_value_actual = substr($actual,-2,1);
|
151 |
-
$group_value_rec = substr($recommended,-2,1);
|
152 |
-
$gva_bin = decbin($group_value_actual); //Convert value to binary
|
153 |
-
$gvr_bin = decbin($group_value_rec); //Convert value to binary
|
154 |
-
|
155 |
-
//Compare the "executable" bit values for the group actual versus the recommended
|
156 |
-
if (substr($gva_bin,-1,1)<=substr($gvr_bin,-1,1))
|
157 |
-
{
|
158 |
-
//The "execute" bit is the same or less as the recommended value
|
159 |
-
$result = 1*$result;
|
160 |
-
}else
|
161 |
-
{
|
162 |
-
//The "execute" bit is switched on for the actual value - meaning it is less secure
|
163 |
-
$result = 0*$result;
|
164 |
-
}
|
165 |
-
|
166 |
-
//Compare the "write" bit values for the public actual versus the recommended
|
167 |
-
if (substr($gva_bin,-2,1)<=substr($gvr_bin,-2,1))
|
168 |
-
{
|
169 |
-
//The "write" bit is the same or less as the recommended value
|
170 |
-
$result = 1*$result;
|
171 |
-
}else
|
172 |
-
{
|
173 |
-
//The "write" bit is switched on for the actual value - meaning it is less secure
|
174 |
-
$result = 0*$result;
|
175 |
-
}
|
176 |
-
|
177 |
-
//Compare the "read" bit values for the public actual versus the recommended
|
178 |
-
if (substr($gva_bin,-3,1)<=substr($gvr_bin,-3,1))
|
179 |
-
{
|
180 |
-
//The "read" bit is the same or less as the recommended value
|
181 |
-
$result = 1*$result;
|
182 |
-
}else
|
183 |
-
{
|
184 |
-
//The "read" bit is switched on for the actual value - meaning it is less secure
|
185 |
-
$result = 0*$result;
|
186 |
-
}
|
187 |
-
|
188 |
-
//Check "owner" permissions
|
189 |
-
$owner_value_actual = substr($actual,-3,1);
|
190 |
-
$owner_value_rec = substr($recommended,-3,1);
|
191 |
-
$ova_bin = decbin($owner_value_actual); //Convert value to binary
|
192 |
-
$ovr_bin = decbin($owner_value_rec); //Convert value to binary
|
193 |
-
|
194 |
-
//Compare the "executable" bit values for the group actual versus the recommended
|
195 |
-
if (substr($ova_bin,-1,1)<=substr($ovr_bin,-1,1))
|
196 |
-
{
|
197 |
-
//The "execute" bit is the same or less as the recommended value
|
198 |
-
$result = 1*$result;
|
199 |
-
}else
|
200 |
-
{
|
201 |
-
//The "execute" bit is switched on for the actual value - meaning it is less secure
|
202 |
-
$result = 0*$result;
|
203 |
-
}
|
204 |
-
|
205 |
-
//Compare the "write" bit values for the public actual versus the recommended
|
206 |
-
if (substr($ova_bin,-2,1)<=substr($ovr_bin,-2,1))
|
207 |
-
{
|
208 |
-
//The "write" bit is the same or less as the recommended value
|
209 |
-
$result = 1*$result;
|
210 |
-
}else
|
211 |
-
{
|
212 |
-
//The "write" bit is switched on for the actual value - meaning it is less secure
|
213 |
-
$result = 0*$result;
|
214 |
-
}
|
215 |
-
|
216 |
-
//Compare the "read" bit values for the public actual versus the recommended
|
217 |
-
if (substr($ova_bin,-3,1)<=substr($ovr_bin,-3,1))
|
218 |
-
{
|
219 |
-
//The "read" bit is the same or less as the recommended value
|
220 |
-
$result = 1*$result;
|
221 |
-
}else
|
222 |
-
{
|
223 |
-
//The "read" bit is switched on for the actual value - meaning it is less secure
|
224 |
-
$result = 0*$result;
|
225 |
-
}
|
226 |
-
|
227 |
-
return $result;
|
228 |
-
}
|
229 |
-
|
230 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/classes/wp-security-utility-htaccess.php
DELETED
@@ -1,783 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_Utility_Htaccess
|
4 |
-
{
|
5 |
-
//The following variables will store the comment markers for each of features added to the .htacces file
|
6 |
-
//This will make it easy to locate the blocks of code for deletion if someone disables a feature
|
7 |
-
public static $ip_blacklist_marker_start = '#AIOWPS_IP_BLACKLIST_START';
|
8 |
-
public static $ip_blacklist_marker_end = '#AIOWPS_IP_BLACKLIST_END';
|
9 |
-
|
10 |
-
public static $basic_htaccess_rules_marker_start = '#AIOWPS_BASIC_HTACCESS_RULES_START';
|
11 |
-
public static $basic_htaccess_rules_marker_end = '#AIOWPS_BASIC_HTACCESS_RULES_END';
|
12 |
-
|
13 |
-
public static $user_agent_blacklist_marker_start = '#AIOWPS_USER_AGENT_BLACKLIST_START';
|
14 |
-
public static $user_agent_blacklist_marker_end = '#AIOWPS_USER_AGENT_BLACKLIST_END';
|
15 |
-
|
16 |
-
public static $disable_trace_track_marker_start = '#AIOWPS_DISABLE_TRACE_TRACK_START';
|
17 |
-
public static $disable_trace_track_marker_end = '#AIOWPS_DISABLE_TRACE_TRACK_END';
|
18 |
-
|
19 |
-
public static $forbid_proxy_comments_marker_start = '#AIOWPS_FORBID_PROXY_COMMENTS_START';
|
20 |
-
public static $forbid_proxy_comments_marker_end = '#AIOWPS_FORBID_PROXY_COMMENTS_END';
|
21 |
-
|
22 |
-
public static $deny_bad_query_strings_marker_start = '#AIOWPS_DENY_BAD_QUERY_STRINGS_START';
|
23 |
-
public static $deny_bad_query_strings_marker_end = '#AIOWPS_DENY_BAD_QUERY_STRINGS_END';
|
24 |
-
|
25 |
-
public static $advanced_char_string_filter_marker_start = '#AIOWPS_ADVANCED_CHAR_STRING_FILTER_START';
|
26 |
-
public static $advanced_char_string_filter_marker_end = '#AIOWPS_ADVANCED_CHAR_STRING_FILTER_END';
|
27 |
-
|
28 |
-
public static $five_g_blacklist_marker_start = '#AIOWPS_FIVE_G_BLACKLIST_START';
|
29 |
-
public static $five_g_blacklist_marker_end = '#AIOWPS_FIVE_G_BLACKLIST_END';
|
30 |
-
|
31 |
-
// TODO - enter more markers as new .htaccess features are added
|
32 |
-
|
33 |
-
function __construct(){
|
34 |
-
//NOP
|
35 |
-
}
|
36 |
-
|
37 |
-
static function write_to_htaccess()
|
38 |
-
{
|
39 |
-
//clean up old rules first
|
40 |
-
if (AIOWPSecurity_Utility_Htaccess::delete_from_htaccess() == -1)
|
41 |
-
{
|
42 |
-
return -1; //unable to write to the file
|
43 |
-
}
|
44 |
-
|
45 |
-
$htaccess = ABSPATH . '.htaccess';
|
46 |
-
//get the subdirectory if it is installed in one
|
47 |
-
$siteurl = explode( '/', get_option( 'siteurl' ) );
|
48 |
-
if (isset($siteurl[3]))
|
49 |
-
{
|
50 |
-
$dir = '/' . $siteurl[3] . '/';
|
51 |
-
}
|
52 |
-
else
|
53 |
-
{
|
54 |
-
$dir = '/';
|
55 |
-
}
|
56 |
-
|
57 |
-
if (!$f = @fopen($htaccess, 'a+'))
|
58 |
-
{
|
59 |
-
@chmod( $htaccess, 0644 );
|
60 |
-
if (!$f = @fopen( $htaccess, 'a+'))
|
61 |
-
{
|
62 |
-
return -1;
|
63 |
-
}
|
64 |
-
}
|
65 |
-
AIOWPSecurity_Utility_File::backup_a_file($htaccess); //TODO - we dont want to continually be backing up the htaccess file
|
66 |
-
@ini_set( 'auto_detect_line_endings', true );
|
67 |
-
$ht = explode( PHP_EOL, implode( '', file( $htaccess ) ) ); //parse each line of file into array
|
68 |
-
|
69 |
-
$rules = AIOWPSecurity_Utility_Htaccess::getrules();
|
70 |
-
if ($rules == -1)
|
71 |
-
{
|
72 |
-
return -1;
|
73 |
-
}
|
74 |
-
|
75 |
-
$rulesarray = explode( PHP_EOL, $rules );
|
76 |
-
$contents = array_merge( $rulesarray, $ht );
|
77 |
-
|
78 |
-
if (!$f = @fopen($htaccess, 'w+'))
|
79 |
-
{
|
80 |
-
return -1; //we can't write to the file
|
81 |
-
}
|
82 |
-
|
83 |
-
$blank = false;
|
84 |
-
|
85 |
-
//write each line to file
|
86 |
-
foreach ( $contents as $insertline )
|
87 |
-
{
|
88 |
-
if ( trim( $insertline ) == '' )
|
89 |
-
{
|
90 |
-
if ( $blank == false )
|
91 |
-
{
|
92 |
-
fwrite( $f, PHP_EOL . trim( $insertline ) );
|
93 |
-
}
|
94 |
-
$blank = true;
|
95 |
-
}
|
96 |
-
else
|
97 |
-
{
|
98 |
-
$blank = false;
|
99 |
-
fwrite( $f, PHP_EOL . trim( $insertline ) );
|
100 |
-
}
|
101 |
-
}
|
102 |
-
@fclose( $f );
|
103 |
-
return 1; //success
|
104 |
-
}
|
105 |
-
|
106 |
-
/*
|
107 |
-
* This function will delete the code which has been added to the .htaccess file by this plugin
|
108 |
-
* It will try to find the comment markers "# BEGIN All In One WP Security" and "# END All In One WP Security" and delete contents in between
|
109 |
-
*/
|
110 |
-
function delete_from_htaccess($section = 'All In One WP Security')
|
111 |
-
{
|
112 |
-
//TODO
|
113 |
-
$htaccess = ABSPATH . '.htaccess';
|
114 |
-
|
115 |
-
@ini_set('auto_detect_line_endings', true);
|
116 |
-
if (!file_exists($htaccess))
|
117 |
-
{
|
118 |
-
$ht = @fopen($htaccess, 'a+');
|
119 |
-
@fclose($ht);
|
120 |
-
}
|
121 |
-
$ht_contents = explode(PHP_EOL, implode('', file($htaccess))); //parse each line of file into array
|
122 |
-
if ($ht_contents)
|
123 |
-
{ //as long as there are lines in the file
|
124 |
-
$state = true;
|
125 |
-
if (!$f = @fopen($htaccess, 'w+'))
|
126 |
-
{
|
127 |
-
@chmod( $htaccess, 0644 );
|
128 |
-
if (!$f = @fopen( $htaccess, 'w+'))
|
129 |
-
{
|
130 |
-
return -1;
|
131 |
-
}
|
132 |
-
}
|
133 |
-
|
134 |
-
foreach ( $ht_contents as $n => $markerline )
|
135 |
-
{ //for each line in the file
|
136 |
-
if (strpos($markerline, '# BEGIN ' . $section) !== false)
|
137 |
-
{ //if we're at the beginning of the section
|
138 |
-
$state = false;
|
139 |
-
}
|
140 |
-
if ($state == true)
|
141 |
-
{ //as long as we're not in the section keep writing
|
142 |
-
fwrite($f, trim($markerline) . PHP_EOL);
|
143 |
-
}
|
144 |
-
if (strpos($markerline, '# END ' . $section) !== false)
|
145 |
-
{ //see if we're at the end of the section
|
146 |
-
$state = true;
|
147 |
-
}
|
148 |
-
}
|
149 |
-
@fclose($f);
|
150 |
-
return 1;
|
151 |
-
}
|
152 |
-
return 1;
|
153 |
-
}
|
154 |
-
|
155 |
-
static function getrules()
|
156 |
-
{
|
157 |
-
$rules = "";
|
158 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::getrules_basic_htaccess();
|
159 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::getrules_blacklist();
|
160 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::getrules_disable_trace_and_track();
|
161 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::getrules_forbid_proxy_comment_posting();
|
162 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::getrules_deny_bad_query_strings();
|
163 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::getrules_advanced_character_string_filter();
|
164 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::getrules_5g_blacklist();
|
165 |
-
//TODO: The following utility functions are ready to use when we write the menu pages for these features
|
166 |
-
|
167 |
-
//Add more functions for features as needed
|
168 |
-
//$rules .= AIOWPSecurity_Utility_Htaccess::getrules_somefeature();
|
169 |
-
|
170 |
-
//Add outer markers if we have rules
|
171 |
-
if ($rules != '')
|
172 |
-
{
|
173 |
-
$rules = "# BEGIN All In One WP Security" . PHP_EOL . $rules . "# END All In One WP Security" . PHP_EOL;
|
174 |
-
}
|
175 |
-
|
176 |
-
return $rules;
|
177 |
-
}
|
178 |
-
|
179 |
-
static function getrules_blacklist()
|
180 |
-
{
|
181 |
-
global $aio_wp_security;
|
182 |
-
@ini_set( 'auto_detect_line_endings', true );
|
183 |
-
|
184 |
-
//figure out what server they're using
|
185 |
-
if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'apache'))
|
186 |
-
{
|
187 |
-
$aiowps_server = 'apache';
|
188 |
-
}
|
189 |
-
else if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'nginx'))
|
190 |
-
{
|
191 |
-
$aiowps_server = 'nginx';
|
192 |
-
}
|
193 |
-
else if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'litespeed'))
|
194 |
-
{
|
195 |
-
$aiowps_server = 'litespeed';
|
196 |
-
}
|
197 |
-
else
|
198 |
-
{ //unsupported server
|
199 |
-
return -1;
|
200 |
-
}
|
201 |
-
|
202 |
-
$rules = '';
|
203 |
-
if($aio_wp_security->configs->get_value('aiowps_enable_blacklisting')=='1')
|
204 |
-
{
|
205 |
-
//Let's do the list of blacklisted IPs first
|
206 |
-
$hosts = explode(PHP_EOL, $aio_wp_security->configs->get_value('aiowps_banned_ip_addresses'));
|
207 |
-
if (!empty($hosts) && !(sizeof($hosts) == 1 && trim($hosts[0]) == ''))
|
208 |
-
{
|
209 |
-
if ( $aiowps_server == 'apache' || $aiowps_server == 'litespeed' )
|
210 |
-
{
|
211 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::$ip_blacklist_marker_start . PHP_EOL; //Add feature marker start
|
212 |
-
$rules .= "Order allow,deny" . PHP_EOL .
|
213 |
-
"Allow from all" . PHP_EOL;
|
214 |
-
}
|
215 |
-
$phosts = array();
|
216 |
-
foreach ($hosts as $host)
|
217 |
-
{
|
218 |
-
$host = trim($host);
|
219 |
-
if (!in_array($host, $phosts))
|
220 |
-
{
|
221 |
-
if (strstr($host, '*'))
|
222 |
-
{
|
223 |
-
$parts = array_reverse (explode('.', $host));
|
224 |
-
$netmask = 32;
|
225 |
-
foreach ($parts as $part)
|
226 |
-
{
|
227 |
-
if (strstr(trim($part), '*'))
|
228 |
-
{
|
229 |
-
$netmask = $netmask - 8;
|
230 |
-
|
231 |
-
}
|
232 |
-
}
|
233 |
-
$dhost = trim( str_replace('*', '0', implode( '.', array_reverse( $parts ) ) ) . '/' . $netmask );
|
234 |
-
if (strlen($dhost) > 4)
|
235 |
-
{
|
236 |
-
if ($aiowps_server == 'apache' || $aiowps_server == 'litespeed')
|
237 |
-
{
|
238 |
-
$trule = "Deny from " . $dhost . PHP_EOL;
|
239 |
-
if (trim($trule) != 'Deny From')
|
240 |
-
{
|
241 |
-
$rules .= $trule;
|
242 |
-
}
|
243 |
-
}
|
244 |
-
else
|
245 |
-
{
|
246 |
-
$rules .= "\tdeny " . $dhost . ';' . PHP_EOL;
|
247 |
-
}
|
248 |
-
}
|
249 |
-
}
|
250 |
-
else
|
251 |
-
{
|
252 |
-
$dhost = trim( $host );
|
253 |
-
if (strlen($dhost) > 4)
|
254 |
-
{
|
255 |
-
if ($aiowps_server == 'apache' || $aiowps_server == 'litespeed' )
|
256 |
-
{
|
257 |
-
$rules .= "Deny from " . $dhost . PHP_EOL;
|
258 |
-
}
|
259 |
-
else
|
260 |
-
{
|
261 |
-
$rules .= "\tdeny " . $dhost. ";" . PHP_EOL;
|
262 |
-
}
|
263 |
-
}
|
264 |
-
}
|
265 |
-
}
|
266 |
-
$phosts[] = $host;
|
267 |
-
}
|
268 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::$ip_blacklist_marker_end . PHP_EOL; //Add feature marker end
|
269 |
-
}
|
270 |
-
//Now let's do the user agent list
|
271 |
-
$user_agents = explode(PHP_EOL, $aio_wp_security->configs->get_value('aiowps_banned_user_agents'));
|
272 |
-
if (!empty($user_agents) && !(sizeof($user_agents) == 1 && trim($user_agents[0]) == ''))
|
273 |
-
{
|
274 |
-
if ($aiowps_server == 'apache' || $aiowps_server == 'litespeed')
|
275 |
-
{
|
276 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::$user_agent_blacklist_marker_start . PHP_EOL; //Add feature marker start
|
277 |
-
//Start mod_rewrite rules
|
278 |
-
$rules .= "<IfModule mod_rewrite.c>" . PHP_EOL . "RewriteEngine On" . PHP_EOL . PHP_EOL;
|
279 |
-
$count = 1;
|
280 |
-
foreach ( $user_agents as $agent )
|
281 |
-
{
|
282 |
-
$rules .= "RewriteCond %{HTTP_USER_AGENT} ^" . trim( $agent );
|
283 |
-
if ( $count < sizeof( $user_agents ) )
|
284 |
-
{
|
285 |
-
$rules .= " [NC,OR]" . PHP_EOL;
|
286 |
-
$count++;
|
287 |
-
}
|
288 |
-
else
|
289 |
-
{
|
290 |
-
$rules .= " [NC]" . PHP_EOL;
|
291 |
-
}
|
292 |
-
|
293 |
-
}
|
294 |
-
$rules .= "RewriteRule ^(.*)$ - [F,L]" . PHP_EOL . PHP_EOL;
|
295 |
-
}
|
296 |
-
else
|
297 |
-
{
|
298 |
-
$count = 1;
|
299 |
-
$alist = '';
|
300 |
-
foreach ( $user_agents as $agent )
|
301 |
-
{
|
302 |
-
$alist .= trim( $agent );
|
303 |
-
if ( $count < sizeof( $user_agents ) )
|
304 |
-
{
|
305 |
-
$alist .= '|';
|
306 |
-
$count++;
|
307 |
-
}
|
308 |
-
}
|
309 |
-
$rules .= "\tif (\$http_user_agent ~* " . $alist . ") { return 403; }" . PHP_EOL;
|
310 |
-
}
|
311 |
-
}
|
312 |
-
|
313 |
-
//close mod_rewrite
|
314 |
-
if (strlen($aio_wp_security->configs->get_value('aiowps_banned_user_agents')) > 0)
|
315 |
-
{
|
316 |
-
if (($aiowps_server == 'apache' || $aiowps_server == 'litespeed'))
|
317 |
-
{
|
318 |
-
$rules .= "</IfModule>" . PHP_EOL;
|
319 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::$user_agent_blacklist_marker_end . PHP_EOL; //Add feature marker end
|
320 |
-
}
|
321 |
-
}
|
322 |
-
}
|
323 |
-
|
324 |
-
return implode( PHP_EOL, array_diff( explode( PHP_EOL, $rules ), array( 'Deny from ', 'Deny from' ) ) );
|
325 |
-
}
|
326 |
-
|
327 |
-
/*
|
328 |
-
* TODO - info
|
329 |
-
*/
|
330 |
-
static function getrules_basic_htaccess()
|
331 |
-
{
|
332 |
-
global $aio_wp_security;
|
333 |
-
@ini_set( 'auto_detect_line_endings', true );
|
334 |
-
|
335 |
-
//figure out what server they're using
|
336 |
-
if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'apache'))
|
337 |
-
{
|
338 |
-
$aiowps_server = 'apache';
|
339 |
-
}
|
340 |
-
else if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'nginx'))
|
341 |
-
{
|
342 |
-
$aiowps_server = 'nginx';
|
343 |
-
}
|
344 |
-
else if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'litespeed'))
|
345 |
-
{
|
346 |
-
$aiowps_server = 'litespeed';
|
347 |
-
}
|
348 |
-
else
|
349 |
-
{ //unsupported server
|
350 |
-
return -1;
|
351 |
-
}
|
352 |
-
|
353 |
-
$rules = '';
|
354 |
-
if($aio_wp_security->configs->get_value('aiowps_enable_basic_firewall')=='1')
|
355 |
-
{
|
356 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::$basic_htaccess_rules_marker_start . PHP_EOL; //Add feature marker start
|
357 |
-
//limit indexing of directories
|
358 |
-
$rules .= 'Options All -Indexes' . PHP_EOL;
|
359 |
-
//protect the htaccess file - this is done by default with apache config file but we are including it here for good measure
|
360 |
-
$rules .= '<files .htaccess>' . PHP_EOL;
|
361 |
-
$rules .= 'order allow,deny' . PHP_EOL;
|
362 |
-
$rules .= 'deny from all' . PHP_EOL;
|
363 |
-
$rules .= '</files>' . PHP_EOL;
|
364 |
-
|
365 |
-
//disable the server signature
|
366 |
-
$rules .= 'ServerSignature Off' . PHP_EOL;
|
367 |
-
|
368 |
-
//limit file uploads to 10mb
|
369 |
-
$rules .= 'LimitRequestBody 10240000' . PHP_EOL;
|
370 |
-
|
371 |
-
// protect wpconfig.php.
|
372 |
-
$rules .= '<files wp-config.php>' . PHP_EOL;
|
373 |
-
$rules .= 'order allow,deny' . PHP_EOL;
|
374 |
-
$rules .= 'deny from all' . PHP_EOL;
|
375 |
-
$rules .= '</files>' . PHP_EOL;
|
376 |
-
|
377 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::$basic_htaccess_rules_marker_end . PHP_EOL; //Add feature marker end
|
378 |
-
}
|
379 |
-
return $rules;
|
380 |
-
}
|
381 |
-
|
382 |
-
/*
|
383 |
-
* This function will write rules to disable trace and track.
|
384 |
-
* HTTP Trace attack (XST) can be used to return header requests
|
385 |
-
* and grab cookies and other information and is used along with
|
386 |
-
* a cross site scripting attacks (XSS)
|
387 |
-
*/
|
388 |
-
static function getrules_disable_trace_and_track()
|
389 |
-
{
|
390 |
-
global $aio_wp_security;
|
391 |
-
@ini_set( 'auto_detect_line_endings', true );
|
392 |
-
|
393 |
-
//figure out what server they're using
|
394 |
-
if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'apache'))
|
395 |
-
{
|
396 |
-
$aiowps_server = 'apache';
|
397 |
-
}
|
398 |
-
else if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'nginx'))
|
399 |
-
{
|
400 |
-
$aiowps_server = 'nginx';
|
401 |
-
}
|
402 |
-
else if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'litespeed'))
|
403 |
-
{
|
404 |
-
$aiowps_server = 'litespeed';
|
405 |
-
}
|
406 |
-
else
|
407 |
-
{ //unsupported server
|
408 |
-
return -1;
|
409 |
-
}
|
410 |
-
|
411 |
-
$rules = '';
|
412 |
-
if($aio_wp_security->configs->get_value('aiowps_disable_trace_and_track')=='1')
|
413 |
-
{
|
414 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::$disable_trace_track_marker_start . PHP_EOL; //Add feature marker start
|
415 |
-
$rules .= 'RewriteEngine On' . PHP_EOL;
|
416 |
-
$rules .= 'RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)' . PHP_EOL;
|
417 |
-
$rules .= 'RewriteRule .* - [F]' . PHP_EOL;
|
418 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::$disable_trace_track_marker_end . PHP_EOL; //Add feature marker end
|
419 |
-
}
|
420 |
-
|
421 |
-
return $rules;
|
422 |
-
}
|
423 |
-
|
424 |
-
/*
|
425 |
-
* This function will write rules to prevent proxy comment posting.
|
426 |
-
* This will deny any requests that use a proxy server when posting
|
427 |
-
* to comments eliminating some spam and proxy requests, script
|
428 |
-
* courtesy of perishablepress.com
|
429 |
-
*/
|
430 |
-
static function getrules_forbid_proxy_comment_posting()
|
431 |
-
{
|
432 |
-
global $aio_wp_security;
|
433 |
-
@ini_set( 'auto_detect_line_endings', true );
|
434 |
-
|
435 |
-
//figure out what server they're using
|
436 |
-
if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'apache'))
|
437 |
-
{
|
438 |
-
$aiowps_server = 'apache';
|
439 |
-
}
|
440 |
-
else if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'nginx'))
|
441 |
-
{
|
442 |
-
$aiowps_server = 'nginx';
|
443 |
-
}
|
444 |
-
else if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'litespeed'))
|
445 |
-
{
|
446 |
-
$aiowps_server = 'litespeed';
|
447 |
-
}
|
448 |
-
else
|
449 |
-
{ //unsupported server
|
450 |
-
return -1;
|
451 |
-
}
|
452 |
-
|
453 |
-
$rules = '';
|
454 |
-
if($aio_wp_security->configs->get_value('aiowps_forbid_proxy_comments')=='1')
|
455 |
-
{
|
456 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::$forbid_proxy_comments_marker_start . PHP_EOL; //Add feature marker start
|
457 |
-
$rules .= 'RewriteCond %{REQUEST_METHOD} =POST' . PHP_EOL;
|
458 |
-
$rules .= 'RewriteCond %{HTTP:VIA}%{HTTP:FORWARDED}%{HTTP:USERAGENT_VIA}%{HTTP:X_FORWARDED_FOR}%{HTTP:PROXY_CONNECTION} !^$ [OR]' . PHP_EOL;
|
459 |
-
$rules .= 'RewriteCond %{HTTP:XPROXY_CONNECTION}%{HTTP:HTTP_PC_REMOTE_ADDR}%{HTTP:HTTP_CLIENT_IP} !^$' . PHP_EOL;
|
460 |
-
$rules .= 'RewriteCond %{REQUEST_URI} !^/(wp-login.php|wp-admin/|wp-content/plugins/|wp-includes/).* [NC]' . PHP_EOL;
|
461 |
-
$rules .= 'RewriteRule .* - [F,NS,L]' . PHP_EOL;
|
462 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::$forbid_proxy_comments_marker_end . PHP_EOL; //Add feature marker end
|
463 |
-
}
|
464 |
-
|
465 |
-
return $rules;
|
466 |
-
}
|
467 |
-
|
468 |
-
/*
|
469 |
-
* This function will write rules to prevent malicious string attacks on your site using XSS.
|
470 |
-
* NOTE: Some of these strings might be used for plugins or themes and doing so will disable the functionality.
|
471 |
-
* This script is from perishablepress and is fairly safe to use and should not break anything important
|
472 |
-
*/
|
473 |
-
//TODO - the currently commented out rules (see function below) break the site - need to investigate why or if we can tweak the rules a bit
|
474 |
-
static function getrules_deny_bad_query_strings()
|
475 |
-
{
|
476 |
-
global $aio_wp_security;
|
477 |
-
@ini_set( 'auto_detect_line_endings', true );
|
478 |
-
|
479 |
-
//figure out what server they're using
|
480 |
-
if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'apache'))
|
481 |
-
{
|
482 |
-
$aiowps_server = 'apache';
|
483 |
-
}
|
484 |
-
else if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'nginx'))
|
485 |
-
{
|
486 |
-
$aiowps_server = 'nginx';
|
487 |
-
}
|
488 |
-
else if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'litespeed'))
|
489 |
-
{
|
490 |
-
$aiowps_server = 'litespeed';
|
491 |
-
}
|
492 |
-
else
|
493 |
-
{ //unsupported server
|
494 |
-
return -1;
|
495 |
-
}
|
496 |
-
|
497 |
-
$rules = '';
|
498 |
-
if($aio_wp_security->configs->get_value('aiowps_deny_bad_query_strings')=='1')
|
499 |
-
{
|
500 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::$deny_bad_query_strings_marker_start . PHP_EOL; //Add feature marker start
|
501 |
-
$rules .= 'RewriteCond %{QUERY_STRING} ../ [NC,OR]' . PHP_EOL;
|
502 |
-
//$rules .= 'RewriteCond %{QUERY_STRING} boot.ini [NC,OR]' . PHP_EOL;
|
503 |
-
$rules .= 'RewriteCond %{QUERY_STRING} tag= [NC,OR]' . PHP_EOL;
|
504 |
-
$rules .= 'RewriteCond %{QUERY_STRING} ftp: [NC,OR]' . PHP_EOL;
|
505 |
-
$rules .= 'RewriteCond %{QUERY_STRING} http: [NC,OR]' . PHP_EOL;
|
506 |
-
$rules .= 'RewriteCond %{QUERY_STRING} https: [NC,OR]' . PHP_EOL;
|
507 |
-
$rules .= 'RewriteCond %{QUERY_STRING} mosConfig [NC,OR]' . PHP_EOL;
|
508 |
-
//$rules .= 'RewriteCond %{QUERY_STRING} ^.*([|]|(|)||\'|"|;|?|*).* [NC,OR]' . PHP_EOL;
|
509 |
-
//$rules .= 'RewriteCond %{QUERY_STRING} ^.*(%22|%27|%3C|%3E|%5C|%7B|%7C).* [NC,OR]' . PHP_EOL;
|
510 |
-
//$rules .= 'RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127.0).* [NC,OR]' . PHP_EOL;
|
511 |
-
$rules .= 'RewriteCond %{QUERY_STRING} ^.*(globals|encode|config|localhost|loopback).* [NC,OR]' . PHP_EOL;
|
512 |
-
$rules .= 'RewriteCond %{QUERY_STRING} ^.*(request|select|insert|union|declare|drop).* [NC]' . PHP_EOL;
|
513 |
-
$rules .= 'RewriteRule ^(.*)$ - [F,L]' . PHP_EOL;
|
514 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::$deny_bad_query_strings_marker_end . PHP_EOL; //Add feature marker end
|
515 |
-
}
|
516 |
-
|
517 |
-
return $rules;
|
518 |
-
}
|
519 |
-
|
520 |
-
/*
|
521 |
-
* This function will write rules to produce an advanced character string filter to prevent malicious string attacks from Cross Site Scripting (XSS)
|
522 |
-
* NOTE: Some of these strings might be used for plugins or themes and doing so will disable the functionality.
|
523 |
-
* This script is from perishablepress and is fairly safe to use and should not break anything important
|
524 |
-
*/
|
525 |
-
//TODO - the rules below break the site - need to investigate why or if we can tweak the rules a bit
|
526 |
-
//RedirectMatch 403 ^
|
527 |
-
//RedirectMatch 403 $
|
528 |
-
//RedirectMatch 403 |
|
529 |
-
//RedirectMatch 403 ..
|
530 |
-
//Redirectmatch 403 select(
|
531 |
-
//Redirectmatch 403 convert(
|
532 |
-
//RedirectMatch 403 .inc
|
533 |
-
//RedirectMatch 403 include.
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
static function getrules_advanced_character_string_filter()
|
539 |
-
{
|
540 |
-
global $aio_wp_security;
|
541 |
-
@ini_set( 'auto_detect_line_endings', true );
|
542 |
-
|
543 |
-
//figure out what server they're using
|
544 |
-
if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'apache'))
|
545 |
-
{
|
546 |
-
$aiowps_server = 'apache';
|
547 |
-
}
|
548 |
-
else if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'nginx'))
|
549 |
-
{
|
550 |
-
$aiowps_server = 'nginx';
|
551 |
-
}
|
552 |
-
else if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'litespeed'))
|
553 |
-
{
|
554 |
-
$aiowps_server = 'litespeed';
|
555 |
-
}
|
556 |
-
else
|
557 |
-
{ //unsupported server
|
558 |
-
return -1;
|
559 |
-
}
|
560 |
-
|
561 |
-
$rules = '';
|
562 |
-
if($aio_wp_security->configs->get_value('aiowps_advanced_char_string_filter')=='1')
|
563 |
-
{
|
564 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::$advanced_char_string_filter_marker_start . PHP_EOL; //Add feature marker start
|
565 |
-
|
566 |
-
$rules .= '<IfModule mod_alias.c>
|
567 |
-
RedirectMatch 403 `
|
568 |
-
RedirectMatch 403 {
|
569 |
-
RedirectMatch 403 }
|
570 |
-
RedirectMatch 403 ~
|
571 |
-
RedirectMatch 403 "
|
572 |
-
RedirectMatch 403 <
|
573 |
-
RedirectMatch 403 >
|
574 |
-
RedirectMatch 403 //
|
575 |
-
RedirectMatch 403 %0
|
576 |
-
RedirectMatch 403 %A
|
577 |
-
RedirectMatch 403 %B
|
578 |
-
RedirectMatch 403 %C
|
579 |
-
RedirectMatch 403 %D
|
580 |
-
RedirectMatch 403 %E
|
581 |
-
RedirectMatch 403 %F
|
582 |
-
RedirectMatch 403 %22
|
583 |
-
RedirectMatch 403 %27
|
584 |
-
RedirectMatch 403 %28
|
585 |
-
RedirectMatch 403 %29
|
586 |
-
RedirectMatch 403 %3C
|
587 |
-
RedirectMatch 403 %3E
|
588 |
-
RedirectMatch 403 %3F
|
589 |
-
RedirectMatch 403 %5B
|
590 |
-
RedirectMatch 403 %5C
|
591 |
-
RedirectMatch 403 %5D
|
592 |
-
RedirectMatch 403 %7B
|
593 |
-
RedirectMatch 403 %7C
|
594 |
-
RedirectMatch 403 %7D
|
595 |
-
# COMMON PATTERNS
|
596 |
-
Redirectmatch 403 _vpi
|
597 |
-
Redirectmatch 403 xAou6
|
598 |
-
Redirectmatch 403 db_name
|
599 |
-
Redirectmatch 403 /query/
|
600 |
-
RedirectMatch 403 ImpEvData
|
601 |
-
Redirectmatch 403 .XMLHTTP
|
602 |
-
Redirectmatch 403 proxydeny
|
603 |
-
RedirectMatch 403 function.
|
604 |
-
Redirectmatch 403 remoteFile
|
605 |
-
Redirectmatch 403 servername
|
606 |
-
Redirectmatch 403 &rptmode=
|
607 |
-
Redirectmatch 403 sys_cpanel
|
608 |
-
RedirectMatch 403 db_connect
|
609 |
-
RedirectMatch 403 doeditconfig
|
610 |
-
RedirectMatch 403 check_proxy
|
611 |
-
Redirectmatch 403 system_user
|
612 |
-
Redirectmatch 403 /(null)/
|
613 |
-
Redirectmatch 403 clientrequest
|
614 |
-
Redirectmatch 403 option_value
|
615 |
-
RedirectMatch 403 ref.outcontrol
|
616 |
-
# SPECIFIC EXPLOITS
|
617 |
-
RedirectMatch 403 errors.
|
618 |
-
RedirectMatch 403 config.
|
619 |
-
RedirectMatch 403 display.
|
620 |
-
RedirectMatch 403 register.
|
621 |
-
Redirectmatch 403 password.
|
622 |
-
RedirectMatch 403 maincore.
|
623 |
-
RedirectMatch 403 authorize.
|
624 |
-
Redirectmatch 403 macromates.
|
625 |
-
RedirectMatch 403 head_auth.
|
626 |
-
RedirectMatch 403 submit_links.
|
627 |
-
RedirectMatch 403 change_action.
|
628 |
-
Redirectmatch 403 com_facileforms/
|
629 |
-
RedirectMatch 403 admin_db_utilities.
|
630 |
-
RedirectMatch 403 admin.webring.docs.
|
631 |
-
Redirectmatch 403 Table/Latest/index.
|
632 |
-
</IfModule>' . PHP_EOL;
|
633 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::$advanced_char_string_filter_marker_end . PHP_EOL; //Add feature marker end
|
634 |
-
}
|
635 |
-
|
636 |
-
return $rules;
|
637 |
-
}
|
638 |
-
|
639 |
-
/*
|
640 |
-
* This function contains the rules for the 5G blacklist produced by Jeff Starr from perishablepress.com
|
641 |
-
* NOTE: Since Jeff regularly updates and evolves his blacklist rules, ie, 5G->6G->7G.... we will update this function to reflect the latest blacklist release
|
642 |
-
*/
|
643 |
-
|
644 |
-
|
645 |
-
static function getrules_5g_blacklist()
|
646 |
-
{
|
647 |
-
global $aio_wp_security;
|
648 |
-
@ini_set( 'auto_detect_line_endings', true );
|
649 |
-
|
650 |
-
//figure out what server they're using
|
651 |
-
if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'apache'))
|
652 |
-
{
|
653 |
-
$aiowps_server = 'apache';
|
654 |
-
}
|
655 |
-
else if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'nginx'))
|
656 |
-
{
|
657 |
-
$aiowps_server = 'nginx';
|
658 |
-
}
|
659 |
-
else if (strstr(strtolower(filter_var($_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING)), 'litespeed'))
|
660 |
-
{
|
661 |
-
$aiowps_server = 'litespeed';
|
662 |
-
}
|
663 |
-
else
|
664 |
-
{ //unsupported server
|
665 |
-
return -1;
|
666 |
-
}
|
667 |
-
|
668 |
-
$rules = '';
|
669 |
-
if($aio_wp_security->configs->get_value('aiowps_enable_5g_firewall')=='1')
|
670 |
-
{
|
671 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::$five_g_blacklist_marker_start . PHP_EOL; //Add feature marker start
|
672 |
-
|
673 |
-
$rules .= '# 5G BLACKLIST/FIREWALL (2013)
|
674 |
-
# @ http://perishablepress.com/5g-blacklist-2013/
|
675 |
-
|
676 |
-
# 5G:[QUERY STRINGS]
|
677 |
-
<IfModule mod_rewrite.c>
|
678 |
-
RewriteEngine On
|
679 |
-
RewriteBase /
|
680 |
-
RewriteCond %{QUERY_STRING} (\"|%22).*(<|>|%3) [NC,OR]
|
681 |
-
RewriteCond %{QUERY_STRING} (javascript:).*(\;) [NC,OR]
|
682 |
-
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3) [NC,OR]
|
683 |
-
RewriteCond %{QUERY_STRING} (\\|\.\./|`|=\'$|=%27$) [NC,OR]
|
684 |
-
RewriteCond %{QUERY_STRING} (\;|\'|\"|%22).*(union|select|insert|drop|update|md5|benchmark|or|and|if) [NC,OR]
|
685 |
-
RewriteCond %{QUERY_STRING} (base64_encode|localhost|mosconfig) [NC,OR]
|
686 |
-
RewriteCond %{QUERY_STRING} (boot\.ini|echo.*kae|etc/passwd) [NC,OR]
|
687 |
-
RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC]
|
688 |
-
RewriteRule .* - [F]
|
689 |
-
</IfModule>
|
690 |
-
|
691 |
-
# 5G:[USER AGENTS]
|
692 |
-
<IfModule mod_setenvif.c>
|
693 |
-
# SetEnvIfNoCase User-Agent ^$ keep_out
|
694 |
-
SetEnvIfNoCase User-Agent (binlar|casper|cmsworldmap|comodo|diavol|dotbot|feedfinder|flicky|ia_archiver|jakarta|kmccrew|nutch|planetwork|purebot|pycurl|skygrid|sucker|turnit|vikspider|zmeu) keep_out
|
695 |
-
<limit GET POST PUT>
|
696 |
-
Order Allow,Deny
|
697 |
-
Allow from all
|
698 |
-
Deny from env=keep_out
|
699 |
-
</limit>
|
700 |
-
</IfModule>
|
701 |
-
|
702 |
-
# 5G:[REQUEST STRINGS]
|
703 |
-
<IfModule mod_alias.c>
|
704 |
-
RedirectMatch 403 (https?|ftp|php)\://
|
705 |
-
RedirectMatch 403 /(https?|ima|ucp)/
|
706 |
-
RedirectMatch 403 /(Permanent|Better)$
|
707 |
-
RedirectMatch 403 (\=\\\'|\=\\%27|/\\\'/?|\)\.css\()$
|
708 |
-
RedirectMatch 403 (\,|\)\+|/\,/|\{0\}|\(/\(|\.\.\.|\+\+\+|\||\\\"\\\")
|
709 |
-
RedirectMatch 403 \.(cgi|asp|aspx|cfg|dll|exe|jsp|mdb|sql|ini|rar)$
|
710 |
-
RedirectMatch 403 /(contac|fpw|install|pingserver|register)\.php$
|
711 |
-
RedirectMatch 403 (base64|crossdomain|localhost|wwwroot|e107\_)
|
712 |
-
RedirectMatch 403 (eval\(|\_vti\_|\(null\)|echo.*kae|config\.xml)
|
713 |
-
RedirectMatch 403 \.well\-known/host\-meta
|
714 |
-
RedirectMatch 403 /function\.array\-rand
|
715 |
-
RedirectMatch 403 \)\;\$\(this\)\.html\(
|
716 |
-
RedirectMatch 403 proc/self/environ
|
717 |
-
RedirectMatch 403 msnbot\.htm\)\.\_
|
718 |
-
RedirectMatch 403 /ref\.outcontrol
|
719 |
-
RedirectMatch 403 com\_cropimage
|
720 |
-
RedirectMatch 403 indonesia\.htm
|
721 |
-
RedirectMatch 403 \{\$itemURL\}
|
722 |
-
RedirectMatch 403 function\(\)
|
723 |
-
RedirectMatch 403 labels\.rdf
|
724 |
-
RedirectMatch 403 /playing.php
|
725 |
-
RedirectMatch 403 muieblackcat
|
726 |
-
</IfModule>
|
727 |
-
|
728 |
-
# 5G:[REQUEST METHOD]
|
729 |
-
<ifModule mod_rewrite.c>
|
730 |
-
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
|
731 |
-
RewriteRule .* - [F]
|
732 |
-
</IfModule>
|
733 |
-
|
734 |
-
# 5G:[BAD IPS]
|
735 |
-
<limit GET POST PUT>
|
736 |
-
Order Allow,Deny
|
737 |
-
Allow from all
|
738 |
-
# uncomment/edit/repeat next line to block IPs
|
739 |
-
# Deny from 123.456.789
|
740 |
-
</limit>' . PHP_EOL;
|
741 |
-
$rules .= AIOWPSecurity_Utility_Htaccess::$five_g_blacklist_marker_end . PHP_EOL; //Add feature marker end
|
742 |
-
}
|
743 |
-
|
744 |
-
return $rules;
|
745 |
-
}
|
746 |
-
|
747 |
-
/*
|
748 |
-
* This function will do a quick check to see if a file's contents are actually .htaccess specific.
|
749 |
-
* At the moment it will look for the following tag somewhere in the file - "# BEGIN WordPress"
|
750 |
-
* If it finds the tag it will deem the file as being .htaccess specific.
|
751 |
-
* This was written to supplement the .htaccess restore functionality
|
752 |
-
*/
|
753 |
-
|
754 |
-
static function check_if_htaccess_contents($file)
|
755 |
-
{
|
756 |
-
$is_htaccess = false;
|
757 |
-
$file_contents = file_get_contents($file);
|
758 |
-
|
759 |
-
if (!$file_contents || $file_contents == 0)
|
760 |
-
{
|
761 |
-
return -1;
|
762 |
-
}
|
763 |
-
|
764 |
-
if ((strpos($file_contents, '# BEGIN WordPress') !== false) || (strpos($file_contents, '# BEGIN') !== false))
|
765 |
-
{
|
766 |
-
$is_htaccess = true; //It appears that we have some sort of .htacces file
|
767 |
-
}
|
768 |
-
else
|
769 |
-
{
|
770 |
-
//see if we're at the end of the section
|
771 |
-
$is_htaccess = false;
|
772 |
-
}
|
773 |
-
|
774 |
-
if ($is_htaccess)
|
775 |
-
{
|
776 |
-
return 1;
|
777 |
-
}
|
778 |
-
else
|
779 |
-
{
|
780 |
-
return -1;
|
781 |
-
}
|
782 |
-
}
|
783 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/classes/wp-security-utility-ip-address.php
DELETED
@@ -1,146 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_Utility_IP
|
4 |
-
{
|
5 |
-
function __construct(){
|
6 |
-
//NOP
|
7 |
-
}
|
8 |
-
|
9 |
-
static function get_user_ip_address()
|
10 |
-
{
|
11 |
-
//Let's try getting the headers if possible
|
12 |
-
if ( function_exists( 'apache_request_headers' ) ) {
|
13 |
-
$headers = apache_request_headers();
|
14 |
-
} else {
|
15 |
-
$headers = $_SERVER;
|
16 |
-
}
|
17 |
-
|
18 |
-
//Get the forwarded IP if it exists
|
19 |
-
if (array_key_exists( 'X-Forwarded-For', $headers) ) {
|
20 |
-
$userIP = $headers['X-Forwarded-For'];
|
21 |
-
} else {
|
22 |
-
$userIP = $_SERVER['REMOTE_ADDR'];
|
23 |
-
}
|
24 |
-
return $userIP;
|
25 |
-
}
|
26 |
-
|
27 |
-
static function create_ip_list_array_from_string_with_newline($ip_addresses)
|
28 |
-
{
|
29 |
-
$ip_list_array = explode(PHP_EOL, $ip_addresses);
|
30 |
-
return $ip_list_array;
|
31 |
-
}
|
32 |
-
|
33 |
-
static function validate_ip_list($ip_list_array)
|
34 |
-
{
|
35 |
-
@ini_set('auto_detect_line_endings', true);
|
36 |
-
$errors = '';
|
37 |
-
|
38 |
-
//validate list
|
39 |
-
$submitted_ips = $ip_list_array;
|
40 |
-
$list = array();
|
41 |
-
|
42 |
-
if(!empty($submitted_ips))
|
43 |
-
{
|
44 |
-
foreach($submitted_ips as $item)
|
45 |
-
{
|
46 |
-
$item = filter_var($item, FILTER_SANITIZE_STRING);
|
47 |
-
if (strlen( $item ) > 0)
|
48 |
-
{
|
49 |
-
$ipParts = explode('.', $item);
|
50 |
-
$isIP = 0;
|
51 |
-
$partcount = 1;
|
52 |
-
$goodip = true;
|
53 |
-
$foundwild = false;
|
54 |
-
|
55 |
-
if (count($ipParts) < 2)
|
56 |
-
{
|
57 |
-
$errors .= '<p>'.$item.__(' is not a valid ip address format.', 'aiowpsecurity').'</p>';
|
58 |
-
continue;
|
59 |
-
}
|
60 |
-
|
61 |
-
foreach ($ipParts as $part)
|
62 |
-
{
|
63 |
-
if ($goodip == true)
|
64 |
-
{
|
65 |
-
if ((is_numeric(trim($part)) && trim($part) <= 255 && trim($part) >= 0) || trim($part) == '*')
|
66 |
-
{
|
67 |
-
$isIP++;
|
68 |
-
}
|
69 |
-
|
70 |
-
switch ($partcount)
|
71 |
-
{
|
72 |
-
case 1:
|
73 |
-
if (trim($part) == '*')
|
74 |
-
{
|
75 |
-
$goodip = false;
|
76 |
-
$errors .= '<p>'.$item.__(' is not a valid ip address format.', 'aiowpsecurity').'</p>';
|
77 |
-
}
|
78 |
-
break;
|
79 |
-
case 2:
|
80 |
-
if (trim($part) == '*')
|
81 |
-
{
|
82 |
-
$foundwild = true;
|
83 |
-
}
|
84 |
-
break;
|
85 |
-
default:
|
86 |
-
if (trim($part) != '*')
|
87 |
-
{
|
88 |
-
if ($foundwild == true)
|
89 |
-
{
|
90 |
-
$goodip = false;
|
91 |
-
$errors .= '<p>'.$item.__(' is not a valid ip address format.', 'aiowpsecurity').'</p>';
|
92 |
-
}
|
93 |
-
}
|
94 |
-
else
|
95 |
-
{
|
96 |
-
$foundwild = true;
|
97 |
-
}
|
98 |
-
break;
|
99 |
-
}
|
100 |
-
|
101 |
-
$partcount++;
|
102 |
-
}
|
103 |
-
}
|
104 |
-
if (ip2long(trim(str_replace('*', '0', $item))) == false)
|
105 |
-
{ //invalid ip
|
106 |
-
$errors .= '<p>'.$item.__(' is not a valid ip address format.', 'aiowpsecurity').'</p>';
|
107 |
-
}
|
108 |
-
elseif (strlen($item > 4 && !in_array($item, $list)))
|
109 |
-
{
|
110 |
-
$current_user_ip = AIOWPSecurity_Utility_IP::get_user_ip_address();
|
111 |
-
if ($current_user_ip == $item)
|
112 |
-
{
|
113 |
-
//You can't ban your own IP
|
114 |
-
$errors .= '<p>'.__('You cannot ban your own IP address: ', 'aiowpsecurity').$item.'</p>';
|
115 |
-
}
|
116 |
-
else
|
117 |
-
{
|
118 |
-
$list[] = trim($item);
|
119 |
-
}
|
120 |
-
}
|
121 |
-
}
|
122 |
-
}
|
123 |
-
}
|
124 |
-
else{
|
125 |
-
//This function was called with an empty IP address array list
|
126 |
-
}
|
127 |
-
|
128 |
-
if (strlen($errors)> 0)
|
129 |
-
{
|
130 |
-
$return_payload = array(-1, array($errors));
|
131 |
-
return $return_payload;
|
132 |
-
}
|
133 |
-
|
134 |
-
if (sizeof($list) >= 1)
|
135 |
-
{
|
136 |
-
sort($list);
|
137 |
-
$list = array_unique($list, SORT_STRING);
|
138 |
-
|
139 |
-
$return_payload = array(1, $list);
|
140 |
-
return $return_payload;
|
141 |
-
}
|
142 |
-
|
143 |
-
$return_payload = array(1, array());
|
144 |
-
return $return_payload;
|
145 |
-
}
|
146 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/classes/wp-security-utility.php
DELETED
@@ -1,105 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_Utility
|
4 |
-
{
|
5 |
-
function __construct(){
|
6 |
-
//NOP
|
7 |
-
}
|
8 |
-
|
9 |
-
static function get_current_page_url()
|
10 |
-
{
|
11 |
-
$pageURL = 'http';
|
12 |
-
if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
|
13 |
-
$pageURL .= "://";
|
14 |
-
if ($_SERVER["SERVER_PORT"] != "80") {
|
15 |
-
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
|
16 |
-
}
|
17 |
-
else{
|
18 |
-
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
|
19 |
-
}
|
20 |
-
return $pageURL;
|
21 |
-
}
|
22 |
-
|
23 |
-
static function redirect_to_url($url,$delay='0',$exit='1')
|
24 |
-
{
|
25 |
-
if(empty($url)){
|
26 |
-
echo "<br /><strong>Error! The URL value is empty. Please specify a correct URL value to redirect to!</strong>";
|
27 |
-
exit;
|
28 |
-
}
|
29 |
-
if (!headers_sent()){
|
30 |
-
header('Location: ' . $url);
|
31 |
-
}
|
32 |
-
else{
|
33 |
-
echo '<meta http-equiv="refresh" content="'.$delay.';url='.$url.'" />';
|
34 |
-
}
|
35 |
-
if($exit == '1'){
|
36 |
-
exit;
|
37 |
-
}
|
38 |
-
}
|
39 |
-
|
40 |
-
static function get_logout_url_with_after_logout_url_value($after_logout_url)
|
41 |
-
{
|
42 |
-
return AIOWPSEC_WP_URL.'?aiowpsec_do_log_out=1&after_logout='.$after_logout_url;
|
43 |
-
}
|
44 |
-
|
45 |
-
/*
|
46 |
-
* Checks if a particular username exists in the WP Users table
|
47 |
-
*/
|
48 |
-
static function check_user_exists($username)
|
49 |
-
{
|
50 |
-
global $wpdb;
|
51 |
-
|
52 |
-
//if username is empty just return false
|
53 |
-
if ( $username == '' ) {
|
54 |
-
return false;
|
55 |
-
}
|
56 |
-
|
57 |
-
//check users table
|
58 |
-
$user = $wpdb->get_var( "SELECT user_login FROM `" . $wpdb->users . "` WHERE user_login='" . sanitize_text_field( $username ) . "';" );
|
59 |
-
$userid = $wpdb->get_var( "SELECT ID FROM `" . $wpdb->users . "` WHERE ID='" . sanitize_text_field( $username ) . "';" );
|
60 |
-
|
61 |
-
if ( $user == $username || $userid == $username ) {
|
62 |
-
return true;
|
63 |
-
} else {
|
64 |
-
return false;
|
65 |
-
}
|
66 |
-
}
|
67 |
-
|
68 |
-
/*
|
69 |
-
* This function will return a list of user accounts which have login and nick names which are identical
|
70 |
-
*/
|
71 |
-
static function check_identical_login_and_nick_names() {
|
72 |
-
global $wpdb;
|
73 |
-
$accounts_found = $wpdb->get_results( "SELECT ID,user_login FROM `" . $wpdb->users . "` WHERE user_login<=>display_name;", ARRAY_A);
|
74 |
-
return $accounts_found;
|
75 |
-
}
|
76 |
-
|
77 |
-
|
78 |
-
static function add_query_data_to_url($url, $name, $value)
|
79 |
-
{
|
80 |
-
if (strpos($url, '?') === false) {
|
81 |
-
$url .= '?';
|
82 |
-
} else {
|
83 |
-
$url .= '&';
|
84 |
-
}
|
85 |
-
$url .= $name . '='. $value;
|
86 |
-
return $url;
|
87 |
-
}
|
88 |
-
|
89 |
-
|
90 |
-
/*
|
91 |
-
* Generates a random alpha-numeric number
|
92 |
-
*/
|
93 |
-
static function generate_alpha_numeric_random_string($string_length)
|
94 |
-
{
|
95 |
-
//Charecters present in table prefix
|
96 |
-
$allowed_chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
97 |
-
$string = '';
|
98 |
-
//Generate random string
|
99 |
-
for ($i = 0; $i < $string_length; $i++) {
|
100 |
-
$string .= $allowed_chars[rand(0, strlen($allowed_chars) - 1)];
|
101 |
-
}
|
102 |
-
return $string;
|
103 |
-
}
|
104 |
-
|
105 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/css/wp-security-admin-styles.css
DELETED
@@ -1,255 +0,0 @@
|
|
1 |
-
.aio_half_width{width: 50%;}
|
2 |
-
.aio_one_third_width{width: 33%;}
|
3 |
-
.aio_width_80{width: 80%;}
|
4 |
-
.aio_max_500{max-width: 500px;}
|
5 |
-
.aio_spacer_15{margin-top:15px;}
|
6 |
-
.aio_spacer_10_tb{margin:10px 0;}
|
7 |
-
.aio_spacer_10_tblr{margin:10px;}
|
8 |
-
.aio_clear_float{clear: both;}
|
9 |
-
.aio_float_left{float: left;}
|
10 |
-
|
11 |
-
.aiowps_admin_ul_grp1{
|
12 |
-
list-style: circle;
|
13 |
-
padding: 0 0 0 30px;
|
14 |
-
}
|
15 |
-
|
16 |
-
.aio_grey_box{
|
17 |
-
margin: 10px 0 15px;
|
18 |
-
background-color: #ECECEC;
|
19 |
-
border: 1px solid #CFCFCF;
|
20 |
-
padding: 0 0 0 1em;
|
21 |
-
}
|
22 |
-
|
23 |
-
.aio_yellow_box{
|
24 |
-
margin: 10px 0 15px;
|
25 |
-
background-color: #FFFFE0;
|
26 |
-
border-color: #E6DB55;
|
27 |
-
border-radius: 3px 3px 3px 3px;
|
28 |
-
border-style: solid;
|
29 |
-
border-width: 1px;
|
30 |
-
padding: 0 0 0 1em;
|
31 |
-
}
|
32 |
-
|
33 |
-
.aio_blue_box{
|
34 |
-
margin: 10px 0 15px;
|
35 |
-
background-color: #F0F9FF;
|
36 |
-
border-color: #1166BB;
|
37 |
-
color: #1166BB;
|
38 |
-
border-radius: 3px 3px 3px 3px;
|
39 |
-
border-style: solid;
|
40 |
-
border-width: 1px;
|
41 |
-
padding: 0 0 0 1em;
|
42 |
-
line-height: 20px;
|
43 |
-
}
|
44 |
-
|
45 |
-
.aio_green_box {
|
46 |
-
margin: 10px 0 15px;
|
47 |
-
background-color: #CCF4D6;
|
48 |
-
border-color: #059B53;
|
49 |
-
color: #043B14;
|
50 |
-
border-radius: 3px 3px 3px 3px;
|
51 |
-
border-style: solid;
|
52 |
-
border-width: 1px;
|
53 |
-
padding: 0 0 0 1em;
|
54 |
-
}
|
55 |
-
|
56 |
-
.aio_red_box {
|
57 |
-
margin: 10px 0 15px;
|
58 |
-
background-color: #FFEBE8;
|
59 |
-
border-color: #CC0000;
|
60 |
-
color: #333333;
|
61 |
-
border-radius: 3px 3px 3px 3px;
|
62 |
-
border-style: solid;
|
63 |
-
border-width: 1px;
|
64 |
-
padding: 0 0 0 1em;
|
65 |
-
}
|
66 |
-
|
67 |
-
.aio_success_with_icon {
|
68 |
-
background-image: url("../images/success.png");
|
69 |
-
background-repeat: no-repeat;
|
70 |
-
color: #529901;
|
71 |
-
padding-left: 20px;
|
72 |
-
font-size: 14px;
|
73 |
-
}
|
74 |
-
.aio_error_with_icon {
|
75 |
-
color: #ff0000;
|
76 |
-
background-image: url("../images/error.png");
|
77 |
-
background-repeat: no-repeat;
|
78 |
-
padding-left: 20px;
|
79 |
-
font-size: 14px;
|
80 |
-
}
|
81 |
-
.aio_info_with_icon {
|
82 |
-
background-image: url("../images/info-icon.png");
|
83 |
-
background-repeat: no-repeat;
|
84 |
-
color: #1166BB;
|
85 |
-
padding-left: 20px;
|
86 |
-
font-size: 14px;
|
87 |
-
}
|
88 |
-
|
89 |
-
.file_permission_table{
|
90 |
-
margin: 20px 0;
|
91 |
-
}
|
92 |
-
.file_permission_table thead tr th{
|
93 |
-
background:#CCCCCC;
|
94 |
-
}
|
95 |
-
.file_permission_table td{
|
96 |
-
padding: 7px;
|
97 |
-
font-family: "Courier 10 Pitch",Courier,monospace;
|
98 |
-
color: #262626;
|
99 |
-
border-bottom: 1px solid #F2F2F2;
|
100 |
-
border-top:none;
|
101 |
-
}
|
102 |
-
.aio_table_row_red{
|
103 |
-
background-color:#FD6D73;
|
104 |
-
}
|
105 |
-
.aio_table_row_yellow{
|
106 |
-
background-color:#F5E679;
|
107 |
-
}
|
108 |
-
.aio_table_row_green{
|
109 |
-
background-color:#C8F18B;
|
110 |
-
}
|
111 |
-
|
112 |
-
.aiowps_loading_1{
|
113 |
-
margin:0 5px;
|
114 |
-
}
|
115 |
-
|
116 |
-
.aio_text_area_file_output{
|
117 |
-
background: none repeat scroll 0 0 #F9F9F9;
|
118 |
-
font-family: Consolas,Monaco,monospace;
|
119 |
-
font-size: 12px;
|
120 |
-
outline: 0 none;
|
121 |
-
}
|
122 |
-
|
123 |
-
.aiowps_more_info_anchor{
|
124 |
-
background-color: #D9D9D9;
|
125 |
-
color: #21759B;
|
126 |
-
font: 0.9em/1.455em "Lucida Grande","Lucida Sans Unicode",Tahoma,Verdana,sans-serif;
|
127 |
-
text-decoration: none;
|
128 |
-
padding: 3px 5px;
|
129 |
-
}
|
130 |
-
.aiowps_more_info_anchor:hover {
|
131 |
-
color: #333333;
|
132 |
-
cursor: pointer;
|
133 |
-
}
|
134 |
-
.aiowps_more_info_toggle_char {
|
135 |
-
display: inline-block;
|
136 |
-
margin-right: 3px;
|
137 |
-
padding: 0 3px;
|
138 |
-
text-align: center;
|
139 |
-
background-color: #EDEDED;
|
140 |
-
width: 10px;
|
141 |
-
}
|
142 |
-
.aiowps_more_info_body{
|
143 |
-
margin: 10px 0 15px;
|
144 |
-
background-color: #FFFFE0;
|
145 |
-
border-color: #E6DB55;
|
146 |
-
border-radius: 3px 3px 3px 3px;
|
147 |
-
border-style: solid;
|
148 |
-
border-width: 1px;
|
149 |
-
padding: 0 0 0 1em;
|
150 |
-
}
|
151 |
-
|
152 |
-
.aiowps_dashboard_box_small{
|
153 |
-
float:left;
|
154 |
-
max-width:350px;
|
155 |
-
margin-right:15px;
|
156 |
-
}
|
157 |
-
.aiowps_dashboard_widget_footer{
|
158 |
-
background-color: #E6E6E6;
|
159 |
-
padding: 10px;
|
160 |
-
}
|
161 |
-
|
162 |
-
.aiowps_feature_status_container{
|
163 |
-
display:block;
|
164 |
-
margin: 10px 0;
|
165 |
-
}
|
166 |
-
.aiowps_feature_status_name{
|
167 |
-
width:50%;
|
168 |
-
font-weight: bold;
|
169 |
-
float:left;
|
170 |
-
padding: 5px 10px 5px 0;
|
171 |
-
}
|
172 |
-
.aiowps_feature_status_bar{
|
173 |
-
display:block;
|
174 |
-
float:left;
|
175 |
-
width: 120px;
|
176 |
-
height: 26px;
|
177 |
-
position: relative;
|
178 |
-
background: rgba(0, 0, 0, 0.25);
|
179 |
-
border-radius: 3px;
|
180 |
-
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.1);
|
181 |
-
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.3), 0 1px rgba(255, 255, 255, 0.1);
|
182 |
-
}
|
183 |
-
.aiowps_feature_status_label{
|
184 |
-
display: block;
|
185 |
-
float: left;
|
186 |
-
padding: 4px;
|
187 |
-
text-align: center;
|
188 |
-
width: 52px;
|
189 |
-
color:#F7F7F7;
|
190 |
-
font-weight:bold;
|
191 |
-
text-transform: uppercase;
|
192 |
-
}
|
193 |
-
.aiowps_feature_status_on{
|
194 |
-
color: #043B14;
|
195 |
-
background: #65bd63;
|
196 |
-
border-radius: 3px;
|
197 |
-
background-image: -webkit-linear-gradient(top, #9dd993, #65bd63);
|
198 |
-
background-image: -moz-linear-gradient(top, #9dd993, #65bd63);
|
199 |
-
background-image: -o-linear-gradient(top, #9dd993, #65bd63);
|
200 |
-
background-image: linear-gradient(to bottom, #9dd993, #65bd63);
|
201 |
-
-webkit-box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 0 2px rgba(0, 0, 0, 0.2);
|
202 |
-
box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 0 2px rgba(0, 0, 0, 0.2);
|
203 |
-
}
|
204 |
-
.aiowps_feature_status_off{
|
205 |
-
color: #4D0000;
|
206 |
-
background: #BD6363;
|
207 |
-
border-radius: 3px;
|
208 |
-
background-image: -webkit-linear-gradient(top, #D99393, #BD6363);
|
209 |
-
background-image: -moz-linear-gradient(top, #D99393, #BD6363);
|
210 |
-
background-image: -o-linear-gradient(top, #D99393, #BD6363);
|
211 |
-
background-image: linear-gradient(top bottom, #D99393, #BD6363);
|
212 |
-
-webkit-box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 0 2px rgba(0, 0, 0, 0.2);
|
213 |
-
box-shadow: inset 0 1px rgba(255, 255, 255, 0.5), 0 0 2px rgba(0, 0, 0, 0.2);
|
214 |
-
}
|
215 |
-
|
216 |
-
.aiowps_feature_details_badge{
|
217 |
-
|
218 |
-
}
|
219 |
-
.aiowps_feature_details_badge_difficulty{
|
220 |
-
display: inline-block;
|
221 |
-
background: url('../images/feature-difficulty-badge-bg.png') no-repeat;
|
222 |
-
width:150px;
|
223 |
-
height:65px;
|
224 |
-
}
|
225 |
-
.aiowps_feature_details_badge_difficulty_text{
|
226 |
-
display: inline-block;
|
227 |
-
height:36px;
|
228 |
-
width: 105px;
|
229 |
-
margin: 8px 0 0 36px;
|
230 |
-
color: #595170;
|
231 |
-
font-size:14px;
|
232 |
-
font-family: helvetica;
|
233 |
-
font-weight: bold;
|
234 |
-
text-align: center;
|
235 |
-
padding-top:7px;
|
236 |
-
}
|
237 |
-
.aiowps_feature_details_badge_points{
|
238 |
-
display: inline-block;
|
239 |
-
background: url('../images/feature-points-badge-bg.png') no-repeat;
|
240 |
-
width:150px;
|
241 |
-
height:65px;
|
242 |
-
margin-left: 10px;
|
243 |
-
}
|
244 |
-
.aiowps_feature_details_badge_points_text{
|
245 |
-
display: inline-block;
|
246 |
-
height:36px;
|
247 |
-
width: 105px;
|
248 |
-
margin: 8px 0 0 36px;
|
249 |
-
color: #545B5C;
|
250 |
-
font-size:20px;
|
251 |
-
font-family: georgia;
|
252 |
-
font-weight: bold;
|
253 |
-
text-align: center;
|
254 |
-
padding-top:5px;
|
255 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/js/wp-security-admin-script.js
DELETED
@@ -1,39 +0,0 @@
|
|
1 |
-
jQuery(document).ready(function($){
|
2 |
-
//Add Generic Admin Dashboard JS Code in this file
|
3 |
-
|
4 |
-
//Media Uploader - start
|
5 |
-
function aiowps_attach_media_uploader(key) {
|
6 |
-
jQuery('#' + key + '_button').click(function() {
|
7 |
-
text_element = jQuery('#' + key).attr('name');
|
8 |
-
button_element = jQuery('#' + key + '_button').attr('name');
|
9 |
-
tb_show('All In One Security - Please Select a File', 'media-upload.php?referer=aiowpsec&TB_iframe=true&post_id=0width=640&height=485');
|
10 |
-
return false;
|
11 |
-
});
|
12 |
-
window.send_to_editor = function(html) {
|
13 |
-
var self_element = text_element;
|
14 |
-
fileurl = jQuery(html).attr('href');
|
15 |
-
jQuery('#' + self_element).val(fileurl);
|
16 |
-
tb_remove();
|
17 |
-
};
|
18 |
-
}
|
19 |
-
aiowps_attach_media_uploader('aiowps_htaccess_file');
|
20 |
-
aiowps_attach_media_uploader('aiowps_wp_config_file');
|
21 |
-
aiowps_attach_media_uploader('aiowps_db_file'); //TODO - for future use when we implement DB restore
|
22 |
-
//End of Media Uploader
|
23 |
-
|
24 |
-
//Triggers the more info toggle link
|
25 |
-
$(".aiowps_more_info_body").hide();//hide the more info on page load
|
26 |
-
$(".aiowps_more_info_anchor").click(function(){
|
27 |
-
$(this).next(".aiowps_more_info_body").animate({ "height": "toggle"});
|
28 |
-
var toogle_char_ref = $(this).find(".aiowps_more_info_toggle_char");
|
29 |
-
var toggle_char_value = toogle_char_ref.text();
|
30 |
-
if(toggle_char_value === "+"){
|
31 |
-
toogle_char_ref.text("-");
|
32 |
-
}
|
33 |
-
else{
|
34 |
-
toogle_char_ref.text("+");
|
35 |
-
}
|
36 |
-
});
|
37 |
-
//End of more info toggle
|
38 |
-
|
39 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.cl.php
DELETED
@@ -1,56 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
26 |
-
*/
|
27 |
-
|
28 |
-
if (!defined('__CL_HANDLER__'))
|
29 |
-
define('__CL_HANDLER__', 1);
|
30 |
-
|
31 |
-
require_once('whois.parser.php');
|
32 |
-
|
33 |
-
class cl_handler
|
34 |
-
{
|
35 |
-
function parse($data_str, $query)
|
36 |
-
{
|
37 |
-
$items = array(
|
38 |
-
'admin' => '(Administrative Contact)',
|
39 |
-
'tech' => 'Contacto Técnico (Technical Contact):',
|
40 |
-
'domain.nserver' => 'Servidores de nombre (Domain servers):',
|
41 |
-
'domain.changed' => '(Database last updated on):'
|
42 |
-
);
|
43 |
-
|
44 |
-
$trans = array(
|
45 |
-
'organización:' => 'organization',
|
46 |
-
'nombre :' => 'name');
|
47 |
-
|
48 |
-
$r['regrinfo'] = easy_parser($data_str['rawdata'], $items, 'd-m-y', $trans);
|
49 |
-
$r['regyinfo'] = array(
|
50 |
-
'referrer' => 'http://www.nic.cl',
|
51 |
-
'registrar' => 'NIC Chile'
|
52 |
-
);
|
53 |
-
return $r;
|
54 |
-
}
|
55 |
-
}
|
56 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.client.php
DELETED
@@ -1,595 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
26 |
-
*/
|
27 |
-
|
28 |
-
require_once('whois.ip.lib.php');
|
29 |
-
|
30 |
-
class WhoisClient {
|
31 |
-
|
32 |
-
// Recursion allowed ?
|
33 |
-
var $gtld_recurse = false;
|
34 |
-
|
35 |
-
// Default WHOIS port
|
36 |
-
var $PORT = 43;
|
37 |
-
|
38 |
-
// Maximum number of retries on connection failure
|
39 |
-
var $RETRY = 0;
|
40 |
-
|
41 |
-
// Time to wait between retries
|
42 |
-
var $SLEEP = 2;
|
43 |
-
|
44 |
-
// Read buffer size (0 == char by char)
|
45 |
-
var $BUFFER = 1024;
|
46 |
-
|
47 |
-
// Communications timeout
|
48 |
-
var $STIMEOUT = 10;
|
49 |
-
|
50 |
-
// List of servers and handlers (loaded from servers.whois)
|
51 |
-
var $DATA = array();
|
52 |
-
|
53 |
-
// Array to contain all query variables
|
54 |
-
var $Query = array(
|
55 |
-
'tld' => '',
|
56 |
-
'type' => 'domain',
|
57 |
-
'query' => '',
|
58 |
-
'status',
|
59 |
-
'server'
|
60 |
-
);
|
61 |
-
|
62 |
-
// This release of the package
|
63 |
-
var $CODE_VERSION = '4.2.2';
|
64 |
-
|
65 |
-
// Full code and data version string (e.g. 'Whois2.php v3.01:16')
|
66 |
-
var $VERSION;
|
67 |
-
|
68 |
-
/*
|
69 |
-
* Constructor function
|
70 |
-
*/
|
71 |
-
function WhoisClient () {
|
72 |
-
// Load DATA array
|
73 |
-
@require('whois.servers.php');
|
74 |
-
|
75 |
-
// Set version
|
76 |
-
$this->VERSION = sprintf("phpWhois v%s-%s", $this->CODE_VERSION, $this->DATA_VERSION);
|
77 |
-
}
|
78 |
-
|
79 |
-
/*
|
80 |
-
* Perform lookup
|
81 |
-
*/
|
82 |
-
|
83 |
-
function GetRawData ($query) {
|
84 |
-
|
85 |
-
$this->Query['query'] = $query;
|
86 |
-
|
87 |
-
// clear error description
|
88 |
-
if (isset($this->Query['errstr'])) unset($this->Query['errstr']);
|
89 |
-
|
90 |
-
if (!isset($this->Query['server'])) {
|
91 |
-
$this->Query['status'] = 'error';
|
92 |
-
$this->Query['errstr'][] = 'No server specified';
|
93 |
-
return(array());
|
94 |
-
}
|
95 |
-
|
96 |
-
// Check if protocol is http
|
97 |
-
|
98 |
-
if (substr($this->Query['server'],0,7)=='http://' ||
|
99 |
-
substr($this->Query['server'],0,8)=='https://')
|
100 |
-
{
|
101 |
-
$output = $this->httpQuery($this->Query['server']);
|
102 |
-
|
103 |
-
if (!$output)
|
104 |
-
{
|
105 |
-
$this->Query['status'] = 'error';
|
106 |
-
$this->Query['errstr'][] = 'Connect failed to: '.$this->Query['server'];
|
107 |
-
return(array());
|
108 |
-
}
|
109 |
-
|
110 |
-
$this->Query['args'] = substr(strchr($this->Query['server'],'?'),1);
|
111 |
-
$this->Query['server'] = strtok($this->Query['server'],'?');
|
112 |
-
|
113 |
-
if (substr($this->Query['server'],0,7)=='http://')
|
114 |
-
$this->Query['server_port'] = 80;
|
115 |
-
else
|
116 |
-
$this->Query['server_port'] = 483;
|
117 |
-
}
|
118 |
-
else
|
119 |
-
{
|
120 |
-
// Get args
|
121 |
-
|
122 |
-
if (strpos($this->Query['server'],'?'))
|
123 |
-
{
|
124 |
-
$parts = explode('?',$this->Query['server']);
|
125 |
-
$this->Query['server'] = trim($parts[0]);
|
126 |
-
$query_args = trim($parts[1]);
|
127 |
-
|
128 |
-
// replace substitution parameters
|
129 |
-
$query_args = str_replace('{query}', $query, $query_args);
|
130 |
-
$query_args = str_replace('{version}', 'phpWhois'.$this->CODE_VERSION, $query_args);
|
131 |
-
|
132 |
-
if (strpos($query_args,'{ip}')!==false)
|
133 |
-
{
|
134 |
-
$query_args = str_replace('{ip}', phpwhois_getclientip(), $query_args);
|
135 |
-
}
|
136 |
-
|
137 |
-
if (strpos($query_args,'{hname}')!==false)
|
138 |
-
{
|
139 |
-
$query_args = str_replace('{hname}', gethostbyaddr(phpwhois_getclientip()), $query_args);
|
140 |
-
}
|
141 |
-
}
|
142 |
-
else
|
143 |
-
{
|
144 |
-
if (empty($this->Query['args']))
|
145 |
-
$query_args = $query;
|
146 |
-
else
|
147 |
-
$query_args = $this->Query['args'];
|
148 |
-
}
|
149 |
-
|
150 |
-
$this->Query['args'] = $query_args;
|
151 |
-
|
152 |
-
if (substr($this->Query['server'],0,9) == 'rwhois://')
|
153 |
-
{
|
154 |
-
$this->Query['server'] = substr($this->Query['server'],9);
|
155 |
-
}
|
156 |
-
|
157 |
-
if (substr($this->Query['server'],0,8) == 'whois://')
|
158 |
-
{
|
159 |
-
$this->Query['server'] = substr($this->Query['server'],8);
|
160 |
-
}
|
161 |
-
|
162 |
-
// Get port
|
163 |
-
|
164 |
-
if (strpos($this->Query['server'],':'))
|
165 |
-
{
|
166 |
-
$parts = explode(':',$this->Query['server']);
|
167 |
-
$this->Query['server'] = trim($parts[0]);
|
168 |
-
$this->Query['server_port'] = trim($parts[1]);
|
169 |
-
}
|
170 |
-
else
|
171 |
-
$this->Query['server_port'] = $this->PORT;
|
172 |
-
|
173 |
-
// Connect to whois server, or return if failed
|
174 |
-
|
175 |
-
$ptr = $this->Connect();
|
176 |
-
|
177 |
-
if($ptr < 0) {
|
178 |
-
$this->Query['status'] = 'error';
|
179 |
-
$this->Query['errstr'][] = 'Connect failed to: '.$this->Query['server'];
|
180 |
-
return array();
|
181 |
-
}
|
182 |
-
|
183 |
-
stream_set_timeout($ptr,$this->STIMEOUT);
|
184 |
-
stream_set_blocking($ptr,0);
|
185 |
-
|
186 |
-
// Send query
|
187 |
-
fputs($ptr, trim($query_args)."\r\n");
|
188 |
-
|
189 |
-
// Prepare to receive result
|
190 |
-
$raw = '';
|
191 |
-
$start = time();
|
192 |
-
$null = NULL;
|
193 |
-
$r = array($ptr);
|
194 |
-
|
195 |
-
while (!feof($ptr))
|
196 |
-
{
|
197 |
-
if (stream_select($r,$null,$null,$this->STIMEOUT))
|
198 |
-
{
|
199 |
-
$raw .= fgets($ptr, $this->BUFFER);
|
200 |
-
}
|
201 |
-
|
202 |
-
if (time()-$start > $this->STIMEOUT)
|
203 |
-
{
|
204 |
-
$this->Query['status'] = 'error';
|
205 |
-
$this->Query['errstr'][] = 'Timeout reading from '.$this->Query['server'];
|
206 |
-
return array();
|
207 |
-
}
|
208 |
-
}
|
209 |
-
|
210 |
-
if (array_key_exists($this->Query['server'],$this->NON_UTF8))
|
211 |
-
{
|
212 |
-
$raw = utf8_encode($raw);
|
213 |
-
}
|
214 |
-
|
215 |
-
$output = explode("\n", $raw);
|
216 |
-
|
217 |
-
// Drop empty last line (if it's empty! - saleck)
|
218 |
-
if (empty($output[count($output)-1]))
|
219 |
-
unset($output[count($output)-1]);
|
220 |
-
}
|
221 |
-
|
222 |
-
return $output;
|
223 |
-
}
|
224 |
-
|
225 |
-
/*
|
226 |
-
* Perform lookup. Returns an array. The 'rawdata' element contains an
|
227 |
-
* array of lines gathered from the whois query. If a top level domain
|
228 |
-
* handler class was found for the domain, other elements will have been
|
229 |
-
* populated too.
|
230 |
-
*/
|
231 |
-
|
232 |
-
function GetData ($query='', $deep_whois=true) {
|
233 |
-
|
234 |
-
// If domain to query passed in, use it, otherwise use domain from initialisation
|
235 |
-
$query = !empty($query) ? $query : $this->Query['query'];
|
236 |
-
|
237 |
-
$output = $this->GetRawData($query);
|
238 |
-
|
239 |
-
// Create result and set 'rawdata'
|
240 |
-
$result = array( 'rawdata' => $output );
|
241 |
-
$result = $this->set_whois_info($result);
|
242 |
-
|
243 |
-
// Return now on error
|
244 |
-
if (empty($output)) return $result;
|
245 |
-
|
246 |
-
// If we have a handler, post-process it with it
|
247 |
-
if (isSet($this->Query['handler']))
|
248 |
-
{
|
249 |
-
// Keep server list
|
250 |
-
$servers = $result['regyinfo']['servers'];
|
251 |
-
unset($result['regyinfo']['servers']);
|
252 |
-
|
253 |
-
// Process data
|
254 |
-
$result = $this->Process($result,$deep_whois);
|
255 |
-
|
256 |
-
// Add new servers to the server list
|
257 |
-
if (isset($result['regyinfo']['servers']))
|
258 |
-
$result['regyinfo']['servers'] = array_merge($servers,$result['regyinfo']['servers']);
|
259 |
-
else
|
260 |
-
$result['regyinfo']['servers'] = $servers;
|
261 |
-
|
262 |
-
// Handler may forget to set rawdata
|
263 |
-
if (!isset($result['rawdata']))
|
264 |
-
$result['rawdata'] = $output;
|
265 |
-
}
|
266 |
-
|
267 |
-
// Type defaults to domain
|
268 |
-
if (!isset($result['regyinfo']['type']))
|
269 |
-
$result['regyinfo']['type'] = 'domain';
|
270 |
-
|
271 |
-
// Add error information if any
|
272 |
-
if (isset($this->Query['errstr']))
|
273 |
-
$result['errstr'] = $this->Query['errstr'];
|
274 |
-
|
275 |
-
// Fix/add nameserver information
|
276 |
-
if (method_exists($this,'FixResult') && $this->Query['tld'] != 'ip')
|
277 |
-
$this->FixResult($result,$query);
|
278 |
-
|
279 |
-
return($result);
|
280 |
-
}
|
281 |
-
|
282 |
-
/*
|
283 |
-
* Adds whois server query information to result
|
284 |
-
*/
|
285 |
-
|
286 |
-
function set_whois_info ($result)
|
287 |
-
{
|
288 |
-
$info = array(
|
289 |
-
'server'=> $this->Query['server'],
|
290 |
-
);
|
291 |
-
|
292 |
-
if (!empty($this->Query['args']))
|
293 |
-
$info['args'] = $this->Query['args'];
|
294 |
-
else
|
295 |
-
$info['args'] = $this->Query['query'];
|
296 |
-
|
297 |
-
if (!empty($this->Query['server_port']))
|
298 |
-
$info['port'] = $this->Query['server_port'];
|
299 |
-
else
|
300 |
-
$info['port'] = 43;
|
301 |
-
|
302 |
-
if (isset($result['regyinfo']['whois']))
|
303 |
-
unset($result['regyinfo']['whois']);
|
304 |
-
|
305 |
-
if (isset($result['regyinfo']['rwhois']))
|
306 |
-
unset($result['regyinfo']['rwhois']);
|
307 |
-
|
308 |
-
$result['regyinfo']['servers'][] = $info;
|
309 |
-
|
310 |
-
return $result;
|
311 |
-
}
|
312 |
-
|
313 |
-
/*
|
314 |
-
* Convert html output to plain text
|
315 |
-
*/
|
316 |
-
function httpQuery ($query) {
|
317 |
-
|
318 |
-
//echo ini_get('allow_url_fopen');
|
319 |
-
|
320 |
-
//if (ini_get('allow_url_fopen'))
|
321 |
-
$lines = @file($this->Query['server']);
|
322 |
-
|
323 |
-
if (!$lines) return false;
|
324 |
-
|
325 |
-
$output = '';
|
326 |
-
$pre = '';
|
327 |
-
|
328 |
-
while (list($key, $val)=each($lines)) {
|
329 |
-
$val = trim($val);
|
330 |
-
|
331 |
-
$pos=strpos(strtoupper($val),'<PRE>');
|
332 |
-
if ($pos!==false) {
|
333 |
-
$pre = "\n";
|
334 |
-
$output.=substr($val,0,$pos)."\n";
|
335 |
-
$val = substr($val,$pos+5);
|
336 |
-
}
|
337 |
-
$pos=strpos(strtoupper($val),'</PRE>');
|
338 |
-
if ($pos!==false) {
|
339 |
-
$pre = '';
|
340 |
-
$output.=substr($val,0,$pos)."\n";
|
341 |
-
$val = substr($val,$pos+6);
|
342 |
-
}
|
343 |
-
$output.=$val.$pre;
|
344 |
-
}
|
345 |
-
|
346 |
-
$search = array (
|
347 |
-
'<BR>', '<P>', '</TITLE>',
|
348 |
-
'</H1>', '</H2>', '</H3>',
|
349 |
-
'<br>', '<p>', '</title>',
|
350 |
-
'</h1>', '</h2>', '</h3>' );
|
351 |
-
|
352 |
-
$output = str_replace($search,"\n",$output);
|
353 |
-
$output = str_replace('<TD',' <td',$output);
|
354 |
-
$output = str_replace('<td',' <td',$output);
|
355 |
-
$output = str_replace('<tr',"\n<tr",$output);
|
356 |
-
$output = str_replace('<TR',"\n<tr",$output);
|
357 |
-
$output = str_replace(' ',' ',$output);
|
358 |
-
$output = strip_tags($output);
|
359 |
-
$output = explode("\n",$output);
|
360 |
-
|
361 |
-
$rawdata = array();
|
362 |
-
$null = 0;
|
363 |
-
|
364 |
-
while (list($key, $val)=each($output)) {
|
365 |
-
$val=trim($val);
|
366 |
-
if ($val=='') {
|
367 |
-
if (++$null>2) continue;
|
368 |
-
}
|
369 |
-
else $null=0;
|
370 |
-
$rawdata[]=$val;
|
371 |
-
}
|
372 |
-
return $rawdata;
|
373 |
-
}
|
374 |
-
|
375 |
-
/*
|
376 |
-
* Open a socket to the whois server.
|
377 |
-
*
|
378 |
-
* Returns a socket connection pointer on success, or -1 on failure.
|
379 |
-
*/
|
380 |
-
function Connect ($server = '') {
|
381 |
-
|
382 |
-
if ($server == '')
|
383 |
-
$server = $this->Query['server'];
|
384 |
-
|
385 |
-
// Fail if server not set
|
386 |
-
if($server == '')
|
387 |
-
return(-1);
|
388 |
-
|
389 |
-
// Get rid of protocol and/or get port
|
390 |
-
$port = $this->Query['server_port'];
|
391 |
-
|
392 |
-
$pos = strpos($server,'://');
|
393 |
-
|
394 |
-
if ($pos !== false)
|
395 |
-
$server = substr($server, $pos+3);
|
396 |
-
|
397 |
-
$pos = strpos($server,':');
|
398 |
-
|
399 |
-
if ($pos !== false)
|
400 |
-
{
|
401 |
-
$port = substr($server,$pos+1);
|
402 |
-
$server = substr($server,0,$pos);
|
403 |
-
}
|
404 |
-
|
405 |
-
// Enter connection attempt loop
|
406 |
-
$retry = 0;
|
407 |
-
|
408 |
-
while($retry <= $this->RETRY) {
|
409 |
-
// Set query status
|
410 |
-
$this->Query['status'] = 'ready';
|
411 |
-
|
412 |
-
// Connect to whois port
|
413 |
-
$ptr = @fsockopen($server, $port, $errno, $errstr, $this->STIMEOUT);
|
414 |
-
|
415 |
-
if($ptr > 0) {
|
416 |
-
$this->Query['status'] = 'ok';
|
417 |
-
return($ptr);
|
418 |
-
}
|
419 |
-
|
420 |
-
// Failed this attempt
|
421 |
-
$this->Query['status'] = 'error';
|
422 |
-
$this->Query['error'][] = $errstr;
|
423 |
-
$retry++;
|
424 |
-
|
425 |
-
// Sleep before retrying
|
426 |
-
sleep($this->SLEEP);
|
427 |
-
}
|
428 |
-
|
429 |
-
// If we get this far, it hasn't worked
|
430 |
-
return(-1);
|
431 |
-
}
|
432 |
-
|
433 |
-
/*
|
434 |
-
* Post-process result with handler class. On success, returns the result
|
435 |
-
* from the handler. On failure, returns passed result unaltered.
|
436 |
-
*/
|
437 |
-
function Process (&$result, $deep_whois=true) {
|
438 |
-
|
439 |
-
$handler_name = str_replace('.','_',$this->Query['handler']);
|
440 |
-
|
441 |
-
// If the handler has not already been included somehow, include it now
|
442 |
-
$HANDLER_FLAG = sprintf("__%s_HANDLER__", strtoupper($handler_name));
|
443 |
-
|
444 |
-
if (!defined($HANDLER_FLAG))
|
445 |
-
include($this->Query['file']);
|
446 |
-
|
447 |
-
// If the handler has still not been included, append to query errors list and return
|
448 |
-
if (!defined($HANDLER_FLAG))
|
449 |
-
{
|
450 |
-
$this->Query['errstr'][] = "Can't find $handler_name handler: ".$this->Query['file'];
|
451 |
-
return($result);
|
452 |
-
}
|
453 |
-
|
454 |
-
if (!$this->gtld_recurse && $this->Query['file'] == 'whois.gtld.php')
|
455 |
-
return $result;
|
456 |
-
|
457 |
-
// Pass result to handler
|
458 |
-
$object = $handler_name.'_handler';
|
459 |
-
|
460 |
-
$handler = new $object('');
|
461 |
-
|
462 |
-
// If handler returned an error, append it to the query errors list
|
463 |
-
if(isSet($handler->Query['errstr']))
|
464 |
-
$this->Query['errstr'][] = $handler->Query['errstr'];
|
465 |
-
|
466 |
-
$handler->deep_whois = $deep_whois;
|
467 |
-
|
468 |
-
// Process
|
469 |
-
$res = $handler->parse($result,$this->Query['query']);
|
470 |
-
|
471 |
-
// Return the result
|
472 |
-
return $res;
|
473 |
-
}
|
474 |
-
|
475 |
-
/*
|
476 |
-
* Does more (deeper) whois ...
|
477 |
-
*/
|
478 |
-
|
479 |
-
function DeepWhois ($query, $result) {
|
480 |
-
|
481 |
-
if (!isset($result['regyinfo']['whois'])) return $result;
|
482 |
-
|
483 |
-
$this->Query['server'] = $wserver = $result['regyinfo']['whois'];
|
484 |
-
unset($result['regyinfo']['whois']);
|
485 |
-
$subresult = $this->GetRawData($query);
|
486 |
-
|
487 |
-
if (!empty($subresult))
|
488 |
-
{
|
489 |
-
$result = $this->set_whois_info($result);
|
490 |
-
$result['rawdata'] = $subresult;
|
491 |
-
|
492 |
-
if (isset($this->WHOIS_GTLD_HANDLER[$wserver]))
|
493 |
-
$this->Query['handler'] = $this->WHOIS_GTLD_HANDLER[$wserver];
|
494 |
-
else
|
495 |
-
{
|
496 |
-
$parts = explode('.',$wserver);
|
497 |
-
$hname = strtolower($parts[1]);
|
498 |
-
|
499 |
-
if (($fp = @fopen('whois.gtld.'.$hname.'.php', 'r', 1)) and fclose($fp))
|
500 |
-
$this->Query['handler'] = $hname;
|
501 |
-
}
|
502 |
-
|
503 |
-
if (!empty($this->Query['handler']))
|
504 |
-
{
|
505 |
-
$this->Query['file'] = sprintf('whois.gtld.%s.php', $this->Query['handler']);
|
506 |
-
$regrinfo = $this->Process($subresult); //$result['rawdata']);
|
507 |
-
$result['regrinfo'] = $this->merge_results($result['regrinfo'], $regrinfo);
|
508 |
-
//$result['rawdata'] = $subresult;
|
509 |
-
}
|
510 |
-
}
|
511 |
-
|
512 |
-
return $result;
|
513 |
-
}
|
514 |
-
|
515 |
-
/*
|
516 |
-
* Merge results
|
517 |
-
*/
|
518 |
-
|
519 |
-
function merge_results($a1, $a2) {
|
520 |
-
|
521 |
-
reset($a2);
|
522 |
-
|
523 |
-
while (list($key, $val) = each($a2))
|
524 |
-
{
|
525 |
-
if (isset($a1[$key]))
|
526 |
-
{
|
527 |
-
if (is_array($val))
|
528 |
-
{
|
529 |
-
if ($key != 'nserver')
|
530 |
-
$a1[$key] = $this->merge_results($a1[$key], $val);
|
531 |
-
}
|
532 |
-
else
|
533 |
-
{
|
534 |
-
$val = trim($val);
|
535 |
-
if ($val != '')
|
536 |
-
$a1[$key] = $val;
|
537 |
-
}
|
538 |
-
}
|
539 |
-
else
|
540 |
-
$a1[$key] = $val;
|
541 |
-
}
|
542 |
-
|
543 |
-
return $a1;
|
544 |
-
}
|
545 |
-
|
546 |
-
function FixNameServer($nserver)
|
547 |
-
{
|
548 |
-
$dns = array();
|
549 |
-
|
550 |
-
foreach($nserver as $val)
|
551 |
-
{
|
552 |
-
$val = str_replace( array('[',']','(',')'), '', trim($val));
|
553 |
-
$val = str_replace("\t", ' ', $val);
|
554 |
-
$parts = explode(' ', $val);
|
555 |
-
$host = '';
|
556 |
-
$ip = '';
|
557 |
-
|
558 |
-
foreach($parts as $p)
|
559 |
-
{
|
560 |
-
if (substr($p,-1) == '.') $p = substr($p,0,-1);
|
561 |
-
|
562 |
-
if ((ip2long($p) == - 1) or (ip2long($p) === false))
|
563 |
-
{
|
564 |
-
// Hostname ?
|
565 |
-
if ($host == '' && preg_match('/^[\w\-]+(\.[\w\-]+)+$/',$p))
|
566 |
-
{
|
567 |
-
$host = $p;
|
568 |
-
}
|
569 |
-
}
|
570 |
-
else
|
571 |
-
// IP Address
|
572 |
-
$ip = $p;
|
573 |
-
}
|
574 |
-
|
575 |
-
// Valid host name ?
|
576 |
-
|
577 |
-
if ($host == '') continue;
|
578 |
-
|
579 |
-
// Get ip address
|
580 |
-
|
581 |
-
if ($ip == '')
|
582 |
-
{
|
583 |
-
$ip = gethostbyname($host);
|
584 |
-
if ($ip == $host) $ip = '(DOES NOT EXIST)';
|
585 |
-
}
|
586 |
-
|
587 |
-
if (substr($host,-1,1) == '.') $host = substr($host,0,-1);
|
588 |
-
|
589 |
-
$dns[strtolower($host)] = $ip;
|
590 |
-
}
|
591 |
-
|
592 |
-
return $dns;
|
593 |
-
}
|
594 |
-
}
|
595 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.de.php
DELETED
@@ -1,78 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
26 |
-
*/
|
27 |
-
|
28 |
-
if (!defined('__DE_HANDLER__'))
|
29 |
-
define('__DE_HANDLER__', 1);
|
30 |
-
|
31 |
-
require_once('whois.parser.php');
|
32 |
-
|
33 |
-
class de_handler
|
34 |
-
{
|
35 |
-
function parse($data_str, $query)
|
36 |
-
{
|
37 |
-
$items = array(
|
38 |
-
'domain.name' => 'Domain:',
|
39 |
-
'domain.nserver.' =>'Nserver:',
|
40 |
-
'domain.nserver.#' =>'Nsentry:',
|
41 |
-
'domain.status' => 'Status:',
|
42 |
-
'domain.changed' => 'Changed:',
|
43 |
-
'domain.desc.' => 'Descr:',
|
44 |
-
'owner' => '[Holder]',
|
45 |
-
'admin' => '[Admin-C]',
|
46 |
-
'tech' => '[Tech-C]',
|
47 |
-
'zone' => '[Zone-C]'
|
48 |
-
);
|
49 |
-
|
50 |
-
$extra = array(
|
51 |
-
'city:' => 'address.city',
|
52 |
-
'postalcode:' => 'address.pcode',
|
53 |
-
'countrycode:' => 'address.country',
|
54 |
-
'remarks:' => '',
|
55 |
-
'sip:' => 'sip',
|
56 |
-
'type:' => ''
|
57 |
-
);
|
58 |
-
|
59 |
-
$r['regrinfo'] = easy_parser($data_str['rawdata'], $items, 'ymd',$extra);
|
60 |
-
|
61 |
-
$r['regyinfo'] = array(
|
62 |
-
'registrar' => 'DENIC eG',
|
63 |
-
'referrer' => 'http://www.denic.de/'
|
64 |
-
);
|
65 |
-
|
66 |
-
if (!isset($r['regrinfo']['domain']['status']) || $r['regrinfo']['domain']['status'] == "free")
|
67 |
-
{
|
68 |
-
$r['regrinfo']['registered'] = 'no';
|
69 |
-
}
|
70 |
-
else
|
71 |
-
{
|
72 |
-
$r['regrinfo']['domain']['changed'] = substr($r['regrinfo']['domain']['changed'], 0, 10);
|
73 |
-
$r['regrinfo']['registered'] = 'yes';
|
74 |
-
}
|
75 |
-
return $r;
|
76 |
-
}
|
77 |
-
}
|
78 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.gtld.namejuice.php
DELETED
@@ -1,53 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
26 |
-
*/
|
27 |
-
|
28 |
-
if (!defined('__NAMEJUICE_HANDLER__'))
|
29 |
-
define('__NAMEJUICE_HANDLER__', 1);
|
30 |
-
|
31 |
-
require_once('whois.parser.php');
|
32 |
-
|
33 |
-
class namejuice_handler
|
34 |
-
{
|
35 |
-
function parse($data_str, $query)
|
36 |
-
{
|
37 |
-
$items = array(
|
38 |
-
'owner' => 'Registrant Contact:',
|
39 |
-
'admin' => 'Administrative Contact:',
|
40 |
-
'tech' => 'Technical Contact:',
|
41 |
-
'domain.name' => 'Domain name:',
|
42 |
-
'domain.nserver.' => 'Name Servers:',
|
43 |
-
'domain.created' => 'Creation date:',
|
44 |
-
'domain.expires' => 'Expiration date:',
|
45 |
-
'domain.changed' => 'Update date:',
|
46 |
-
'domain.status' => 'Status:',
|
47 |
-
'domain.sponsor' => 'Registration Service Provided By:'
|
48 |
-
);
|
49 |
-
|
50 |
-
return easy_parser($data_str, $items, 'dmy', false, true, true);
|
51 |
-
}
|
52 |
-
}
|
53 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.idna.php
DELETED
@@ -1,969 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
// {{{ license
|
3 |
-
|
4 |
-
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
|
5 |
-
//
|
6 |
-
// +----------------------------------------------------------------------+
|
7 |
-
// | This library is free software; you can redistribute it and/or modify |
|
8 |
-
// | it under the terms of the GNU Lesser General Public License as |
|
9 |
-
// | published by the Free Software Foundation; either version 2.1 of the |
|
10 |
-
// | License, or (at your option) any later version. |
|
11 |
-
// | |
|
12 |
-
// | This library is distributed in the hope that it will be useful, but |
|
13 |
-
// | WITHOUT ANY WARRANTY; without even the implied warranty of |
|
14 |
-
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
15 |
-
// | Lesser General Public License for more details. |
|
16 |
-
// | |
|
17 |
-
// | You should have received a copy of the GNU Lesser General Public |
|
18 |
-
// | License along with this library; if not, write to the Free Software |
|
19 |
-
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
|
20 |
-
// | USA. |
|
21 |
-
// +----------------------------------------------------------------------+
|
22 |
-
//
|
23 |
-
|
24 |
-
// }}}
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Encode/decode Internationalized Domain Names.
|
28 |
-
*
|
29 |
-
* The class allows to convert internationalized domain names
|
30 |
-
* (see RFC 3490 for details) as they can be used with various registries worldwide
|
31 |
-
* to be translated between their original (localized) form and their encoded form
|
32 |
-
* as it will be used in the DNS (Domain Name System).
|
33 |
-
*
|
34 |
-
* The class provides two public methods, encode() and decode(), which do exactly
|
35 |
-
* what you would expect them to do. You are allowed to use complete domain names,
|
36 |
-
* simple strings and complete email addresses as well. That means, that you might
|
37 |
-
* use any of the following notations:
|
38 |
-
*
|
39 |
-
* - www.nörgler.com
|
40 |
-
* - xn--nrgler-wxa
|
41 |
-
* - xn--brse-5qa.xn--knrz-1ra.info
|
42 |
-
*
|
43 |
-
* Unicode input might be given as either UTF-8 string, UCS-4 string or UCS-4
|
44 |
-
* array. Unicode output is available in the same formats.
|
45 |
-
* You can select your preferred format via {@link set_paramter()}.
|
46 |
-
*
|
47 |
-
* ACE input and output is always expected to be ASCII.
|
48 |
-
*
|
49 |
-
* @author Matthias Sommerfeld <mso@phlylabs.de>
|
50 |
-
* @copyright 2004-2007 phlyLabs Berlin, http://phlylabs.de
|
51 |
-
* @version 0.5.1
|
52 |
-
*
|
53 |
-
*/
|
54 |
-
class idna_convert
|
55 |
-
{
|
56 |
-
/**
|
57 |
-
* Holds all relevant mapping tables, loaded from a seperate file on construct
|
58 |
-
* See RFC3454 for details
|
59 |
-
*
|
60 |
-
* @var array
|
61 |
-
* @access private
|
62 |
-
*/
|
63 |
-
var $NP = array();
|
64 |
-
|
65 |
-
// Internal settings, do not mess with them
|
66 |
-
var $_punycode_prefix = 'xn--';
|
67 |
-
var $_invalid_ucs = 0x80000000;
|
68 |
-
var $_max_ucs = 0x10FFFF;
|
69 |
-
var $_base = 36;
|
70 |
-
var $_tmin = 1;
|
71 |
-
var $_tmax = 26;
|
72 |
-
var $_skew = 38;
|
73 |
-
var $_damp = 700;
|
74 |
-
var $_initial_bias = 72;
|
75 |
-
var $_initial_n = 0x80;
|
76 |
-
var $_sbase = 0xAC00;
|
77 |
-
var $_lbase = 0x1100;
|
78 |
-
var $_vbase = 0x1161;
|
79 |
-
var $_tbase = 0x11A7;
|
80 |
-
var $_lcount = 19;
|
81 |
-
var $_vcount = 21;
|
82 |
-
var $_tcount = 28;
|
83 |
-
var $_ncount = 588; // _vcount * _tcount
|
84 |
-
var $_scount = 11172; // _lcount * _tcount * _vcount
|
85 |
-
var $_error = false;
|
86 |
-
|
87 |
-
// See {@link set_paramter()} for details of how to change the following
|
88 |
-
// settings from within your script / application
|
89 |
-
var $_api_encoding = 'utf8'; // Default input charset is UTF-8
|
90 |
-
var $_allow_overlong = false; // Overlong UTF-8 encodings are forbidden
|
91 |
-
var $_strict_mode = false; // Behave strict or not
|
92 |
-
|
93 |
-
// The constructor
|
94 |
-
function idna_convert($options = false)
|
95 |
-
{
|
96 |
-
$this->slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount;
|
97 |
-
if (function_exists('file_get_contents')) {
|
98 |
-
$this->NP = unserialize(file_get_contents(dirname(__FILE__).'/npdata.ser'));
|
99 |
-
} else {
|
100 |
-
$this->NP = unserialize(join('', file(dirname(__FILE__).'/npdata.ser')));
|
101 |
-
}
|
102 |
-
// If parameters are given, pass these to the respective method
|
103 |
-
if (is_array($options)) {
|
104 |
-
return $this->set_parameter($options);
|
105 |
-
}
|
106 |
-
return true;
|
107 |
-
}
|
108 |
-
|
109 |
-
/**
|
110 |
-
* Sets a new option value. Available options and values:
|
111 |
-
* [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8,
|
112 |
-
* 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8]
|
113 |
-
* [overlong - Unicode does not allow unnecessarily long encodings of chars,
|
114 |
-
* to allow this, set this parameter to true, else to false;
|
115 |
-
* default is false.]
|
116 |
-
* [strict - true: strict mode, good for registration purposes - Causes errors
|
117 |
-
* on failures; false: loose mode, ideal for "wildlife" applications
|
118 |
-
* by silently ignoring errors and returning the original input instead
|
119 |
-
*
|
120 |
-
* @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs)
|
121 |
-
* @param string Value to use (if parameter 1 is a string)
|
122 |
-
* @return boolean true on success, false otherwise
|
123 |
-
* @access public
|
124 |
-
*/
|
125 |
-
function set_parameter($option, $value = false)
|
126 |
-
{
|
127 |
-
if (!is_array($option)) {
|
128 |
-
$option = array($option => $value);
|
129 |
-
}
|
130 |
-
foreach ($option as $k => $v) {
|
131 |
-
switch ($k) {
|
132 |
-
case 'encoding':
|
133 |
-
switch ($v) {
|
134 |
-
case 'utf8':
|
135 |
-
case 'ucs4_string':
|
136 |
-
case 'ucs4_array':
|
137 |
-
$this->_api_encoding = $v;
|
138 |
-
break;
|
139 |
-
default:
|
140 |
-
$this->_error('Set Parameter: Unknown parameter '.$v.' for option '.$k);
|
141 |
-
return false;
|
142 |
-
}
|
143 |
-
break;
|
144 |
-
case 'overlong':
|
145 |
-
$this->_allow_overlong = ($v) ? true : false;
|
146 |
-
break;
|
147 |
-
case 'strict':
|
148 |
-
$this->_strict_mode = ($v) ? true : false;
|
149 |
-
break;
|
150 |
-
default:
|
151 |
-
$this->_error('Set Parameter: Unknown option '.$k);
|
152 |
-
return false;
|
153 |
-
}
|
154 |
-
}
|
155 |
-
return true;
|
156 |
-
}
|
157 |
-
|
158 |
-
/**
|
159 |
-
* Decode a given ACE domain name
|
160 |
-
* @param string Domain name (ACE string)
|
161 |
-
* [@param string Desired output encoding, see {@link set_parameter}]
|
162 |
-
* @return string Decoded Domain name (UTF-8 or UCS-4)
|
163 |
-
* @access public
|
164 |
-
*/
|
165 |
-
function decode($input, $one_time_encoding = false)
|
166 |
-
{
|
167 |
-
// Optionally set
|
168 |
-
if ($one_time_encoding) {
|
169 |
-
switch ($one_time_encoding) {
|
170 |
-
case 'utf8':
|
171 |
-
case 'ucs4_string':
|
172 |
-
case 'ucs4_array':
|
173 |
-
break;
|
174 |
-
default:
|
175 |
-
$this->_error('Unknown encoding '.$one_time_encoding);
|
176 |
-
return false;
|
177 |
-
}
|
178 |
-
}
|
179 |
-
// Make sure to drop any newline characters around
|
180 |
-
$input = trim($input);
|
181 |
-
|
182 |
-
// Negotiate input and try to determine, whether it is a plain string,
|
183 |
-
// an email address or something like a complete URL
|
184 |
-
if (strpos($input, '@')) { // Maybe it is an email address
|
185 |
-
// No no in strict mode
|
186 |
-
if ($this->_strict_mode) {
|
187 |
-
$this->_error('Only simple domain name parts can be handled in strict mode');
|
188 |
-
return false;
|
189 |
-
}
|
190 |
-
list ($email_pref, $input) = explode('@', $input, 2);
|
191 |
-
$arr = explode('.', $input);
|
192 |
-
foreach ($arr as $k => $v) {
|
193 |
-
if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) {
|
194 |
-
$conv = $this->_decode($v);
|
195 |
-
if ($conv) $arr[$k] = $conv;
|
196 |
-
}
|
197 |
-
}
|
198 |
-
$input = join('.', $arr);
|
199 |
-
$arr = explode('.', $email_pref);
|
200 |
-
foreach ($arr as $k => $v) {
|
201 |
-
if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) {
|
202 |
-
$conv = $this->_decode($v);
|
203 |
-
if ($conv) $arr[$k] = $conv;
|
204 |
-
}
|
205 |
-
}
|
206 |
-
$email_pref = join('.', $arr);
|
207 |
-
$return = $email_pref . '@' . $input;
|
208 |
-
} elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters)
|
209 |
-
// No no in strict mode
|
210 |
-
if ($this->_strict_mode) {
|
211 |
-
$this->_error('Only simple domain name parts can be handled in strict mode');
|
212 |
-
return false;
|
213 |
-
}
|
214 |
-
$parsed = parse_url($input);
|
215 |
-
if (isset($parsed['host'])) {
|
216 |
-
$arr = explode('.', $parsed['host']);
|
217 |
-
foreach ($arr as $k => $v) {
|
218 |
-
$conv = $this->_decode($v);
|
219 |
-
if ($conv) $arr[$k] = $conv;
|
220 |
-
}
|
221 |
-
$parsed['host'] = join('.', $arr);
|
222 |
-
$return =
|
223 |
-
(empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://'))
|
224 |
-
.(empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@')
|
225 |
-
.$parsed['host']
|
226 |
-
.(empty($parsed['port']) ? '' : ':'.$parsed['port'])
|
227 |
-
.(empty($parsed['path']) ? '' : $parsed['path'])
|
228 |
-
.(empty($parsed['query']) ? '' : '?'.$parsed['query'])
|
229 |
-
.(empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']);
|
230 |
-
} else { // parse_url seems to have failed, try without it
|
231 |
-
$arr = explode('.', $input);
|
232 |
-
foreach ($arr as $k => $v) {
|
233 |
-
$conv = $this->_decode($v);
|
234 |
-
$arr[$k] = ($conv) ? $conv : $v;
|
235 |
-
}
|
236 |
-
$return = join('.', $arr);
|
237 |
-
}
|
238 |
-
} else { // Otherwise we consider it being a pure domain name string
|
239 |
-
$return = $this->_decode($input);
|
240 |
-
if (!$return) $return = $input;
|
241 |
-
}
|
242 |
-
// The output is UTF-8 by default, other output formats need conversion here
|
243 |
-
// If one time encoding is given, use this, else the objects property
|
244 |
-
switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
|
245 |
-
case 'utf8':
|
246 |
-
return $return;
|
247 |
-
break;
|
248 |
-
case 'ucs4_string':
|
249 |
-
return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return));
|
250 |
-
break;
|
251 |
-
case 'ucs4_array':
|
252 |
-
return $this->_utf8_to_ucs4($return);
|
253 |
-
break;
|
254 |
-
default:
|
255 |
-
$this->_error('Unsupported output format');
|
256 |
-
return false;
|
257 |
-
}
|
258 |
-
}
|
259 |
-
|
260 |
-
/**
|
261 |
-
* Encode a given UTF-8 domain name
|
262 |
-
* @param string Domain name (UTF-8 or UCS-4)
|
263 |
-
* [@param string Desired input encoding, see {@link set_parameter}]
|
264 |
-
* @return string Encoded Domain name (ACE string)
|
265 |
-
* @access public
|
266 |
-
*/
|
267 |
-
function encode($decoded, $one_time_encoding = false)
|
268 |
-
{
|
269 |
-
// Forcing conversion of input to UCS4 array
|
270 |
-
// If one time encoding is given, use this, else the objects property
|
271 |
-
switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) {
|
272 |
-
case 'utf8':
|
273 |
-
$decoded = $this->_utf8_to_ucs4($decoded);
|
274 |
-
break;
|
275 |
-
case 'ucs4_string':
|
276 |
-
$decoded = $this->_ucs4_string_to_ucs4($decoded);
|
277 |
-
case 'ucs4_array':
|
278 |
-
break;
|
279 |
-
default:
|
280 |
-
$this->_error('Unsupported input format: '.($one_time_encoding ? $one_time_encoding : $this->_api_encoding));
|
281 |
-
return false;
|
282 |
-
}
|
283 |
-
|
284 |
-
// No input, no output, what else did you expect?
|
285 |
-
if (empty($decoded)) return '';
|
286 |
-
|
287 |
-
// Anchors for iteration
|
288 |
-
$last_begin = 0;
|
289 |
-
// Output string
|
290 |
-
$output = '';
|
291 |
-
foreach ($decoded as $k => $v) {
|
292 |
-
// Make sure to use just the plain dot
|
293 |
-
switch($v) {
|
294 |
-
case 0x3002:
|
295 |
-
case 0xFF0E:
|
296 |
-
case 0xFF61:
|
297 |
-
$decoded[$k] = 0x2E;
|
298 |
-
// Right, no break here, the above are converted to dots anyway
|
299 |
-
// Stumbling across an anchoring character
|
300 |
-
case 0x2E:
|
301 |
-
case 0x2F:
|
302 |
-
case 0x3A:
|
303 |
-
case 0x3F:
|
304 |
-
case 0x40:
|
305 |
-
// Neither email addresses nor URLs allowed in strict mode
|
306 |
-
if ($this->_strict_mode) {
|
307 |
-
$this->_error('Neither email addresses nor URLs are allowed in strict mode.');
|
308 |
-
return false;
|
309 |
-
} else {
|
310 |
-
// Skip first char
|
311 |
-
if ($k) {
|
312 |
-
$encoded = '';
|
313 |
-
$encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin)));
|
314 |
-
if ($encoded) {
|
315 |
-
$output .= $encoded;
|
316 |
-
} else {
|
317 |
-
$output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin)));
|
318 |
-
}
|
319 |
-
$output .= chr($decoded[$k]);
|
320 |
-
}
|
321 |
-
$last_begin = $k + 1;
|
322 |
-
}
|
323 |
-
}
|
324 |
-
}
|
325 |
-
// Catch the rest of the string
|
326 |
-
if ($last_begin) {
|
327 |
-
$inp_len = sizeof($decoded);
|
328 |
-
$encoded = '';
|
329 |
-
$encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
|
330 |
-
if ($encoded) {
|
331 |
-
$output .= $encoded;
|
332 |
-
} else {
|
333 |
-
$output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
|
334 |
-
}
|
335 |
-
return $output;
|
336 |
-
} else {
|
337 |
-
if ($output = $this->_encode($decoded)) {
|
338 |
-
return $output;
|
339 |
-
} else {
|
340 |
-
return $this->_ucs4_to_utf8($decoded);
|
341 |
-
}
|
342 |
-
}
|
343 |
-
}
|
344 |
-
|
345 |
-
/**
|
346 |
-
* Use this method to get the last error ocurred
|
347 |
-
* @param void
|
348 |
-
* @return string The last error, that occured
|
349 |
-
* @access public
|
350 |
-
*/
|
351 |
-
function get_last_error()
|
352 |
-
{
|
353 |
-
return $this->_error;
|
354 |
-
}
|
355 |
-
|
356 |
-
/**
|
357 |
-
* The actual decoding algorithm
|
358 |
-
* @access private
|
359 |
-
*/
|
360 |
-
function _decode($encoded)
|
361 |
-
{
|
362 |
-
// We do need to find the Punycode prefix
|
363 |
-
if (!preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $encoded)) {
|
364 |
-
$this->_error('This is not a punycode string');
|
365 |
-
return false;
|
366 |
-
}
|
367 |
-
$encode_test = preg_replace('!^'.preg_quote($this->_punycode_prefix, '!').'!', '', $encoded);
|
368 |
-
// If nothing left after removing the prefix, it is hopeless
|
369 |
-
if (!$encode_test) {
|
370 |
-
$this->_error('The given encoded string was empty');
|
371 |
-
return false;
|
372 |
-
}
|
373 |
-
// Find last occurence of the delimiter
|
374 |
-
$delim_pos = strrpos($encoded, '-');
|
375 |
-
if ($delim_pos > strlen($this->_punycode_prefix)) {
|
376 |
-
for ($k = strlen($this->_punycode_prefix); $k < $delim_pos; ++$k) {
|
377 |
-
$decoded[] = ord($encoded{$k});
|
378 |
-
}
|
379 |
-
} else {
|
380 |
-
$decoded = array();
|
381 |
-
}
|
382 |
-
$deco_len = count($decoded);
|
383 |
-
$enco_len = strlen($encoded);
|
384 |
-
|
385 |
-
// Wandering through the strings; init
|
386 |
-
$is_first = true;
|
387 |
-
$bias = $this->_initial_bias;
|
388 |
-
$idx = 0;
|
389 |
-
$char = $this->_initial_n;
|
390 |
-
|
391 |
-
for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) {
|
392 |
-
for ($old_idx = $idx, $w = 1, $k = $this->_base; 1 ; $k += $this->_base) {
|
393 |
-
$digit = $this->_decode_digit($encoded{$enco_idx++});
|
394 |
-
$idx += $digit * $w;
|
395 |
-
$t = ($k <= $bias) ? $this->_tmin :
|
396 |
-
(($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias));
|
397 |
-
if ($digit < $t) break;
|
398 |
-
$w = (int) ($w * ($this->_base - $t));
|
399 |
-
}
|
400 |
-
$bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first);
|
401 |
-
$is_first = false;
|
402 |
-
$char += (int) ($idx / ($deco_len + 1));
|
403 |
-
$idx %= ($deco_len + 1);
|
404 |
-
if ($deco_len > 0) {
|
405 |
-
// Make room for the decoded char
|
406 |
-
for ($i = $deco_len; $i > $idx; $i--) {
|
407 |
-
$decoded[$i] = $decoded[($i - 1)];
|
408 |
-
}
|
409 |
-
}
|
410 |
-
$decoded[$idx++] = $char;
|
411 |
-
}
|
412 |
-
return $this->_ucs4_to_utf8($decoded);
|
413 |
-
}
|
414 |
-
|
415 |
-
/**
|
416 |
-
* The actual encoding algorithm
|
417 |
-
* @access private
|
418 |
-
*/
|
419 |
-
function _encode($decoded)
|
420 |
-
{
|
421 |
-
// We cannot encode a domain name containing the Punycode prefix
|
422 |
-
$extract = strlen($this->_punycode_prefix);
|
423 |
-
$check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix);
|
424 |
-
$check_deco = array_slice($decoded, 0, $extract);
|
425 |
-
|
426 |
-
if ($check_pref == $check_deco) {
|
427 |
-
$this->_error('This is already a punycode string');
|
428 |
-
return false;
|
429 |
-
}
|
430 |
-
// We will not try to encode strings consisting of basic code points only
|
431 |
-
$encodable = false;
|
432 |
-
foreach ($decoded as $k => $v) {
|
433 |
-
if ($v > 0x7a) {
|
434 |
-
$encodable = true;
|
435 |
-
break;
|
436 |
-
}
|
437 |
-
}
|
438 |
-
if (!$encodable) {
|
439 |
-
$this->_error('The given string does not contain encodable chars');
|
440 |
-
return false;
|
441 |
-
}
|
442 |
-
|
443 |
-
// Do NAMEPREP
|
444 |
-
$decoded = $this->_nameprep($decoded);
|
445 |
-
if (!$decoded || !is_array($decoded)) return false; // NAMEPREP failed
|
446 |
-
|
447 |
-
$deco_len = count($decoded);
|
448 |
-
if (!$deco_len) return false; // Empty array
|
449 |
-
|
450 |
-
$codecount = 0; // How many chars have been consumed
|
451 |
-
|
452 |
-
$encoded = '';
|
453 |
-
// Copy all basic code points to output
|
454 |
-
for ($i = 0; $i < $deco_len; ++$i) {
|
455 |
-
$test = $decoded[$i];
|
456 |
-
// Will match [-0-9a-zA-Z]
|
457 |
-
if ((0x2F < $test && $test < 0x40) || (0x40 < $test && $test < 0x5B)
|
458 |
-
|| (0x60 < $test && $test <= 0x7B) || (0x2D == $test)) {
|
459 |
-
$encoded .= chr($decoded[$i]);
|
460 |
-
$codecount++;
|
461 |
-
}
|
462 |
-
}
|
463 |
-
if ($codecount == $deco_len) return $encoded; // All codepoints were basic ones
|
464 |
-
|
465 |
-
// Start with the prefix; copy it to output
|
466 |
-
$encoded = $this->_punycode_prefix.$encoded;
|
467 |
-
|
468 |
-
// If we have basic code points in output, add an hyphen to the end
|
469 |
-
if ($codecount) $encoded .= '-';
|
470 |
-
|
471 |
-
// Now find and encode all non-basic code points
|
472 |
-
$is_first = true;
|
473 |
-
$cur_code = $this->_initial_n;
|
474 |
-
$bias = $this->_initial_bias;
|
475 |
-
$delta = 0;
|
476 |
-
while ($codecount < $deco_len) {
|
477 |
-
// Find the smallest code point >= the current code point and
|
478 |
-
// remember the last ouccrence of it in the input
|
479 |
-
for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) {
|
480 |
-
if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) {
|
481 |
-
$next_code = $decoded[$i];
|
482 |
-
}
|
483 |
-
}
|
484 |
-
|
485 |
-
$delta += ($next_code - $cur_code) * ($codecount + 1);
|
486 |
-
$cur_code = $next_code;
|
487 |
-
|
488 |
-
// Scan input again and encode all characters whose code point is $cur_code
|
489 |
-
for ($i = 0; $i < $deco_len; $i++) {
|
490 |
-
if ($decoded[$i] < $cur_code) {
|
491 |
-
$delta++;
|
492 |
-
} elseif ($decoded[$i] == $cur_code) {
|
493 |
-
for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) {
|
494 |
-
$t = ($k <= $bias) ? $this->_tmin :
|
495 |
-
(($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias);
|
496 |
-
if ($q < $t) break;
|
497 |
-
$encoded .= $this->_encode_digit(intval($t + (($q - $t) % ($this->_base - $t)))); //v0.4.5 Changed from ceil() to intval()
|
498 |
-
$q = (int) (($q - $t) / ($this->_base - $t));
|
499 |
-
}
|
500 |
-
$encoded .= $this->_encode_digit($q);
|
501 |
-
$bias = $this->_adapt($delta, $codecount+1, $is_first);
|
502 |
-
$codecount++;
|
503 |
-
$delta = 0;
|
504 |
-
$is_first = false;
|
505 |
-
}
|
506 |
-
}
|
507 |
-
$delta++;
|
508 |
-
$cur_code++;
|
509 |
-
}
|
510 |
-
return $encoded;
|
511 |
-
}
|
512 |
-
|
513 |
-
/**
|
514 |
-
* Adapt the bias according to the current code point and position
|
515 |
-
* @access private
|
516 |
-
*/
|
517 |
-
function _adapt($delta, $npoints, $is_first)
|
518 |
-
{
|
519 |
-
$delta = intval($is_first ? ($delta / $this->_damp) : ($delta / 2));
|
520 |
-
$delta += intval($delta / $npoints);
|
521 |
-
for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) {
|
522 |
-
$delta = intval($delta / ($this->_base - $this->_tmin));
|
523 |
-
}
|
524 |
-
return intval($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew));
|
525 |
-
}
|
526 |
-
|
527 |
-
/**
|
528 |
-
* Encoding a certain digit
|
529 |
-
* @access private
|
530 |
-
*/
|
531 |
-
function _encode_digit($d)
|
532 |
-
{
|
533 |
-
return chr($d + 22 + 75 * ($d < 26));
|
534 |
-
}
|
535 |
-
|
536 |
-
/**
|
537 |
-
* Decode a certain digit
|
538 |
-
* @access private
|
539 |
-
*/
|
540 |
-
function _decode_digit($cp)
|
541 |
-
{
|
542 |
-
$cp = ord($cp);
|
543 |
-
return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base));
|
544 |
-
}
|
545 |
-
|
546 |
-
/**
|
547 |
-
* Internal error handling method
|
548 |
-
* @access private
|
549 |
-
*/
|
550 |
-
function _error($error = '')
|
551 |
-
{
|
552 |
-
$this->_error = $error;
|
553 |
-
}
|
554 |
-
|
555 |
-
/**
|
556 |
-
* Do Nameprep according to RFC3491 and RFC3454
|
557 |
-
* @param array Unicode Characters
|
558 |
-
* @return string Unicode Characters, Nameprep'd
|
559 |
-
* @access private
|
560 |
-
*/
|
561 |
-
function _nameprep($input)
|
562 |
-
{
|
563 |
-
$output = array();
|
564 |
-
$error = false;
|
565 |
-
//
|
566 |
-
// Mapping
|
567 |
-
// Walking through the input array, performing the required steps on each of
|
568 |
-
// the input chars and putting the result into the output array
|
569 |
-
// While mapping required chars we apply the cannonical ordering
|
570 |
-
foreach ($input as $v) {
|
571 |
-
// Map to nothing == skip that code point
|
572 |
-
if (in_array($v, $this->NP['map_nothing'])) continue;
|
573 |
-
|
574 |
-
// Try to find prohibited input
|
575 |
-
if (in_array($v, $this->NP['prohibit']) || in_array($v, $this->NP['general_prohibited'])) {
|
576 |
-
$this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v));
|
577 |
-
return false;
|
578 |
-
}
|
579 |
-
foreach ($this->NP['prohibit_ranges'] as $range) {
|
580 |
-
if ($range[0] <= $v && $v <= $range[1]) {
|
581 |
-
$this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v));
|
582 |
-
return false;
|
583 |
-
}
|
584 |
-
}
|
585 |
-
//
|
586 |
-
// Hangul syllable decomposition
|
587 |
-
if (0xAC00 <= $v && $v <= 0xD7AF) {
|
588 |
-
foreach ($this->_hangul_decompose($v) as $out) {
|
589 |
-
$output[] = (int) $out;
|
590 |
-
}
|
591 |
-
// There's a decomposition mapping for that code point
|
592 |
-
} elseif (isset($this->NP['replacemaps'][$v])) {
|
593 |
-
foreach ($this->_apply_cannonical_ordering($this->NP['replacemaps'][$v]) as $out) {
|
594 |
-
$output[] = (int) $out;
|
595 |
-
}
|
596 |
-
} else {
|
597 |
-
$output[] = (int) $v;
|
598 |
-
}
|
599 |
-
}
|
600 |
-
// Before applying any Combining, try to rearrange any Hangul syllables
|
601 |
-
$output = $this->_hangul_compose($output);
|
602 |
-
//
|
603 |
-
// Combine code points
|
604 |
-
//
|
605 |
-
$last_class = 0;
|
606 |
-
$last_starter = 0;
|
607 |
-
$out_len = count($output);
|
608 |
-
for ($i = 0; $i < $out_len; ++$i) {
|
609 |
-
$class = $this->_get_combining_class($output[$i]);
|
610 |
-
if ((!$last_class || $last_class > $class) && $class) {
|
611 |
-
// Try to match
|
612 |
-
$seq_len = $i - $last_starter;
|
613 |
-
$out = $this->_combine(array_slice($output, $last_starter, $seq_len));
|
614 |
-
// On match: Replace the last starter with the composed character and remove
|
615 |
-
// the now redundant non-starter(s)
|
616 |
-
if ($out) {
|
617 |
-
$output[$last_starter] = $out;
|
618 |
-
if (count($out) != $seq_len) {
|
619 |
-
for ($j = $i+1; $j < $out_len; ++$j) {
|
620 |
-
$output[$j-1] = $output[$j];
|
621 |
-
}
|
622 |
-
unset($output[$out_len]);
|
623 |
-
}
|
624 |
-
// Rewind the for loop by one, since there can be more possible compositions
|
625 |
-
$i--;
|
626 |
-
$out_len--;
|
627 |
-
$last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i-1]);
|
628 |
-
continue;
|
629 |
-
}
|
630 |
-
}
|
631 |
-
// The current class is 0
|
632 |
-
if (!$class) $last_starter = $i;
|
633 |
-
$last_class = $class;
|
634 |
-
}
|
635 |
-
return $output;
|
636 |
-
}
|
637 |
-
|
638 |
-
/**
|
639 |
-
* Decomposes a Hangul syllable
|
640 |
-
* (see http://www.unicode.org/unicode/reports/tr15/#Hangul
|
641 |
-
* @param integer 32bit UCS4 code point
|
642 |
-
* @return array Either Hangul Syllable decomposed or original 32bit value as one value array
|
643 |
-
* @access private
|
644 |
-
*/
|
645 |
-
function _hangul_decompose($char)
|
646 |
-
{
|
647 |
-
$sindex = (int) $char - $this->_sbase;
|
648 |
-
if ($sindex < 0 || $sindex >= $this->_scount) {
|
649 |
-
return array($char);
|
650 |
-
}
|
651 |
-
$result = array();
|
652 |
-
$result[] = (int) $this->_lbase + $sindex / $this->_ncount;
|
653 |
-
$result[] = (int) $this->_vbase + ($sindex % $this->_ncount) / $this->_tcount;
|
654 |
-
$T = intval($this->_tbase + $sindex % $this->_tcount);
|
655 |
-
if ($T != $this->_tbase) $result[] = $T;
|
656 |
-
return $result;
|
657 |
-
}
|
658 |
-
/**
|
659 |
-
* Ccomposes a Hangul syllable
|
660 |
-
* (see http://www.unicode.org/unicode/reports/tr15/#Hangul
|
661 |
-
* @param array Decomposed UCS4 sequence
|
662 |
-
* @return array UCS4 sequence with syllables composed
|
663 |
-
* @access private
|
664 |
-
*/
|
665 |
-
function _hangul_compose($input)
|
666 |
-
{
|
667 |
-
$inp_len = count($input);
|
668 |
-
if (!$inp_len) return array();
|
669 |
-
$result = array();
|
670 |
-
$last = (int) $input[0];
|
671 |
-
$result[] = $last; // copy first char from input to output
|
672 |
-
|
673 |
-
for ($i = 1; $i < $inp_len; ++$i) {
|
674 |
-
$char = (int) $input[$i];
|
675 |
-
$sindex = $last - $this->_sbase;
|
676 |
-
$lindex = $last - $this->_lbase;
|
677 |
-
$vindex = $char - $this->_vbase;
|
678 |
-
$tindex = $char - $this->_tbase;
|
679 |
-
// Find out, whether two current characters are LV and T
|
680 |
-
if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount == 0)
|
681 |
-
&& 0 <= $tindex && $tindex <= $this->_tcount) {
|
682 |
-
// create syllable of form LVT
|
683 |
-
$last += $tindex;
|
684 |
-
$result[(count($result) - 1)] = $last; // reset last
|
685 |
-
continue; // discard char
|
686 |
-
}
|
687 |
-
// Find out, whether two current characters form L and V
|
688 |
-
if (0 <= $lindex && $lindex < $this->_lcount && 0 <= $vindex && $vindex < $this->_vcount) {
|
689 |
-
// create syllable of form LV
|
690 |
-
$last = (int) $this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount;
|
691 |
-
$result[(count($result) - 1)] = $last; // reset last
|
692 |
-
continue; // discard char
|
693 |
-
}
|
694 |
-
// if neither case was true, just add the character
|
695 |
-
$last = $char;
|
696 |
-
$result[] = $char;
|
697 |
-
}
|
698 |
-
return $result;
|
699 |
-
}
|
700 |
-
|
701 |
-
/**
|
702 |
-
* Returns the combining class of a certain wide char
|
703 |
-
* @param integer Wide char to check (32bit integer)
|
704 |
-
* @return integer Combining class if found, else 0
|
705 |
-
* @access private
|
706 |
-
*/
|
707 |
-
function _get_combining_class($char)
|
708 |
-
{
|
709 |
-
return isset($this->NP['norm_combcls'][$char]) ? $this->NP['norm_combcls'][$char] : 0;
|
710 |
-
}
|
711 |
-
|
712 |
-
/**
|
713 |
-
* Apllies the cannonical ordering of a decomposed UCS4 sequence
|
714 |
-
* @param array Decomposed UCS4 sequence
|
715 |
-
* @return array Ordered USC4 sequence
|
716 |
-
* @access private
|
717 |
-
*/
|
718 |
-
function _apply_cannonical_ordering($input)
|
719 |
-
{
|
720 |
-
$swap = true;
|
721 |
-
$size = count($input);
|
722 |
-
while ($swap) {
|
723 |
-
$swap = false;
|
724 |
-
$last = $this->_get_combining_class(intval($input[0]));
|
725 |
-
for ($i = 0; $i < $size-1; ++$i) {
|
726 |
-
$next = $this->_get_combining_class(intval($input[$i+1]));
|
727 |
-
if ($next != 0 && $last > $next) {
|
728 |
-
// Move item leftward until it fits
|
729 |
-
for ($j = $i + 1; $j > 0; --$j) {
|
730 |
-
if ($this->_get_combining_class(intval($input[$j-1])) <= $next) break;
|
731 |
-
$t = intval($input[$j]);
|
732 |
-
$input[$j] = intval($input[$j-1]);
|
733 |
-
$input[$j-1] = $t;
|
734 |
-
$swap = true;
|
735 |
-
}
|
736 |
-
// Reentering the loop looking at the old character again
|
737 |
-
$next = $last;
|
738 |
-
}
|
739 |
-
$last = $next;
|
740 |
-
}
|
741 |
-
}
|
742 |
-
return $input;
|
743 |
-
}
|
744 |
-
|
745 |
-
/**
|
746 |
-
* Do composition of a sequence of starter and non-starter
|
747 |
-
* @param array UCS4 Decomposed sequence
|
748 |
-
* @return array Ordered USC4 sequence
|
749 |
-
* @access private
|
750 |
-
*/
|
751 |
-
function _combine($input)
|
752 |
-
{
|
753 |
-
$inp_len = count($input);
|
754 |
-
foreach ($this->NP['replacemaps'] as $np_src => $np_target) {
|
755 |
-
if ($np_target[0] != $input[0]) continue;
|
756 |
-
if (count($np_target) != $inp_len) continue;
|
757 |
-
$hit = false;
|
758 |
-
foreach ($input as $k2 => $v2) {
|
759 |
-
if ($v2 == $np_target[$k2]) {
|
760 |
-
$hit = true;
|
761 |
-
} else {
|
762 |
-
$hit = false;
|
763 |
-
break;
|
764 |
-
}
|
765 |
-
}
|
766 |
-
if ($hit) return $np_src;
|
767 |
-
}
|
768 |
-
return false;
|
769 |
-
}
|
770 |
-
|
771 |
-
/**
|
772 |
-
* This converts an UTF-8 encoded string to its UCS-4 representation
|
773 |
-
* By talking about UCS-4 "strings" we mean arrays of 32bit integers representing
|
774 |
-
* each of the "chars". This is due to PHP not being able to handle strings with
|
775 |
-
* bit depth different from 8. This apllies to the reverse method _ucs4_to_utf8(), too.
|
776 |
-
* The following UTF-8 encodings are supported:
|
777 |
-
* bytes bits representation
|
778 |
-
* 1 7 0xxxxxxx
|
779 |
-
* 2 11 110xxxxx 10xxxxxx
|
780 |
-
* 3 16 1110xxxx 10xxxxxx 10xxxxxx
|
781 |
-
* 4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
|
782 |
-
* 5 26 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
|
783 |
-
* 6 31 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
|
784 |
-
* Each x represents a bit that can be used to store character data.
|
785 |
-
* The five and six byte sequences are part of Annex D of ISO/IEC 10646-1:2000
|
786 |
-
* @access private
|
787 |
-
*/
|
788 |
-
function _utf8_to_ucs4($input)
|
789 |
-
{
|
790 |
-
$output = array();
|
791 |
-
$out_len = 0;
|
792 |
-
$inp_len = strlen($input);
|
793 |
-
$mode = 'next';
|
794 |
-
$test = 'none';
|
795 |
-
for ($k = 0; $k < $inp_len; ++$k) {
|
796 |
-
$v = ord($input{$k}); // Extract byte from input string
|
797 |
-
|
798 |
-
if ($v < 128) { // We found an ASCII char - put into stirng as is
|
799 |
-
$output[$out_len] = $v;
|
800 |
-
++$out_len;
|
801 |
-
if ('add' == $mode) {
|
802 |
-
$this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
|
803 |
-
return false;
|
804 |
-
}
|
805 |
-
continue;
|
806 |
-
}
|
807 |
-
if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char
|
808 |
-
$start_byte = $v;
|
809 |
-
$mode = 'add';
|
810 |
-
$test = 'range';
|
811 |
-
if ($v >> 5 == 6) { // &110xxxxx 10xxxxx
|
812 |
-
$next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left
|
813 |
-
$v = ($v - 192) << 6;
|
814 |
-
} elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx
|
815 |
-
$next_byte = 1;
|
816 |
-
$v = ($v - 224) << 12;
|
817 |
-
} elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
|
818 |
-
$next_byte = 2;
|
819 |
-
$v = ($v - 240) << 18;
|
820 |
-
} elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
|
821 |
-
$next_byte = 3;
|
822 |
-
$v = ($v - 248) << 24;
|
823 |
-
} elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
|
824 |
-
$next_byte = 4;
|
825 |
-
$v = ($v - 252) << 30;
|
826 |
-
} else {
|
827 |
-
$this->_error('This might be UTF-8, but I don\'t understand it at byte '.$k);
|
828 |
-
return false;
|
829 |
-
}
|
830 |
-
if ('add' == $mode) {
|
831 |
-
$output[$out_len] = (int) $v;
|
832 |
-
++$out_len;
|
833 |
-
continue;
|
834 |
-
}
|
835 |
-
}
|
836 |
-
if ('add' == $mode) {
|
837 |
-
if (!$this->_allow_overlong && $test == 'range') {
|
838 |
-
$test = 'none';
|
839 |
-
if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) {
|
840 |
-
$this->_error('Bogus UTF-8 character detected (out of legal range) at byte '.$k);
|
841 |
-
return false;
|
842 |
-
}
|
843 |
-
}
|
844 |
-
if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx
|
845 |
-
$v = ($v - 128) << ($next_byte * 6);
|
846 |
-
$output[($out_len - 1)] += $v;
|
847 |
-
--$next_byte;
|
848 |
-
} else {
|
849 |
-
$this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
|
850 |
-
return false;
|
851 |
-
}
|
852 |
-
if ($next_byte < 0) {
|
853 |
-
$mode = 'next';
|
854 |
-
}
|
855 |
-
}
|
856 |
-
} // for
|
857 |
-
return $output;
|
858 |
-
}
|
859 |
-
|
860 |
-
/**
|
861 |
-
* Convert UCS-4 string into UTF-8 string
|
862 |
-
* See _utf8_to_ucs4() for details
|
863 |
-
* @access private
|
864 |
-
*/
|
865 |
-
function _ucs4_to_utf8($input)
|
866 |
-
{
|
867 |
-
$output = '';
|
868 |
-
$k = 0;
|
869 |
-
foreach ($input as $v) {
|
870 |
-
++$k;
|
871 |
-
// $v = ord($v);
|
872 |
-
if ($v < 128) { // 7bit are transferred literally
|
873 |
-
$output .= chr($v);
|
874 |
-
} elseif ($v < (1 << 11)) { // 2 bytes
|
875 |
-
$output .= chr(192 + ($v >> 6)) . chr(128 + ($v & 63));
|
876 |
-
} elseif ($v < (1 << 16)) { // 3 bytes
|
877 |
-
$output .= chr(224 + ($v >> 12)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
|
878 |
-
} elseif ($v < (1 << 21)) { // 4 bytes
|
879 |
-
$output .= chr(240 + ($v >> 18)) . chr(128 + (($v >> 12) & 63))
|
880 |
-
. chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
|
881 |
-
} elseif ($v < (1 << 26)) { // 5 bytes
|
882 |
-
$output .= chr(248 + ($v >> 24)) . chr(128 + (($v >> 18) & 63))
|
883 |
-
. chr(128 + (($v >> 12) & 63)) . chr(128 + (($v >> 6) & 63))
|
884 |
-
. chr(128 + ($v & 63));
|
885 |
-
} elseif ($v < (1 << 31)) { // 6 bytes
|
886 |
-
$output .= chr(252 + ($v >> 30)) . chr(128 + (($v >> 24) & 63))
|
887 |
-
. chr(128 + (($v >> 18) & 63)) . chr(128 + (($v >> 12) & 63))
|
888 |
-
. chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
|
889 |
-
} else {
|
890 |
-
$this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte '.$k);
|
891 |
-
return false;
|
892 |
-
}
|
893 |
-
}
|
894 |
-
return $output;
|
895 |
-
}
|
896 |
-
|
897 |
-
/**
|
898 |
-
* Convert UCS-4 array into UCS-4 string
|
899 |
-
*
|
900 |
-
* @access private
|
901 |
-
*/
|
902 |
-
function _ucs4_to_ucs4_string($input)
|
903 |
-
{
|
904 |
-
$output = '';
|
905 |
-
// Take array values and split output to 4 bytes per value
|
906 |
-
// The bit mask is 255, which reads &11111111
|
907 |
-
foreach ($input as $v) {
|
908 |
-
$output .= chr(($v >> 24) & 255).chr(($v >> 16) & 255).chr(($v >> 8) & 255).chr($v & 255);
|
909 |
-
}
|
910 |
-
return $output;
|
911 |
-
}
|
912 |
-
|
913 |
-
/**
|
914 |
-
* Convert UCS-4 strin into UCS-4 garray
|
915 |
-
*
|
916 |
-
* @access private
|
917 |
-
*/
|
918 |
-
function _ucs4_string_to_ucs4($input)
|
919 |
-
{
|
920 |
-
$output = array();
|
921 |
-
$inp_len = strlen($input);
|
922 |
-
// Input length must be dividable by 4
|
923 |
-
if ($inp_len % 4) {
|
924 |
-
$this->_error('Input UCS4 string is broken');
|
925 |
-
return false;
|
926 |
-
}
|
927 |
-
// Empty input - return empty output
|
928 |
-
if (!$inp_len) return $output;
|
929 |
-
for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) {
|
930 |
-
// Increment output position every 4 input bytes
|
931 |
-
if (!($i % 4)) {
|
932 |
-
$out_len++;
|
933 |
-
$output[$out_len] = 0;
|
934 |
-
}
|
935 |
-
$output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) );
|
936 |
-
}
|
937 |
-
return $output;
|
938 |
-
}
|
939 |
-
}
|
940 |
-
|
941 |
-
/**
|
942 |
-
* Adapter class for aligning the API of idna_convert with that of Net_IDNA
|
943 |
-
* @author Matthias Sommerfeld <mso@phlylabs.de>
|
944 |
-
*/
|
945 |
-
class Net_IDNA_php4 extends idna_convert
|
946 |
-
{
|
947 |
-
/**
|
948 |
-
* Sets a new option value. Available options and values:
|
949 |
-
* [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8,
|
950 |
-
* 'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8]
|
951 |
-
* [overlong - Unicode does not allow unnecessarily long encodings of chars,
|
952 |
-
* to allow this, set this parameter to true, else to false;
|
953 |
-
* default is false.]
|
954 |
-
* [strict - true: strict mode, good for registration purposes - Causes errors
|
955 |
-
* on failures; false: loose mode, ideal for "wildlife" applications
|
956 |
-
* by silently ignoring errors and returning the original input instead
|
957 |
-
*
|
958 |
-
* @param mixed Parameter to set (string: single parameter; array of Parameter => Value pairs)
|
959 |
-
* @param string Value to use (if parameter 1 is a string)
|
960 |
-
* @return boolean true on success, false otherwise
|
961 |
-
* @access public
|
962 |
-
*/
|
963 |
-
function setParams($option, $param = false)
|
964 |
-
{
|
965 |
-
return $this->IC->set_parameters($option, $param);
|
966 |
-
}
|
967 |
-
}
|
968 |
-
|
969 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.ip.lib.php
DELETED
@@ -1,120 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
26 |
-
*/
|
27 |
-
|
28 |
-
//-----------------------------------------------------------------
|
29 |
-
// Check if ip adddress is valid
|
30 |
-
|
31 |
-
function phpwhois_validip($ip)
|
32 |
-
{
|
33 |
-
|
34 |
-
if (empty($ip))
|
35 |
-
return false;
|
36 |
-
|
37 |
-
if ((ip2long($ip) == -1) or (ip2long($ip) === false))
|
38 |
-
return false;
|
39 |
-
|
40 |
-
$reserved_ips = array (
|
41 |
-
array('0.0.0.0','2.255.255.255'),
|
42 |
-
array('10.0.0.0','10.255.255.255'),
|
43 |
-
array('127.0.0.0','127.255.255.255'),
|
44 |
-
array('169.254.0.0','169.254.255.255'),
|
45 |
-
array('172.16.0.0','172.31.255.255'),
|
46 |
-
array('192.0.2.0','192.0.2.255'),
|
47 |
-
array('192.168.0.0','192.168.255.255'),
|
48 |
-
array('255.255.255.0','255.255.255.255')
|
49 |
-
);
|
50 |
-
|
51 |
-
foreach ($reserved_ips as $r)
|
52 |
-
{
|
53 |
-
$min = ip2long($r[0]);
|
54 |
-
$max = ip2long($r[1]);
|
55 |
-
if ((ip2long($ip) >= $min) && (ip2long($ip) <= $max)) return false;
|
56 |
-
}
|
57 |
-
|
58 |
-
return true;
|
59 |
-
}
|
60 |
-
|
61 |
-
//-----------------------------------------------------------------
|
62 |
-
// Get real client ip address
|
63 |
-
|
64 |
-
function phpwhois_getclientip()
|
65 |
-
{
|
66 |
-
if (!empty($_SERVER['HTTP_CLIENT_IP']) && phpwhois_validip($_SERVER['HTTP_CLIENT_IP']))
|
67 |
-
return $_SERVER['HTTP_CLIENT_IP'];
|
68 |
-
|
69 |
-
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
|
70 |
-
foreach (explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']) as $ip)
|
71 |
-
if (phpwhois_validip(trim($ip)))
|
72 |
-
return $ip;
|
73 |
-
|
74 |
-
if (!empty($_SERVER['HTTP_X_FORWARDED']) && phpwhois_validip($_SERVER['HTTP_X_FORWARDED']))
|
75 |
-
return $_SERVER['HTTP_X_FORWARDED'];
|
76 |
-
|
77 |
-
if (!empty($_SERVER['HTTP_FORWARDED_FOR']) && phpwhois_validip($_SERVER['HTTP_FORWARDED_FOR']))
|
78 |
-
return $_SERVER['HTTP_FORWARDED_FOR'];
|
79 |
-
|
80 |
-
if (!empty($_SERVER['HTTP_FORWARDED']) && phpwhois_validip($_SERVER['HTTP_FORWARDED']))
|
81 |
-
return $_SERVER['HTTP_FORWARDED'];
|
82 |
-
|
83 |
-
if (!empty($_SERVER['HTTP_X_FORWARDED']) && phpwhois_validip($_SERVER['HTTP_X_FORWARDED']))
|
84 |
-
return $_SERVER['HTTP_X_FORWARDED'];
|
85 |
-
|
86 |
-
return $_SERVER['REMOTE_ADDR'];
|
87 |
-
}
|
88 |
-
|
89 |
-
//-----------------------------------------------------------------
|
90 |
-
// Convert from CIDR to net range
|
91 |
-
|
92 |
-
function phpwhois_cidr_conv($net)
|
93 |
-
{
|
94 |
-
$start = strtok($net, '/');
|
95 |
-
$n = 3-substr_count($net, '.');
|
96 |
-
|
97 |
-
if ($n > 0)
|
98 |
-
{
|
99 |
-
for ($i = $n; $i > 0; $i--)
|
100 |
-
$start.= '.0';
|
101 |
-
}
|
102 |
-
|
103 |
-
$bits1 = str_pad(decbin(ip2long($start)), 32, '0', 'STR_PAD_LEFT');
|
104 |
-
$net = pow(2, (32-substr(strstr($net, '/'), 1))) - 1;
|
105 |
-
$bits2 = str_pad(decbin($net), 32, '0', 'STR_PAD_LEFT');
|
106 |
-
$final = '';
|
107 |
-
|
108 |
-
for ($i = 0; $i < 32; $i++)
|
109 |
-
{
|
110 |
-
if ($bits1[$i] == $bits2[$i])
|
111 |
-
$final.= $bits1[$i];
|
112 |
-
if ($bits1[$i] == 1 and $bits2[$i] == 0)
|
113 |
-
$final.= $bits1[$i];
|
114 |
-
if ($bits1[$i] == 0 and $bits2[$i] == 1)
|
115 |
-
$final.= $bits2[$i];
|
116 |
-
}
|
117 |
-
|
118 |
-
return $start." - ".long2ip(bindec($final));
|
119 |
-
}
|
120 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.ip.php
DELETED
@@ -1,285 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
26 |
-
*/
|
27 |
-
|
28 |
-
if (!defined('__IP_HANDLER__'))
|
29 |
-
define('__IP_HANDLER__', 1);
|
30 |
-
|
31 |
-
require_once('whois.ip.lib.php');
|
32 |
-
|
33 |
-
class ip_handler extends WhoisClient
|
34 |
-
{
|
35 |
-
// Deep whois ?
|
36 |
-
var $deep_whois = true;
|
37 |
-
|
38 |
-
var $HANDLER_VERSION = '1.0';
|
39 |
-
|
40 |
-
var $REGISTRARS = array(
|
41 |
-
'European Regional Internet Registry/RIPE NCC' => 'whois.ripe.net',
|
42 |
-
'RIPE Network Coordination Centre' => 'whois.ripe.net',
|
43 |
-
'Asia Pacific Network Information Center' => 'whois.apnic.net',
|
44 |
-
'Asia Pacific Network Information Centre' => 'whois.apnic.net',
|
45 |
-
'Latin American and Caribbean IP address Regional Registry' => 'whois.lacnic.net',
|
46 |
-
'African Network Information Center' => 'whois.afrinic.net'
|
47 |
-
);
|
48 |
-
|
49 |
-
var $HANDLERS = array(
|
50 |
-
'whois.krnic.net' => 'krnic',
|
51 |
-
'whois.apnic.net' => 'apnic',
|
52 |
-
'whois.ripe.net' => 'ripe',
|
53 |
-
'whois.arin.net' => 'arin',
|
54 |
-
'whois.lacnic.net' => 'lacnic',
|
55 |
-
'whois.afrinic.net' => 'afrinic'
|
56 |
-
);
|
57 |
-
|
58 |
-
var $more_data = array(); // More queries to get more accurated data
|
59 |
-
var $done = array();
|
60 |
-
|
61 |
-
function parse($data, $query)
|
62 |
-
{
|
63 |
-
$result['regrinfo'] = array();
|
64 |
-
$result['regyinfo'] = array();
|
65 |
-
$result['regyinfo']['registrar'] = 'American Registry for Internet Numbers (ARIN)';
|
66 |
-
$result['rawdata'] = array();
|
67 |
-
|
68 |
-
if (strpos($query,'.') === false)
|
69 |
-
$result['regyinfo']['type'] = 'AS';
|
70 |
-
else
|
71 |
-
$result['regyinfo']['type'] = 'ip';
|
72 |
-
|
73 |
-
if (!$this->deep_whois) return null;
|
74 |
-
|
75 |
-
$this->Query = array();
|
76 |
-
$this->Query['server'] = 'whois.arin.net';
|
77 |
-
$this->Query['query'] = $query;
|
78 |
-
|
79 |
-
$rawdata = $data['rawdata'];
|
80 |
-
|
81 |
-
if (empty($rawdata)) return $result;
|
82 |
-
|
83 |
-
$presults[] = $rawdata;
|
84 |
-
$ip = ip2long($query);
|
85 |
-
$done = array();
|
86 |
-
|
87 |
-
while (count($presults) > 0)
|
88 |
-
{
|
89 |
-
$rwdata = array_shift($presults);
|
90 |
-
$found = false;
|
91 |
-
|
92 |
-
foreach($rwdata as $line)
|
93 |
-
{
|
94 |
-
if (!strncmp($line,'American Registry for Internet Numbers',38)) continue;
|
95 |
-
|
96 |
-
$p = strpos($line, '(NETBLK-');
|
97 |
-
|
98 |
-
if ($p === false) $p = strpos($line, '(NET-');
|
99 |
-
|
100 |
-
if ($p !== false)
|
101 |
-
{
|
102 |
-
$net = strtok(substr($line,$p+1),') ');
|
103 |
-
list($low,$high) = explode('-',str_replace(' ','',substr($line,$p+strlen($net)+3)));
|
104 |
-
|
105 |
-
if (!isset($done[$net]) && $ip >= ip2long($low) && $ip <= ip2long($high))
|
106 |
-
{
|
107 |
-
$owner = substr($line,0,$p-1);
|
108 |
-
|
109 |
-
if (!empty($this->REGISTRARS['owner']))
|
110 |
-
{
|
111 |
-
$this->handle_rwhois($this->REGISTRARS['owner'],$query);
|
112 |
-
break 2;
|
113 |
-
}
|
114 |
-
else
|
115 |
-
{
|
116 |
-
$this->Query['args'] = 'n '.$net;
|
117 |
-
$presults[] = $this->GetRawData($net);
|
118 |
-
$done[$net] = 1;
|
119 |
-
}
|
120 |
-
}
|
121 |
-
$found = true;
|
122 |
-
}
|
123 |
-
}
|
124 |
-
|
125 |
-
if (!$found)
|
126 |
-
{
|
127 |
-
$this->Query['file'] = 'whois.ip.arin.php';
|
128 |
-
$this->Query['handler'] = 'arin';
|
129 |
-
$result = $this->parse_results($result,$rwdata,$query,true);
|
130 |
-
}
|
131 |
-
}
|
132 |
-
|
133 |
-
unset($this->Query['args']);
|
134 |
-
|
135 |
-
while (count($this->more_data) > 0)
|
136 |
-
{
|
137 |
-
$srv_data = array_shift($this->more_data);
|
138 |
-
$this->Query['server'] = $srv_data['server'];
|
139 |
-
unset($this->Query['handler']);
|
140 |
-
// Use original query
|
141 |
-
$rwdata = $this->GetRawData($srv_data['query']);
|
142 |
-
|
143 |
-
if (!empty($rwdata))
|
144 |
-
{
|
145 |
-
if (!empty($srv_data['handler']))
|
146 |
-
{
|
147 |
-
$this->Query['handler'] = $srv_data['handler'];
|
148 |
-
|
149 |
-
if (!empty($srv_data['file']))
|
150 |
-
$this->Query['file'] = $srv_data['file'];
|
151 |
-
else
|
152 |
-
$this->Query['file'] = 'whois.'.$this->Query['handler'].'.php';
|
153 |
-
}
|
154 |
-
|
155 |
-
$result = $this->parse_results($result,$rwdata,$query,$srv_data['reset']);
|
156 |
-
$result = $this->set_whois_info($result);
|
157 |
-
$reset = false;
|
158 |
-
}
|
159 |
-
}
|
160 |
-
|
161 |
-
|
162 |
-
// Normalize nameserver fields
|
163 |
-
|
164 |
-
if (isset($result['regrinfo']['network']['nserver']))
|
165 |
-
{
|
166 |
-
if (!is_array($result['regrinfo']['network']['nserver']))
|
167 |
-
{
|
168 |
-
unset($result['regrinfo']['network']['nserver']);
|
169 |
-
}
|
170 |
-
else
|
171 |
-
$result['regrinfo']['network']['nserver'] = $this->FixNameServer($result['regrinfo']['network']['nserver']);
|
172 |
-
}
|
173 |
-
|
174 |
-
return $result;
|
175 |
-
}
|
176 |
-
|
177 |
-
//-----------------------------------------------------------------
|
178 |
-
|
179 |
-
function parse_results($result,$rwdata,$query,$reset)
|
180 |
-
{
|
181 |
-
$rwres = $this->Process($rwdata);
|
182 |
-
|
183 |
-
if ($result['regyinfo']['type'] == 'AS' && !empty($rwres['regrinfo']['network']))
|
184 |
-
{
|
185 |
-
$rwres['regrinfo']['AS'] = $rwres['regrinfo']['network'];
|
186 |
-
unset($rwres['regrinfo']['network']);
|
187 |
-
}
|
188 |
-
|
189 |
-
if ($reset)
|
190 |
-
{
|
191 |
-
$result['regrinfo'] = $rwres['regrinfo'];
|
192 |
-
$result['rawdata'] = $rwdata;
|
193 |
-
}
|
194 |
-
else
|
195 |
-
{
|
196 |
-
$result['rawdata'][] = '';
|
197 |
-
|
198 |
-
foreach ($rwdata as $line)
|
199 |
-
$result['rawdata'][] = $line;
|
200 |
-
|
201 |
-
foreach($rwres['regrinfo'] as $key => $data)
|
202 |
-
{
|
203 |
-
$result = $this->join_result($result,$key,$rwres);
|
204 |
-
}
|
205 |
-
}
|
206 |
-
|
207 |
-
if ($this->deep_whois)
|
208 |
-
{
|
209 |
-
if (isset($rwres['regrinfo']['rwhois']))
|
210 |
-
{
|
211 |
-
$this->handle_rwhois($rwres['regrinfo']['rwhois'],$query);
|
212 |
-
unset($result['regrinfo']['rwhois']);
|
213 |
-
}
|
214 |
-
else
|
215 |
-
if (!@empty($rwres['regrinfo']['owner']['organization']))
|
216 |
-
switch ($rwres['regrinfo']['owner']['organization'])
|
217 |
-
{
|
218 |
-
case 'KRNIC':
|
219 |
-
$this->handle_rwhois('whois.krnic.net',$query);
|
220 |
-
break;
|
221 |
-
|
222 |
-
case 'African Network Information Center':
|
223 |
-
$this->handle_rwhois('whois.afrinic.net',$query);
|
224 |
-
break;
|
225 |
-
}
|
226 |
-
}
|
227 |
-
|
228 |
-
if (!empty($rwres['regyinfo']))
|
229 |
-
$result['regyinfo'] = array_merge($result['regyinfo'],$rwres['regyinfo']);
|
230 |
-
|
231 |
-
return $result;
|
232 |
-
}
|
233 |
-
|
234 |
-
//-----------------------------------------------------------------
|
235 |
-
|
236 |
-
function handle_rwhois($server,$query)
|
237 |
-
{
|
238 |
-
// Avoid querying the same server twice
|
239 |
-
|
240 |
-
$parts = parse_url($server);
|
241 |
-
|
242 |
-
if (empty($parts['host']))
|
243 |
-
$host = $parts['path'];
|
244 |
-
else
|
245 |
-
$host = $parts['host'];
|
246 |
-
|
247 |
-
if (array_key_exists($host,$this->done)) return;
|
248 |
-
|
249 |
-
$q = array (
|
250 |
-
'query' => $query,
|
251 |
-
'server' => $server
|
252 |
-
);
|
253 |
-
|
254 |
-
if (isset($this->HANDLERS[$host]))
|
255 |
-
{
|
256 |
-
$q['handler'] = $this->HANDLERS[$host];
|
257 |
-
$q['file'] = sprintf('whois.ip.%s.php', $q['handler']);
|
258 |
-
$q['reset'] = true;
|
259 |
-
}
|
260 |
-
else
|
261 |
-
{
|
262 |
-
$q['handler'] = 'rwhois';
|
263 |
-
$q['reset'] = false;
|
264 |
-
unset($q['file']);
|
265 |
-
}
|
266 |
-
|
267 |
-
$this->more_data[] = $q;
|
268 |
-
$this->done[$host] = 1;
|
269 |
-
}
|
270 |
-
|
271 |
-
//-----------------------------------------------------------------
|
272 |
-
|
273 |
-
function join_result($result, $key, $newres)
|
274 |
-
{
|
275 |
-
if (isset($result['regrinfo'][$key]) && !array_key_exists(0,$result['regrinfo'][$key]))
|
276 |
-
{
|
277 |
-
$r = $result['regrinfo'][$key];
|
278 |
-
$result['regrinfo'][$key] = array($r);
|
279 |
-
}
|
280 |
-
|
281 |
-
$result['regrinfo'][$key][] = $newres['regrinfo'][$key];
|
282 |
-
return $result;
|
283 |
-
}
|
284 |
-
}
|
285 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.main.php
DELETED
@@ -1,327 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
26 |
-
*/
|
27 |
-
|
28 |
-
require_once('whois.client.php');
|
29 |
-
require_once('whois.idna.php');
|
30 |
-
|
31 |
-
class Whois extends WhoisClient
|
32 |
-
{
|
33 |
-
// Deep whois ?
|
34 |
-
var $deep_whois = true;
|
35 |
-
|
36 |
-
// Windows based ?
|
37 |
-
var $windows = false;
|
38 |
-
|
39 |
-
// Recursion allowed ?
|
40 |
-
var $gtld_recurse = true;
|
41 |
-
|
42 |
-
// Support for non-ICANN tld's
|
43 |
-
var $non_icann = false;
|
44 |
-
|
45 |
-
// Network Solutions registry server
|
46 |
-
var $NSI_REGISTRY = 'whois.nsiregistry.net';
|
47 |
-
|
48 |
-
/*
|
49 |
-
* Constructor function
|
50 |
-
*/
|
51 |
-
function Whois()
|
52 |
-
{
|
53 |
-
// Load DATA array
|
54 |
-
@require('whois.servers.php');
|
55 |
-
|
56 |
-
if ( ( substr( php_uname(), 0, 7 ) == 'Windows' ) )
|
57 |
-
$this->windows = true;
|
58 |
-
else
|
59 |
-
$this->windows = false;
|
60 |
-
|
61 |
-
// Set version
|
62 |
-
$this->VERSION = sprintf("phpWhois v%s-%s", $this->CODE_VERSION, $this->DATA_VERSION);
|
63 |
-
}
|
64 |
-
|
65 |
-
/*
|
66 |
-
* Use special whois server
|
67 |
-
*/
|
68 |
-
|
69 |
-
function UseServer ($tld, $server)
|
70 |
-
{
|
71 |
-
$this->WHOIS_SPECIAL[$tld] = $server;
|
72 |
-
}
|
73 |
-
|
74 |
-
/*
|
75 |
-
* Lookup query
|
76 |
-
*/
|
77 |
-
|
78 |
-
function Lookup($query = '', $is_utf = true)
|
79 |
-
{
|
80 |
-
// start clean
|
81 |
-
$this->Query = array( 'status' => '' );
|
82 |
-
|
83 |
-
$query = trim($query);
|
84 |
-
|
85 |
-
$IDN = new idna_convert();
|
86 |
-
|
87 |
-
if ($is_utf)
|
88 |
-
$query = $IDN->encode($query);
|
89 |
-
else
|
90 |
-
$query = $IDN->encode(utf8_encode($query));
|
91 |
-
|
92 |
-
// If domain to query was not set
|
93 |
-
if (!isSet($query) || $query == '')
|
94 |
-
{
|
95 |
-
// Configure to use default whois server
|
96 |
-
$this->Query['server'] = $this->NSI_REGISTRY;
|
97 |
-
return ;
|
98 |
-
}
|
99 |
-
|
100 |
-
// Set domain to query in query array
|
101 |
-
|
102 |
-
$this->Query['query'] = $domain = strtolower($query);
|
103 |
-
|
104 |
-
// If query is an ip address do ip lookup
|
105 |
-
|
106 |
-
if ($query == long2ip(ip2long($query)))
|
107 |
-
{
|
108 |
-
// IPv4 Prepare to do lookup via the 'ip' handler
|
109 |
-
$ip = @gethostbyname($query);
|
110 |
-
|
111 |
-
if (isset($this->WHOIS_SPECIAL['ip']))
|
112 |
-
{
|
113 |
-
$this->Query['server'] = $this->WHOIS_SPECIAL['ip'];
|
114 |
-
$this->Query['args'] = $ip;
|
115 |
-
}
|
116 |
-
else
|
117 |
-
{
|
118 |
-
$this->Query['server'] = 'whois.arin.net';
|
119 |
-
$this->Query['args'] = "n $ip";
|
120 |
-
$this->Query['file'] = 'whois.ip.php';
|
121 |
-
$this->Query['handler'] = 'ip';
|
122 |
-
}
|
123 |
-
$this->Query['host_ip'] = $ip;
|
124 |
-
$this->Query['query'] = $ip;
|
125 |
-
$this->Query['tld'] = 'ip';
|
126 |
-
$this->Query['host_name'] = @gethostbyaddr($ip);
|
127 |
-
return $this->GetData('',$this->deep_whois);
|
128 |
-
}
|
129 |
-
|
130 |
-
if (strpos($query, ':'))
|
131 |
-
{
|
132 |
-
// IPv6 AS Prepare to do lookup via the 'ip' handler
|
133 |
-
$ip = @gethostbyname($query);
|
134 |
-
|
135 |
-
if (isset($this->WHOIS_SPECIAL['ip']))
|
136 |
-
{
|
137 |
-
$this->Query['server'] = $this->WHOIS_SPECIAL['ip'];
|
138 |
-
}
|
139 |
-
else
|
140 |
-
{
|
141 |
-
$this->Query['server'] = 'whois.ripe.net';
|
142 |
-
$this->Query['file'] = 'whois.ip.ripe.php';
|
143 |
-
$this->Query['handler'] = 'ripe';
|
144 |
-
}
|
145 |
-
$this->Query['query'] = $ip;
|
146 |
-
$this->Query['tld'] = 'ip';
|
147 |
-
return $this->GetData('',$this->deep_whois);
|
148 |
-
}
|
149 |
-
|
150 |
-
if (!strpos($query, '.'))
|
151 |
-
{
|
152 |
-
// AS Prepare to do lookup via the 'ip' handler
|
153 |
-
$ip = @gethostbyname($query);
|
154 |
-
$this->Query['server'] = 'whois.arin.net';
|
155 |
-
if (strtolower(substr($ip,0,2)) == 'as')
|
156 |
-
$as = substr($ip,2);
|
157 |
-
else
|
158 |
-
$as = $ip;
|
159 |
-
$this->Query['args'] = "a $as";
|
160 |
-
$this->Query['file'] = 'whois.ip.php';
|
161 |
-
$this->Query['handler'] = 'ip';
|
162 |
-
$this->Query['query'] = $ip;
|
163 |
-
$this->Query['tld'] = 'as';
|
164 |
-
return $this->GetData('',$this->deep_whois);
|
165 |
-
}
|
166 |
-
|
167 |
-
// Build array of all possible tld's for that domain
|
168 |
-
|
169 |
-
$tld = '';
|
170 |
-
$server = '';
|
171 |
-
$dp = explode('.', $domain);
|
172 |
-
$np = count($dp)-1;
|
173 |
-
$tldtests = array();
|
174 |
-
|
175 |
-
for ($i = 0; $i < $np; $i++)
|
176 |
-
{
|
177 |
-
array_shift($dp);
|
178 |
-
$tldtests[] = implode('.', $dp);
|
179 |
-
}
|
180 |
-
|
181 |
-
// Search the correct whois server
|
182 |
-
|
183 |
-
if ($this->non_icann)
|
184 |
-
$special_tlds = array_merge($this->WHOIS_SPECIAL,$this->WHOIS_NON_ICANN);
|
185 |
-
else
|
186 |
-
$special_tlds = $this->WHOIS_SPECIAL;
|
187 |
-
|
188 |
-
foreach($tldtests as $tld)
|
189 |
-
{
|
190 |
-
// Test if we know in advance that no whois server is
|
191 |
-
// available for this domain and that we can get the
|
192 |
-
// data via http or whois request
|
193 |
-
|
194 |
-
if (isset($special_tlds[$tld]))
|
195 |
-
{
|
196 |
-
$val = $special_tlds[$tld];
|
197 |
-
|
198 |
-
if ($val == '') return $this->Unknown();
|
199 |
-
|
200 |
-
$domain = substr($query, 0, - strlen($tld) - 1);
|
201 |
-
$val = str_replace('{domain}', $domain, $val);
|
202 |
-
$server = str_replace('{tld}', $tld, $val);
|
203 |
-
break;
|
204 |
-
}
|
205 |
-
}
|
206 |
-
|
207 |
-
if ($server == '')
|
208 |
-
foreach($tldtests as $tld)
|
209 |
-
{
|
210 |
-
// Determine the top level domain, and it's whois server using
|
211 |
-
// DNS lookups on 'whois-servers.net'.
|
212 |
-
// Assumes a valid DNS response indicates a recognised tld (!?)
|
213 |
-
|
214 |
-
$cname = $tld.'.whois-servers.net';
|
215 |
-
|
216 |
-
if (gethostbyname($cname) == $cname) continue;
|
217 |
-
$server = $tld.'.whois-servers.net';
|
218 |
-
break;
|
219 |
-
}
|
220 |
-
|
221 |
-
if ($tld && $server)
|
222 |
-
{
|
223 |
-
// If found, set tld and whois server in query array
|
224 |
-
$this->Query['server'] = $server;
|
225 |
-
$this->Query['tld'] = $tld;
|
226 |
-
$handler = '';
|
227 |
-
|
228 |
-
foreach($tldtests as $htld)
|
229 |
-
{
|
230 |
-
// special handler exists for the tld ?
|
231 |
-
|
232 |
-
if (isSet($this->DATA[$htld]))
|
233 |
-
{
|
234 |
-
$handler = $this->DATA[$htld];
|
235 |
-
break;
|
236 |
-
}
|
237 |
-
|
238 |
-
// Regular handler exists for the tld ?
|
239 |
-
if (($fp = @fopen('whois.'.$htld.'.php', 'r', 1)) and fclose($fp))
|
240 |
-
{
|
241 |
-
$handler = $htld;
|
242 |
-
break;
|
243 |
-
}
|
244 |
-
}
|
245 |
-
|
246 |
-
// If there is a handler set it
|
247 |
-
|
248 |
-
if ($handler != '')
|
249 |
-
{
|
250 |
-
$this->Query['file'] = "whois.$handler.php";
|
251 |
-
$this->Query['handler'] = $handler;
|
252 |
-
}
|
253 |
-
|
254 |
-
// Special parameters ?
|
255 |
-
|
256 |
-
if (isset($this->WHOIS_PARAM[$server]))
|
257 |
-
$this->Query['server'] = $this->Query['server'].'?'.str_replace('$',$domain,$this->WHOIS_PARAM[$server]);
|
258 |
-
|
259 |
-
$result = $this->GetData('',$this->deep_whois);
|
260 |
-
$this->Checkdns($result);
|
261 |
-
return $result;
|
262 |
-
}
|
263 |
-
|
264 |
-
// If tld not known, and domain not in DNS, return error
|
265 |
-
return $this->Unknown();
|
266 |
-
}
|
267 |
-
|
268 |
-
/* Unsupported domains */
|
269 |
-
|
270 |
-
function Unknown()
|
271 |
-
{
|
272 |
-
unset($this->Query['server']);
|
273 |
-
$this->Query['status'] = 'error';
|
274 |
-
$result['rawdata'][] = $this->Query['errstr'][] = $this->Query['query'].' domain is not supported';
|
275 |
-
$this->Checkdns($result);
|
276 |
-
$this->FixResult($result, $this->Query['query']);
|
277 |
-
return $result;
|
278 |
-
}
|
279 |
-
|
280 |
-
/* Get nameservers if missing */
|
281 |
-
|
282 |
-
function Checkdns(&$result)
|
283 |
-
{
|
284 |
-
if ($this->deep_whois && empty($result['regrinfo']['domain']['nserver']) && function_exists('dns_get_record'))
|
285 |
-
{
|
286 |
-
$ns = @dns_get_record($this->Query['query'],DNS_NS);
|
287 |
-
if (!is_array($ns)) return;
|
288 |
-
$nserver = array();
|
289 |
-
foreach($ns as $row) $nserver[] = $row['target'];
|
290 |
-
if (count($nserver) > 0)
|
291 |
-
$result['regrinfo']['domain']['nserver'] = $this->FixNameServer($nserver);
|
292 |
-
}
|
293 |
-
}
|
294 |
-
/*
|
295 |
-
* Fix and/or add name server information
|
296 |
-
*/
|
297 |
-
|
298 |
-
function FixResult(&$result, $domain)
|
299 |
-
{
|
300 |
-
// Add usual fields
|
301 |
-
$result['regrinfo']['domain']['name'] = $domain;
|
302 |
-
|
303 |
-
// Check if nameservers exist
|
304 |
-
|
305 |
-
if (!isset($result['regrinfo']['registered']))
|
306 |
-
{
|
307 |
-
if (function_exists('checkdnsrr') && checkdnsrr($domain, 'NS'))
|
308 |
-
$result['regrinfo']['registered'] = 'yes';
|
309 |
-
else
|
310 |
-
$result['regrinfo']['registered'] = 'unknown';
|
311 |
-
}
|
312 |
-
|
313 |
-
// Normalize nameserver fields
|
314 |
-
|
315 |
-
if (isset($result['regrinfo']['domain']['nserver']))
|
316 |
-
{
|
317 |
-
if (!is_array($result['regrinfo']['domain']['nserver']))
|
318 |
-
{
|
319 |
-
unset($result['regrinfo']['domain']['nserver']);
|
320 |
-
}
|
321 |
-
else
|
322 |
-
$result['regrinfo']['domain']['nserver'] = $this->FixNameServer($result['regrinfo']['domain']['nserver']);
|
323 |
-
}
|
324 |
-
}
|
325 |
-
}
|
326 |
-
|
327 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.mobi.php
DELETED
@@ -1,47 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
26 |
-
*/
|
27 |
-
|
28 |
-
if (!defined('__MOBI_HANDLER__'))
|
29 |
-
define('__MOBI_HANDLER__', 1);
|
30 |
-
|
31 |
-
require_once('whois.parser.php');
|
32 |
-
|
33 |
-
class mobi_handler
|
34 |
-
{
|
35 |
-
function parse($data_str, $query)
|
36 |
-
{
|
37 |
-
$r['regrinfo'] = generic_parser_b($data_str['rawdata']);
|
38 |
-
|
39 |
-
if (!strncmp($data_str['rawdata'][0], 'WHOIS LIMIT EXCEEDED', 20))
|
40 |
-
$r['regrinfo']['registered'] = 'unknown';
|
41 |
-
|
42 |
-
$r['regyinfo']['referrer'] = 'http://www.mtld.mobi/';
|
43 |
-
$r['regyinfo']['registrar'] = 'Dot Mobi Registry';
|
44 |
-
return $r;
|
45 |
-
}
|
46 |
-
}
|
47 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.nl.php
DELETED
@@ -1,88 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
26 |
-
*/
|
27 |
-
|
28 |
-
if (!defined('__NL_HANDLER__'))
|
29 |
-
define('__NL_HANDLER__', 1);
|
30 |
-
|
31 |
-
require_once('whois.parser.php');
|
32 |
-
|
33 |
-
class nl_handler
|
34 |
-
{
|
35 |
-
function parse($data, $query)
|
36 |
-
{
|
37 |
-
$items = array(
|
38 |
-
'domain.name' => 'Domain name:',
|
39 |
-
'domain.status' => 'Status:',
|
40 |
-
'domain.nserver' => 'Domain nameservers:',
|
41 |
-
'domain.created' => 'Date registered:',
|
42 |
-
'domain.changed' => 'Record last updated:',
|
43 |
-
'domain.sponsor' => 'Registrar:',
|
44 |
-
'admin' => 'Administrative contact:',
|
45 |
-
'tech' => 'Technical contact(s):'
|
46 |
-
);
|
47 |
-
|
48 |
-
$r['regrinfo'] = get_blocks($data['rawdata'], $items);
|
49 |
-
$r['regyinfo']['referrer'] = 'http://www.domain-registry.nl';
|
50 |
-
$r['regyinfo']['registrar'] = 'Stichting Internet Domeinregistratie NL';
|
51 |
-
|
52 |
-
if (!isset($r['regrinfo']['domain']['status']))
|
53 |
-
{
|
54 |
-
$r['regrinfo']['registered'] = 'no';
|
55 |
-
return $r;
|
56 |
-
}
|
57 |
-
|
58 |
-
if (isset($r['regrinfo']['tech']))
|
59 |
-
$r['regrinfo']['tech'] = $this->get_contact($r['regrinfo']['tech']);
|
60 |
-
|
61 |
-
if (isset($r['regrinfo']['zone']))
|
62 |
-
$r['regrinfo']['zone'] = $this->get_contact($r['regrinfo']['zone']);
|
63 |
-
|
64 |
-
if (isset($r['regrinfo']['admin']))
|
65 |
-
$r['regrinfo']['admin'] = $this->get_contact($r['regrinfo']['admin']);
|
66 |
-
|
67 |
-
if (isset($r['regrinfo']['owner']))
|
68 |
-
$r['regrinfo']['owner'] = $this->get_contact($r['regrinfo']['owner']);
|
69 |
-
|
70 |
-
$r['regrinfo']['registered'] = 'yes';
|
71 |
-
format_dates($r,'dmy');
|
72 |
-
return $r;
|
73 |
-
}
|
74 |
-
|
75 |
-
function get_contact($data)
|
76 |
-
{
|
77 |
-
$r = get_contact($data);
|
78 |
-
|
79 |
-
if (isset($r['name']) && preg_match('/^[A-Z0-9]+-[A-Z0-9]+$/',$r['name']))
|
80 |
-
{
|
81 |
-
$r['handle'] = $r['name'];
|
82 |
-
$r['name'] = array_shift ($r['address']);
|
83 |
-
}
|
84 |
-
|
85 |
-
return $r;
|
86 |
-
}
|
87 |
-
}
|
88 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.nz.php
DELETED
@@ -1,102 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
26 |
-
*/
|
27 |
-
|
28 |
-
if (!defined('__NZ_HANDLER__'))
|
29 |
-
define('__NZ_HANDLER__', 1);
|
30 |
-
|
31 |
-
require_once('whois.parser.php');
|
32 |
-
|
33 |
-
class nz_handler
|
34 |
-
{
|
35 |
-
function parse($data_str, $query)
|
36 |
-
{
|
37 |
-
$items = array(
|
38 |
-
'domain_name:' => 'domain.name',
|
39 |
-
'query_status:' => 'domain.status',
|
40 |
-
'ns_name_01:' => 'domain.nserver.0',
|
41 |
-
'ns_name_02:' => 'domain.nserver.1',
|
42 |
-
'ns_name_03:' => 'domain.nserver.2',
|
43 |
-
'domain_dateregistered:' => 'domain.created',
|
44 |
-
'domain_datelastmodified:' => 'domain.changed',
|
45 |
-
'domain_datebilleduntil:' => 'domain.expires',
|
46 |
-
'registrar_name:' => 'domain.sponsor',
|
47 |
-
'registrant_contact_name:' => 'owner.name',
|
48 |
-
'registrant_contact_address1:' => 'owner.address.address.0',
|
49 |
-
'registrant_contact_address2:' => 'owner.address.address.1',
|
50 |
-
'registrant_contact_address3:' => 'owner.address.address.2',
|
51 |
-
'registrant_contact_postalcode:'=> 'owner.address.pcode',
|
52 |
-
'registrant_contact_city:' => 'owner.address.city',
|
53 |
-
'Registrant State/Province:' => 'owner.address.state',
|
54 |
-
'registrant_contact_country:' => 'owner.address.country',
|
55 |
-
'registrant_contact_phone:' => 'owner.phone',
|
56 |
-
'registrant_contact_fax:' => 'owner.fax',
|
57 |
-
'registrant_contact_email:' => 'owner.email',
|
58 |
-
'admin_contact_name:' => 'admin.name',
|
59 |
-
'admin_contact_address1:' => 'admin.address.address.0',
|
60 |
-
'admin_contact_address2:' => 'admin.address.address.1',
|
61 |
-
'admin_contact_address3:' => 'admin.address.address.2',
|
62 |
-
'admin_contact_postalcode:' => 'admin.address.pcode',
|
63 |
-
'admin_contact_city:' => 'admin.address.city',
|
64 |
-
'admin_contact_country:' => 'admin.address.country',
|
65 |
-
'admin_contact_phone:' => 'admin.phone',
|
66 |
-
'admin_contact_fax:' => 'admin.fax',
|
67 |
-
'admin_contact_email:' => 'admin.email',
|
68 |
-
'technical_contact_name:' => 'tech.name',
|
69 |
-
'technical_contact_address1:' => 'tech.address.address.0',
|
70 |
-
'technical_contact_address1:' => 'tech.address.address.1',
|
71 |
-
'technical_contact_address1:' => 'tech.address.address.2',
|
72 |
-
'technical_contact_postalcode:' => 'tech.address.pcode',
|
73 |
-
'technical_contact_city:' => 'tech.address.city',
|
74 |
-
'technical_contact_country:' => 'tech.address.country',
|
75 |
-
'technical_contact_phone:' => 'tech.phone',
|
76 |
-
'technical_contact_fax:' => 'tech.fax',
|
77 |
-
'technical_contact_email:' => 'tech.email'
|
78 |
-
);
|
79 |
-
|
80 |
-
$r['regrinfo'] = generic_parser_b($data_str['rawdata'], $items);
|
81 |
-
|
82 |
-
if (!empty($r['regrinfo']['domain']['status']))
|
83 |
-
$domain_status = substr($r['regrinfo']['domain']['status'],0,3);
|
84 |
-
else
|
85 |
-
$domain_status = '';
|
86 |
-
|
87 |
-
if ($domain_status=='200')
|
88 |
-
$r['regrinfo']['registered']='yes';
|
89 |
-
elseif ($domain_status=='220')
|
90 |
-
$r['regrinfo']['registered']='no';
|
91 |
-
else
|
92 |
-
$r['regrinfo']['registered']='unknown';
|
93 |
-
|
94 |
-
if (!strncmp($data_str['rawdata'][0], 'WHOIS LIMIT EXCEEDED', 20))
|
95 |
-
$r['regrinfo']['registered'] = 'unknown';
|
96 |
-
|
97 |
-
$r['regyinfo']['referrer'] = 'http://www.dnc.org.nz';
|
98 |
-
$r['regyinfo']['registrar'] = 'New Zealand Domain Name Registry Limited';
|
99 |
-
return $r;
|
100 |
-
}
|
101 |
-
}
|
102 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.org.php
DELETED
@@ -1,47 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
26 |
-
*/
|
27 |
-
|
28 |
-
if (!defined('__ORG_HANDLER__'))
|
29 |
-
define('__ORG_HANDLER__', 1);
|
30 |
-
|
31 |
-
require_once('whois.parser.php');
|
32 |
-
|
33 |
-
class org_handler
|
34 |
-
{
|
35 |
-
function parse($data_str, $query)
|
36 |
-
{
|
37 |
-
$r['regrinfo'] = generic_parser_b($data_str['rawdata']);
|
38 |
-
|
39 |
-
if (!strncmp($data_str['rawdata'][0], 'WHOIS LIMIT EXCEEDED', 20))
|
40 |
-
$r['regrinfo']['registered'] = 'unknown';
|
41 |
-
|
42 |
-
$r['regyinfo']['referrer'] = 'http://www.pir.org/';
|
43 |
-
$r['regyinfo']['registrar'] = 'Public Interest Registry';
|
44 |
-
return $r;
|
45 |
-
}
|
46 |
-
}
|
47 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.parser.php
DELETED
@@ -1,873 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
26 |
-
*/
|
27 |
-
|
28 |
-
//-------------------------------------------------------------------------
|
29 |
-
|
30 |
-
function generic_parser_a ($rawdata, $translate, $contacts, $main='domain', $dateformat='dmy')
|
31 |
-
{
|
32 |
-
$blocks = generic_parser_a_blocks($rawdata,$translate,$disclaimer);
|
33 |
-
|
34 |
-
if (isset($disclaimer) && is_array($disclaimer))
|
35 |
-
$ret['disclaimer']=$disclaimer;
|
36 |
-
|
37 |
-
if (empty($blocks) || !is_array($blocks['main']))
|
38 |
-
{
|
39 |
-
$ret['registered']='no';
|
40 |
-
return $ret;
|
41 |
-
}
|
42 |
-
|
43 |
-
$r = $blocks['main'];
|
44 |
-
$ret['registered'] = 'yes';
|
45 |
-
|
46 |
-
while (list($key,$val) = each($contacts))
|
47 |
-
if (isset($r[$key]))
|
48 |
-
{
|
49 |
-
if (is_array($r[$key]))
|
50 |
-
$blk = $r[$key][count($r[$key])-1];
|
51 |
-
else
|
52 |
-
$blk = $r[$key];
|
53 |
-
|
54 |
-
$blk = strtoupper(strtok($blk,' '));
|
55 |
-
if (isset($blocks[$blk])) $ret[$val] = $blocks[$blk];
|
56 |
-
unset($r[$key]);
|
57 |
-
}
|
58 |
-
|
59 |
-
if ($main) $ret[$main] = $r;
|
60 |
-
|
61 |
-
format_dates($ret,$dateformat);
|
62 |
-
return $ret;
|
63 |
-
}
|
64 |
-
|
65 |
-
//-------------------------------------------------------------------------
|
66 |
-
|
67 |
-
function generic_parser_a_blocks ($rawdata, $translate, &$disclaimer)
|
68 |
-
{
|
69 |
-
$r = array();
|
70 |
-
$newblock = false;
|
71 |
-
$hasdata = false;
|
72 |
-
$block = array();
|
73 |
-
$blocks = false;
|
74 |
-
$gkey = 'main';
|
75 |
-
$dend = false;
|
76 |
-
|
77 |
-
while (list($key,$val)=each($rawdata))
|
78 |
-
{
|
79 |
-
$val=trim($val);
|
80 |
-
|
81 |
-
if ($val != '' && ($val[0] == '%' || $val[0] == '#'))
|
82 |
-
{
|
83 |
-
if (!$dend) $disclaimer[]=trim(substr($val,1));
|
84 |
-
continue;
|
85 |
-
}
|
86 |
-
if ($val=='')
|
87 |
-
{
|
88 |
-
$newblock = true;
|
89 |
-
continue;
|
90 |
-
}
|
91 |
-
if ($newblock && $hasdata)
|
92 |
-
{
|
93 |
-
$blocks[$gkey] = $block;
|
94 |
-
$block = array();
|
95 |
-
$gkey = '';
|
96 |
-
}
|
97 |
-
$dend = true;
|
98 |
-
$newblock = false;
|
99 |
-
$k = trim(strtok($val,':'));
|
100 |
-
$v = trim(substr(strstr($val,':'),1));
|
101 |
-
|
102 |
-
if ($v == '') continue;
|
103 |
-
|
104 |
-
$hasdata = true;
|
105 |
-
|
106 |
-
if (isset($translate[$k]))
|
107 |
-
{
|
108 |
-
$k=$translate[$k];
|
109 |
-
if ($k=='') continue;
|
110 |
-
if (strstr($k,'.'))
|
111 |
-
{
|
112 |
-
eval("\$block".getvarname($k)."=\$v;");
|
113 |
-
continue;
|
114 |
-
}
|
115 |
-
}
|
116 |
-
else $k=strtolower($k);
|
117 |
-
|
118 |
-
if ($k=='handle')
|
119 |
-
{
|
120 |
-
$v = strtok($v,' ');
|
121 |
-
$gkey = strtoupper($v);
|
122 |
-
}
|
123 |
-
|
124 |
-
if (isset($block[$k]) && is_array($block[$k]))
|
125 |
-
$block[$k][]=$v;
|
126 |
-
else
|
127 |
-
if (!isset($block[$k]) || $block[$k]=='')
|
128 |
-
$block[$k]=$v;
|
129 |
-
else
|
130 |
-
{
|
131 |
-
$x=$block[$k];
|
132 |
-
unset($block[$k]);
|
133 |
-
$block[$k][]=$x;
|
134 |
-
$block[$k][]=$v;
|
135 |
-
}
|
136 |
-
}
|
137 |
-
|
138 |
-
if ($hasdata) $blocks[$gkey]=$block;
|
139 |
-
|
140 |
-
return $blocks;
|
141 |
-
}
|
142 |
-
|
143 |
-
//-------------------------------------------------------------------------
|
144 |
-
|
145 |
-
function generic_parser_b ( $rawdata, $items = false, $dateformat='mdy', $hasreg=true, $scanall=false )
|
146 |
-
{
|
147 |
-
if (!$items)
|
148 |
-
$items = array(
|
149 |
-
'Domain Name:' => 'domain.name',
|
150 |
-
'Domain ID:' => 'domain.handle',
|
151 |
-
'Sponsoring Registrar:' => 'domain.sponsor',
|
152 |
-
'Registrar ID:' => 'domain.sponsor',
|
153 |
-
'Domain Status:' => 'domain.status.',
|
154 |
-
'Status:' => 'domain.status.',
|
155 |
-
'Name Server:' => 'domain.nserver.',
|
156 |
-
'Nameservers:' => 'domain.nserver.',
|
157 |
-
'Maintainer:' => 'domain.referer',
|
158 |
-
|
159 |
-
'Domain Registration Date:' => 'domain.created',
|
160 |
-
'Domain Create Date:' => 'domain.created',
|
161 |
-
'Domain Expiration Date:' => 'domain.expires',
|
162 |
-
'Domain Last Updated Date:' => 'domain.changed',
|
163 |
-
'Creation Date:' => 'domain.created',
|
164 |
-
'Last Modification Date:' => 'domain.changed',
|
165 |
-
'Expiration Date:' => 'domain.expires',
|
166 |
-
'Created On:' => 'domain.created',
|
167 |
-
'Last Updated On:' => 'domain.changed',
|
168 |
-
'Expiration Date:' => 'domain.expires',
|
169 |
-
|
170 |
-
'Registrant ID:' => 'owner.handle',
|
171 |
-
'Registrant Name:' => 'owner.name',
|
172 |
-
'Registrant Organization:' => 'owner.organization',
|
173 |
-
'Registrant Address:' => 'owner.address.street.',
|
174 |
-
'Registrant Address1:' => 'owner.address.street.',
|
175 |
-
'Registrant Address2:' => 'owner.address.street.',
|
176 |
-
'Registrant Street:' => 'owner.address.street.',
|
177 |
-
'Registrant Street1:' => 'owner.address.street.',
|
178 |
-
'Registrant Street2:' => 'owner.address.street.',
|
179 |
-
'Registrant Street3:' => 'owner.address.street.',
|
180 |
-
'Registrant Postal Code:' => 'owner.address.pcode',
|
181 |
-
'Registrant City:' => 'owner.address.city',
|
182 |
-
'Registrant State/Province:' => 'owner.address.state',
|
183 |
-
'Registrant Country:' => 'owner.address.country',
|
184 |
-
'Registrant Country/Economy:' => 'owner.address.country',
|
185 |
-
'Registrant Phone Number:' => 'owner.phone',
|
186 |
-
'Registrant Phone:' => 'owner.phone',
|
187 |
-
'Registrant Facsimile Number:' => 'owner.fax',
|
188 |
-
'Registrant FAX:' => 'owner.fax',
|
189 |
-
'Registrant Email:' => 'owner.email',
|
190 |
-
'Registrant E-mail:' => 'owner.email',
|
191 |
-
|
192 |
-
'Administrative Contact ID:' => 'admin.handle',
|
193 |
-
'Administrative Contact Name:' => 'admin.name',
|
194 |
-
'Administrative Contact Organization:' => 'admin.organization',
|
195 |
-
'Administrative Contact Address:' => 'admin.address.street.',
|
196 |
-
'Administrative Contact Address1:' => 'admin.address.street.',
|
197 |
-
'Administrative Contact Address2:' => 'admin.address.street.',
|
198 |
-
'Administrative Contact Postal Code:' => 'admin.address.pcode',
|
199 |
-
'Administrative Contact City:' => 'admin.address.city',
|
200 |
-
'Administrative Contact State/Province:' => 'admin.address.state',
|
201 |
-
'Administrative Contact Country:' => 'admin.address.country',
|
202 |
-
'Administrative Contact Phone Number:' => 'admin.phone',
|
203 |
-
'Administrative Contact Email:' => 'admin.email',
|
204 |
-
'Administrative Contact Facsimile Number:' => 'admin.fax',
|
205 |
-
'Administrative Contact Tel:' => 'admin.phone',
|
206 |
-
'Administrative Contact Fax:' => 'admin.fax',
|
207 |
-
'Administrative ID:' => 'admin.handle',
|
208 |
-
'Administrative Name:' => 'admin.name',
|
209 |
-
'Administrative Organization:' => 'admin.organization',
|
210 |
-
'Administrative Address:' => 'admin.address.street.',
|
211 |
-
'Administrative Address1:' => 'admin.address.street.',
|
212 |
-
'Administrative Address2:' => 'admin.address.street.',
|
213 |
-
'Administrative Postal Code:' => 'admin.address.pcode',
|
214 |
-
'Administrative City:' => 'admin.address.city',
|
215 |
-
'Administrative State/Province:' => 'admin.address.state',
|
216 |
-
'Administrative Country/Economy:' => 'admin.address.country',
|
217 |
-
'Administrative Phone:' => 'admin.phone',
|
218 |
-
'Administrative E-mail:' => 'admin.email',
|
219 |
-
'Administrative Facsimile Number:' => 'admin.fax',
|
220 |
-
'Administrative Tel:' => 'admin.phone',
|
221 |
-
'Administrative FAX:' => 'admin.fax',
|
222 |
-
'Admin ID:' => 'admin.handle',
|
223 |
-
'Admin Name:' => 'admin.name',
|
224 |
-
'Admin Organization:' => 'admin.organization',
|
225 |
-
'Admin Street:' => 'admin.address.street.',
|
226 |
-
'Admin Street1:' => 'admin.address.street.',
|
227 |
-
'Admin Street2:' => 'admin.address.street.',
|
228 |
-
'Admin Street3:' => 'admin.address.street.',
|
229 |
-
'Admin Address:' => 'admin.address.street.',
|
230 |
-
'Admin Address2:' => 'admin.address.street.',
|
231 |
-
'Admin Address3:' => 'admin.address.street.',
|
232 |
-
'Admin City:' => 'admin.address.city',
|
233 |
-
'Admin State/Province:' => 'admin.address.state',
|
234 |
-
'Admin Postal Code:' => 'admin.address.pcode',
|
235 |
-
'Admin Country:' => 'admin.address.country',
|
236 |
-
'Admin Country/Economy:' => 'admin.address.country',
|
237 |
-
'Admin Phone:' => 'admin.phone',
|
238 |
-
'Admin FAX:' => 'admin.fax',
|
239 |
-
'Admin Email:' => 'admin.email',
|
240 |
-
'Admin E-mail:' => 'admin.email',
|
241 |
-
|
242 |
-
'Technical Contact ID:' => 'tech.handle',
|
243 |
-
'Technical Contact Name:' => 'tech.name',
|
244 |
-
'Technical Contact Organization:' => 'tech.organization',
|
245 |
-
'Technical Contact Address:' => 'tech.address.street.',
|
246 |
-
'Technical Contact Address1:' => 'tech.address.street.',
|
247 |
-
'Technical Contact Address2:' => 'tech.address.street.',
|
248 |
-
'Technical Contact Postal Code:' => 'tech.address.pcode',
|
249 |
-
'Technical Contact City:' => 'tech.address.city',
|
250 |
-
'Technical Contact State/Province:' => 'tech.address.state',
|
251 |
-
'Technical Contact Country:' => 'tech.address.country',
|
252 |
-
'Technical Contact Phone Number:' => 'tech.phone',
|
253 |
-
'Technical Contact Facsimile Number:' => 'tech.fax',
|
254 |
-
'Technical Contact Phone:' => 'tech.phone',
|
255 |
-
'Technical Contact Fax:' => 'tech.fax',
|
256 |
-
'Technical Contact Email:' => 'tech.email',
|
257 |
-
'Technical ID:' => 'tech.handle',
|
258 |
-
'Technical Name:' => 'tech.name',
|
259 |
-
'Technical Organization:' => 'tech.organization',
|
260 |
-
'Technical Address:' => 'tech.address.street.',
|
261 |
-
'Technical Address1:' => 'tech.address.street.',
|
262 |
-
'Technical Address2:' => 'tech.address.street.',
|
263 |
-
'Technical Postal Code:' => 'tech.address.pcode',
|
264 |
-
'Technical City:' => 'tech.address.city',
|
265 |
-
'Technical State/Province:' => 'tech.address.state',
|
266 |
-
'Technical Country/Economy:' => 'tech.address.country',
|
267 |
-
'Technical Phone Number:' => 'tech.phone',
|
268 |
-
'Technical Facsimile Number:' => 'tech.fax',
|
269 |
-
'Technical Phone:' => 'tech.phone',
|
270 |
-
'Technical Fax:' => 'tech.fax',
|
271 |
-
'Technical FAX:' => 'tech.fax',
|
272 |
-
'Technical E-mail:' => 'tech.email',
|
273 |
-
'Tech ID:' => 'tech.handle',
|
274 |
-
'Tech Name:' => 'tech.name',
|
275 |
-
'Tech Organization:' => 'tech.organization',
|
276 |
-
'Tech Address:' => 'tech.address.street.',
|
277 |
-
'Tech Address2:' => 'tech.address.street.',
|
278 |
-
'Tech Address3:' => 'tech.address.street.',
|
279 |
-
'Tech Street:' => 'tech.address.street.',
|
280 |
-
'Tech Street1:' => 'tech.address.street.',
|
281 |
-
'Tech Street2:' => 'tech.address.street.',
|
282 |
-
'Tech Street3:' => 'tech.address.street.',
|
283 |
-
'Tech City:' => 'tech.address.city',
|
284 |
-
'Tech Postal Code:' => 'tech.address.pcode',
|
285 |
-
'Tech State/Province:' => 'tech.address.state',
|
286 |
-
'Tech Country:' => 'tech.address.country',
|
287 |
-
'Tech Country/Economy:' => 'tech.address.country',
|
288 |
-
'Tech Phone:' => 'tech.phone',
|
289 |
-
'Tech FAX:' => 'tech.fax',
|
290 |
-
'Tech Email:' => 'tech.email',
|
291 |
-
'Tech E-mail:' => 'tech.email',
|
292 |
-
|
293 |
-
'Billing Contact ID:' => 'billing.handle',
|
294 |
-
'Billing Contact Name:' => 'billing.name',
|
295 |
-
'Billing Contact Organization:' => 'billing.organization',
|
296 |
-
'Billing Contact Address1:' => 'billing.address.street.',
|
297 |
-
'Billing Contact Address2:' => 'billing.address.street.',
|
298 |
-
'Billing Contact Postal Code:' => 'billing.address.pcode',
|
299 |
-
'Billing Contact City:' => 'billing.address.city',
|
300 |
-
'Billing Contact State/Province:' => 'billing.address.state',
|
301 |
-
'Billing Contact Country:' => 'billing.address.country',
|
302 |
-
'Billing Contact Phone Number:' => 'billing.phone',
|
303 |
-
'Billing Contact Facsimile Number:' => 'billing.fax',
|
304 |
-
'Billing Contact Email:' => 'billing.email',
|
305 |
-
'Billing ID:' => 'billing.handle',
|
306 |
-
'Billing Name:' => 'billing.name',
|
307 |
-
'Billing Organization:' => 'billing.organization',
|
308 |
-
'Billing Address:' => 'billing.address.street.',
|
309 |
-
'Billing Address1:' => 'billing.address.street.',
|
310 |
-
'Billing Address2:' => 'billing.address.street.',
|
311 |
-
'Billing Address3:' => 'billing.address.street.',
|
312 |
-
'Billing Street:' => 'billing.address.street.',
|
313 |
-
'Billing Street1:' => 'billing.address.street.',
|
314 |
-
'Billing Street2:' => 'billing.address.street.',
|
315 |
-
'Billing Street3:' => 'billing.address.street.',
|
316 |
-
'Billing City:' => 'billing.address.city',
|
317 |
-
'Billing Postal Code:' => 'billing.address.pcode',
|
318 |
-
'Billing State/Province:' => 'billing.address.state',
|
319 |
-
'Billing Country:' => 'billing.address.country',
|
320 |
-
'Billing Country/Economy:' => 'billing.address.country',
|
321 |
-
'Billing Phone:' => 'billing.phone',
|
322 |
-
'Billing Fax:' => 'billing.fax',
|
323 |
-
'Billing FAX:' => 'billing.fax',
|
324 |
-
'Billing Email:' => 'billing.email',
|
325 |
-
'Billing E-mail:' => 'billing.email',
|
326 |
-
|
327 |
-
'Zone ID:' => 'zone.handle',
|
328 |
-
'Zone Organization:' => 'zone.organization',
|
329 |
-
'Zone Name:' => 'zone.name',
|
330 |
-
'Zone Address:' => 'zone.address.street.',
|
331 |
-
'Zone Address 2:' => 'zone.address.street.',
|
332 |
-
'Zone City:' => 'zone.address.city',
|
333 |
-
'Zone State/Province:' => 'zone.address.state',
|
334 |
-
'Zone Postal Code:' => 'zone.address.pcode',
|
335 |
-
'Zone Country:' => 'zone.address.country',
|
336 |
-
'Zone Phone Number:' => 'zone.phone',
|
337 |
-
'Zone Fax Number:' => 'zone.fax',
|
338 |
-
'Zone Email:' => 'zone.email'
|
339 |
-
);
|
340 |
-
|
341 |
-
$r = '';
|
342 |
-
$disok = true;
|
343 |
-
|
344 |
-
while (list($key,$val) = each($rawdata))
|
345 |
-
{
|
346 |
-
if (trim($val) != '')
|
347 |
-
{
|
348 |
-
if (($val[0]=='%' || $val[0]=='#') && $disok)
|
349 |
-
{
|
350 |
-
$r['disclaimer'][] = trim(substr($val,1));
|
351 |
-
$disok = true;
|
352 |
-
continue;
|
353 |
-
}
|
354 |
-
|
355 |
-
$disok = false;
|
356 |
-
reset($items);
|
357 |
-
|
358 |
-
while (list($match, $field)=each($items))
|
359 |
-
{
|
360 |
-
$pos = strpos($val,$match);
|
361 |
-
|
362 |
-
if ($pos !== false)
|
363 |
-
{
|
364 |
-
if ($field != '')
|
365 |
-
{
|
366 |
-
$var = '$r'.getvarname($field);
|
367 |
-
$itm = trim(substr($val,$pos+strlen($match)));
|
368 |
-
|
369 |
-
if ($itm!='')
|
370 |
-
eval($var.'="'.str_replace('"','\"',$itm).'";');
|
371 |
-
}
|
372 |
-
|
373 |
-
if (!$scanall)
|
374 |
-
break;
|
375 |
-
}
|
376 |
-
}
|
377 |
-
}
|
378 |
-
}
|
379 |
-
|
380 |
-
if (empty($r))
|
381 |
-
{
|
382 |
-
if ($hasreg) $r['registered'] = 'no';
|
383 |
-
}
|
384 |
-
else
|
385 |
-
{
|
386 |
-
if ($hasreg) $r['registered'] = 'yes';
|
387 |
-
|
388 |
-
$r = format_dates($r, $dateformat);
|
389 |
-
}
|
390 |
-
|
391 |
-
return $r;
|
392 |
-
}
|
393 |
-
|
394 |
-
//-------------------------------------------------------------------------
|
395 |
-
|
396 |
-
function getvarname ( $vdef )
|
397 |
-
{
|
398 |
-
$parts = explode('.',$vdef);
|
399 |
-
$var = '';
|
400 |
-
|
401 |
-
foreach($parts as $mn)
|
402 |
-
if ($mn == '') $var = $var.'[]';
|
403 |
-
else $var = $var.'["'.$mn.'"]';
|
404 |
-
|
405 |
-
return $var;
|
406 |
-
}
|
407 |
-
|
408 |
-
//-------------------------------------------------------------------------
|
409 |
-
|
410 |
-
function get_blocks ( $rawdata, $items, $partial_match = false, $def_block = false )
|
411 |
-
{
|
412 |
-
|
413 |
-
$r = array();
|
414 |
-
$endtag = '';
|
415 |
-
|
416 |
-
while (list($key,$val) = each($rawdata))
|
417 |
-
{
|
418 |
-
$val = trim($val);
|
419 |
-
if ($val == '') continue;
|
420 |
-
|
421 |
-
$var = $found = false;
|
422 |
-
|
423 |
-
foreach ($items as $field => $match)
|
424 |
-
{
|
425 |
-
$pos = strpos($val,$match);
|
426 |
-
|
427 |
-
if ($field != '' && $pos !== false)
|
428 |
-
{
|
429 |
-
if ($val == $match)
|
430 |
-
{
|
431 |
-
$found = true;
|
432 |
-
$endtag = '';
|
433 |
-
$line = $val;
|
434 |
-
break;
|
435 |
-
}
|
436 |
-
|
437 |
-
$last = substr($val,-1,1);
|
438 |
-
|
439 |
-
if ($last == ':' || $last == '-' || $last == ']')
|
440 |
-
{
|
441 |
-
$found = true;
|
442 |
-
$endtag = $last;
|
443 |
-
$line = $val;
|
444 |
-
}
|
445 |
-
else
|
446 |
-
{
|
447 |
-
$var = getvarname(strtok($field,'#'));
|
448 |
-
$itm = trim(substr($val,$pos+strlen($match)));
|
449 |
-
eval('$r'.$var.'=$itm;');
|
450 |
-
}
|
451 |
-
|
452 |
-
break;
|
453 |
-
}
|
454 |
-
}
|
455 |
-
|
456 |
-
if (!$found)
|
457 |
-
{
|
458 |
-
if (!$var && $def_block) $r[$def_block][] = $val;
|
459 |
-
continue;
|
460 |
-
}
|
461 |
-
|
462 |
-
$block = array();
|
463 |
-
|
464 |
-
// Block found, get data ...
|
465 |
-
|
466 |
-
while (list($key,$val) = each($rawdata))
|
467 |
-
{
|
468 |
-
$val = trim($val);
|
469 |
-
|
470 |
-
if ($val == '' || $val == str_repeat($val[0],strlen($val))) continue;
|
471 |
-
|
472 |
-
$last = substr($val,-1,1);
|
473 |
-
/*
|
474 |
-
if ($last == $endtag)
|
475 |
-
{
|
476 |
-
// Another block found
|
477 |
-
prev($rawdata);
|
478 |
-
break;
|
479 |
-
}
|
480 |
-
|
481 |
-
if ($endtag == '' || $partial_match)
|
482 |
-
*/
|
483 |
-
if ($endtag == '' || $partial_match || $last == $endtag)
|
484 |
-
{
|
485 |
-
//Check if this line starts another block
|
486 |
-
$et = false;
|
487 |
-
|
488 |
-
foreach ($items as $field => $match)
|
489 |
-
{
|
490 |
-
$pos = strpos($val,$match);
|
491 |
-
|
492 |
-
if ($pos !== false && $pos == 0)
|
493 |
-
{
|
494 |
-
$et = true;
|
495 |
-
break;
|
496 |
-
}
|
497 |
-
}
|
498 |
-
|
499 |
-
if ($et)
|
500 |
-
{
|
501 |
-
// Another block found
|
502 |
-
prev($rawdata);
|
503 |
-
break;
|
504 |
-
}
|
505 |
-
}
|
506 |
-
|
507 |
-
$block[] = $val;
|
508 |
-
}
|
509 |
-
|
510 |
-
if (empty($block)) continue;
|
511 |
-
|
512 |
-
foreach ($items as $field => $match)
|
513 |
-
{
|
514 |
-
$pos = strpos($line,$match);
|
515 |
-
|
516 |
-
if ($pos !== false)
|
517 |
-
{
|
518 |
-
$var = getvarname(strtok($field,'#'));
|
519 |
-
if ($var != '[]') eval('$r'.$var.'=$block;');
|
520 |
-
}
|
521 |
-
}
|
522 |
-
}
|
523 |
-
|
524 |
-
return $r;
|
525 |
-
}
|
526 |
-
|
527 |
-
//-------------------------------------------------------------------------
|
528 |
-
|
529 |
-
function easy_parser($data_str, $items, $date_format, $translate = false ,
|
530 |
-
$has_org = false, $partial_match = false,
|
531 |
-
$def_block = false )
|
532 |
-
{
|
533 |
-
$r = get_blocks($data_str, $items, $partial_match, $def_block);
|
534 |
-
$r = get_contacts($r, $translate, $has_org);
|
535 |
-
format_dates($r, $date_format);
|
536 |
-
return $r;
|
537 |
-
}
|
538 |
-
|
539 |
-
//-------------------------------------------------------------------------
|
540 |
-
|
541 |
-
function get_contacts ( $array, $extra_items='', $has_org= false )
|
542 |
-
{
|
543 |
-
if (isset($array['billing']))
|
544 |
-
$array['billing'] = get_contact($array['billing'], $extra_items, $has_org);
|
545 |
-
|
546 |
-
if (isset($array['tech']))
|
547 |
-
$array['tech'] = get_contact($array['tech'], $extra_items, $has_org);
|
548 |
-
|
549 |
-
if (isset($array['zone']))
|
550 |
-
$array['zone'] = get_contact($array['zone'], $extra_items, $has_org);
|
551 |
-
|
552 |
-
if (isset($array['admin']))
|
553 |
-
$array['admin'] = get_contact($array['admin'], $extra_items, $has_org);
|
554 |
-
|
555 |
-
if (isset($array['owner']))
|
556 |
-
$array['owner'] = get_contact($array['owner'], $extra_items, $has_org);
|
557 |
-
|
558 |
-
if (isset($array['registrar']))
|
559 |
-
$array['registrar'] = get_contact($array['registrar'], $extra_items, $has_org);
|
560 |
-
|
561 |
-
return $array;
|
562 |
-
}
|
563 |
-
|
564 |
-
//-------------------------------------------------------------------------
|
565 |
-
|
566 |
-
function get_contact ( $array, $extra_items='', $has_org= false )
|
567 |
-
{
|
568 |
-
|
569 |
-
if (!is_array($array))
|
570 |
-
return array();
|
571 |
-
|
572 |
-
$items = array (
|
573 |
-
'fax..:' => 'fax',
|
574 |
-
'fax.' => 'fax',
|
575 |
-
'fax-no:' => 'fax',
|
576 |
-
'fax -' => 'fax',
|
577 |
-
'fax-' => 'fax',
|
578 |
-
'fax::' => 'fax',
|
579 |
-
'fax:' => 'fax',
|
580 |
-
'[fax]' => 'fax',
|
581 |
-
'(fax)' => 'fax',
|
582 |
-
'fax' => 'fax',
|
583 |
-
'tel. ' => 'phone',
|
584 |
-
'tel:' => 'phone',
|
585 |
-
'phone::' => 'phone',
|
586 |
-
'phone:' => 'phone',
|
587 |
-
'phone-' => 'phone',
|
588 |
-
'phone -' => 'phone',
|
589 |
-
'email:' => 'email',
|
590 |
-
'e-mail:' => 'email',
|
591 |
-
'company name:' => 'organization',
|
592 |
-
'organisation:' => 'organization',
|
593 |
-
'first name:' => 'name.first',
|
594 |
-
'last name:' => 'name.last',
|
595 |
-
'street:' => 'address.street',
|
596 |
-
'address:' => 'address.street.',
|
597 |
-
'language:' => '',
|
598 |
-
'location:' => 'address.city',
|
599 |
-
'country:' => 'address.country',
|
600 |
-
'name:' => 'name',
|
601 |
-
'last modified:' => 'changed'
|
602 |
-
);
|
603 |
-
|
604 |
-
if ($extra_items)
|
605 |
-
{
|
606 |
-
foreach($items as $match => $field)
|
607 |
-
if (!isset($extra_items[$match]))
|
608 |
-
$extra_items[$match] = $field;
|
609 |
-
$items = $extra_items;
|
610 |
-
}
|
611 |
-
|
612 |
-
while (list($key,$val)=each($array))
|
613 |
-
{
|
614 |
-
$ok=true;
|
615 |
-
|
616 |
-
while ($ok)
|
617 |
-
{
|
618 |
-
reset($items);
|
619 |
-
$ok = false;
|
620 |
-
|
621 |
-
while (list($match,$field) = each($items))
|
622 |
-
{
|
623 |
-
$pos = strpos(strtolower($val),$match);
|
624 |
-
|
625 |
-
if ($pos === false) continue;
|
626 |
-
|
627 |
-
$itm = trim(substr($val,$pos+strlen($match)));
|
628 |
-
|
629 |
-
if ($field != '' && $itm != '')
|
630 |
-
{
|
631 |
-
eval('$r'.getvarname($field).'=$itm;');
|
632 |
-
}
|
633 |
-
|
634 |
-
$val = trim(substr($val,0,$pos));
|
635 |
-
|
636 |
-
if ($val == '')
|
637 |
-
{
|
638 |
-
unset($array[$key]);
|
639 |
-
break;
|
640 |
-
}
|
641 |
-
else
|
642 |
-
{
|
643 |
-
$array[$key] = $val;
|
644 |
-
$ok = true;
|
645 |
-
}
|
646 |
-
//break;
|
647 |
-
}
|
648 |
-
|
649 |
-
if (preg_match("/([+]*[-\(\)\. x0-9]){7,}/", $val, $matches))
|
650 |
-
{
|
651 |
-
$phone = trim(str_replace(' ','',$matches[0]));
|
652 |
-
|
653 |
-
if (strlen($phone) > 8 && !preg_match('/[0-9]{5}\-[0-9]{3}/',$phone))
|
654 |
-
{
|
655 |
-
if (isset($r['phone']))
|
656 |
-
{
|
657 |
-
if (isset($r['fax'])) continue;
|
658 |
-
$r['fax'] = trim($matches[0]);
|
659 |
-
}
|
660 |
-
else
|
661 |
-
{
|
662 |
-
$r['phone'] = trim($matches[0]);
|
663 |
-
}
|
664 |
-
|
665 |
-
$val = str_replace($matches[0],'',$val);
|
666 |
-
|
667 |
-
if ($val == '')
|
668 |
-
{
|
669 |
-
unset($array[$key]);
|
670 |
-
continue;
|
671 |
-
}
|
672 |
-
else
|
673 |
-
{
|
674 |
-
$array[$key] = $val;
|
675 |
-
$ok = true;
|
676 |
-
}
|
677 |
-
}
|
678 |
-
}
|
679 |
-
|
680 |
-
if (preg_match('/([-0-9a-zA-Z._+&\/=]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6})/',$val, $matches))
|
681 |
-
{
|
682 |
-
$r['email'] = $matches[0];
|
683 |
-
|
684 |
-
$val = str_replace($matches[0],'',$val);
|
685 |
-
$val = trim(str_replace('()','',$val));
|
686 |
-
|
687 |
-
if ($val == '')
|
688 |
-
{
|
689 |
-
unset($array[$key]);
|
690 |
-
continue;
|
691 |
-
}
|
692 |
-
else
|
693 |
-
{
|
694 |
-
if (!isset($r['name']))
|
695 |
-
{
|
696 |
-
$r['name'] = $val;
|
697 |
-
unset($array[$key]);
|
698 |
-
}
|
699 |
-
else
|
700 |
-
$array[$key] = $val;
|
701 |
-
|
702 |
-
$ok = true;
|
703 |
-
}
|
704 |
-
}
|
705 |
-
}
|
706 |
-
}
|
707 |
-
|
708 |
-
if (!isset($r['name']) && count($array)>0)
|
709 |
-
{
|
710 |
-
$r['name'] = array_shift($array);
|
711 |
-
}
|
712 |
-
|
713 |
-
if ($has_org && count($array)>0)
|
714 |
-
{
|
715 |
-
$r['organization'] = array_shift($array);
|
716 |
-
}
|
717 |
-
|
718 |
-
if (isset($r['name']) && is_array($r['name']))
|
719 |
-
{
|
720 |
-
$r['name'] = implode($r['name'],' ');
|
721 |
-
}
|
722 |
-
|
723 |
-
if (!empty($array))
|
724 |
-
{
|
725 |
-
if (isset($r['address']))
|
726 |
-
$r['address'] = array_merge($r['address'],$array);
|
727 |
-
else
|
728 |
-
$r['address'] = $array;
|
729 |
-
}
|
730 |
-
|
731 |
-
return $r;
|
732 |
-
}
|
733 |
-
|
734 |
-
//-------------------------------------------------------------------------
|
735 |
-
|
736 |
-
function format_dates (&$res,$format='mdy')
|
737 |
-
{
|
738 |
-
if (!is_array($res)) return $res;
|
739 |
-
|
740 |
-
foreach ($res as $key => $val)
|
741 |
-
{
|
742 |
-
if (is_array($val))
|
743 |
-
{
|
744 |
-
if (!is_numeric($key) && ($key=='expires' || $key=='created' || $key=='changed'))
|
745 |
-
{
|
746 |
-
$d = get_date($val[0],$format);
|
747 |
-
if ($d) $res[$key] = $d;
|
748 |
-
}
|
749 |
-
else
|
750 |
-
{
|
751 |
-
$res[$key] = format_dates($val,$format);
|
752 |
-
}
|
753 |
-
}
|
754 |
-
else
|
755 |
-
{
|
756 |
-
if (!is_numeric($key) && ($key=='expires' || $key=='created' || $key=='changed'))
|
757 |
-
{
|
758 |
-
$d = get_date($val,$format);
|
759 |
-
if ($d) $res[$key] = $d;
|
760 |
-
}
|
761 |
-
}
|
762 |
-
}
|
763 |
-
|
764 |
-
return $res;
|
765 |
-
}
|
766 |
-
|
767 |
-
//-------------------------------------------------------------------------
|
768 |
-
|
769 |
-
function get_date($date,$format)
|
770 |
-
{
|
771 |
-
$months = array( 'jan'=>1, 'ene'=>1, 'feb'=>2, 'mar'=>3, 'apr'=>4, 'abr'=>4,
|
772 |
-
'may'=>5, 'jun'=>6, 'jul'=>7, 'aug'=>8, 'ago'=>8, 'sep'=>9,
|
773 |
-
'oct'=>10, 'nov'=>11, 'dec'=>12, 'dic'=>12 );
|
774 |
-
|
775 |
-
$parts = explode(' ',$date);
|
776 |
-
|
777 |
-
if (strpos($parts[0],'@') !== false)
|
778 |
-
{
|
779 |
-
unset($parts[0]);
|
780 |
-
$date = implode(' ',$parts);
|
781 |
-
}
|
782 |
-
|
783 |
-
$date = str_replace(',',' ',trim($date));
|
784 |
-
$date = str_replace('.',' ',$date);
|
785 |
-
$date = str_replace('-',' ',$date);
|
786 |
-
$date = str_replace('/',' ',$date);
|
787 |
-
$date = str_replace("\t",' ',$date);
|
788 |
-
|
789 |
-
$parts = explode(' ',$date);
|
790 |
-
$res = false;
|
791 |
-
|
792 |
-
if ((strlen($parts[0]) == 8 || count($parts) == 1) && is_numeric($parts[0]))
|
793 |
-
{
|
794 |
-
$val = $parts[0];
|
795 |
-
for ($p=$i=0; $i<3; $i++)
|
796 |
-
{
|
797 |
-
if ($format[$i] != 'Y')
|
798 |
-
{
|
799 |
-
$res[$format[$i]] = substr($val,$p,2);
|
800 |
-
$p += 2;
|
801 |
-
}
|
802 |
-
else
|
803 |
-
{
|
804 |
-
$res['y'] = substr($val,$p,4);
|
805 |
-
$p += 4;
|
806 |
-
}
|
807 |
-
}
|
808 |
-
}
|
809 |
-
else
|
810 |
-
{
|
811 |
-
$format = strtolower($format);
|
812 |
-
|
813 |
-
for ($p=$i=0; $p<count($parts) && $i<strlen($format); $p++)
|
814 |
-
{
|
815 |
-
if (trim($parts[$p]) == '')
|
816 |
-
continue;
|
817 |
-
|
818 |
-
if ($format[$i] != '-')
|
819 |
-
{
|
820 |
-
$res[$format[$i]] = $parts[$p];
|
821 |
-
}
|
822 |
-
$i++;
|
823 |
-
}
|
824 |
-
}
|
825 |
-
|
826 |
-
if (!$res) return $date;
|
827 |
-
|
828 |
-
$ok = false;
|
829 |
-
|
830 |
-
while (!$ok)
|
831 |
-
{
|
832 |
-
reset($res);
|
833 |
-
$ok = true;
|
834 |
-
|
835 |
-
while (list($key, $val) = each($res))
|
836 |
-
{
|
837 |
-
if ($val == '' || $key == '') continue;
|
838 |
-
|
839 |
-
if (!is_numeric($val) && isset($months[substr(strtolower($val),0,3)]))
|
840 |
-
{
|
841 |
-
$res[$key] = $res['m'];
|
842 |
-
$res['m'] = $months[substr(strtolower($val),0,3)];
|
843 |
-
$ok = false;
|
844 |
-
break;
|
845 |
-
}
|
846 |
-
|
847 |
-
if ($key != 'y' && $key != 'Y' && $val > 1900)
|
848 |
-
{
|
849 |
-
$res[$key] = $res['y'];
|
850 |
-
$res['y'] = $val;
|
851 |
-
$ok = false;
|
852 |
-
break;
|
853 |
-
}
|
854 |
-
}
|
855 |
-
}
|
856 |
-
|
857 |
-
if ($res['m'] > 12)
|
858 |
-
{
|
859 |
-
$v = $res['m'];
|
860 |
-
$res['m'] = $res['d'];
|
861 |
-
$res['d'] = $v;
|
862 |
-
}
|
863 |
-
|
864 |
-
if ($res['y'] < 70)
|
865 |
-
$res['y'] += 2000;
|
866 |
-
else
|
867 |
-
if ($res['y'] <= 99)
|
868 |
-
$res['y'] += 1900;
|
869 |
-
|
870 |
-
return sprintf("%.4d-%02d-%02d",$res['y'],$res['m'],$res['d']);
|
871 |
-
}
|
872 |
-
|
873 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.sc.php
DELETED
@@ -1,45 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
26 |
-
*/
|
27 |
-
|
28 |
-
if (!defined('__SC_HANDLER__'))
|
29 |
-
define('__SC_HANDLER__', 1);
|
30 |
-
|
31 |
-
require_once('whois.parser.php');
|
32 |
-
|
33 |
-
class sc_handler
|
34 |
-
{
|
35 |
-
function parse($data_str, $query)
|
36 |
-
{
|
37 |
-
$r['regrinfo'] = generic_parser_b($data_str['rawdata'], false, 'dmy');
|
38 |
-
$r['regyinfo'] = array(
|
39 |
-
'referrer' => 'http://www.nic.sc',
|
40 |
-
'registrar' => 'VCS (Pty) Limited'
|
41 |
-
);
|
42 |
-
return $r;
|
43 |
-
}
|
44 |
-
}
|
45 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.servers.php
DELETED
@@ -1,252 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
26 |
-
*/
|
27 |
-
|
28 |
-
/* servers.whois v18 Markus Welters 2004/06/25 */
|
29 |
-
/* servers.whois v17 ross golder 2003/02/09 */
|
30 |
-
/* servers.whois v16 mark jeftovic 2001/02/28 */
|
31 |
-
|
32 |
-
$this->DATA_VERSION = '19';
|
33 |
-
|
34 |
-
$this->DATA = array(
|
35 |
-
'bz' => 'gtld',
|
36 |
-
'com' => 'gtld',
|
37 |
-
'jobs' => 'gtld',
|
38 |
-
'li' => 'ch',
|
39 |
-
'net' => 'gtld',
|
40 |
-
'tv' => 'gtld',
|
41 |
-
'za.org' => 'zanet',
|
42 |
-
'za.net' => 'zanet'
|
43 |
-
);
|
44 |
-
|
45 |
-
/* Non UTF-8 servers */
|
46 |
-
|
47 |
-
$this->NON_UTF8 = array(
|
48 |
-
'br.whois-servers.net' => 1,
|
49 |
-
'ca.whois-servers.net' => 1,
|
50 |
-
'cl.whois-servers.net' => 1,
|
51 |
-
'hu.whois-servers.net' => 1,
|
52 |
-
'is.whois-servers.net' => 1,
|
53 |
-
'pt.whois-servers.net' => 1,
|
54 |
-
'whois.interdomain.net' => 1,
|
55 |
-
'whois.lacnic.net' => 1,
|
56 |
-
'whois.nicline.com' => 1,
|
57 |
-
'whois.ripe.net' => 1
|
58 |
-
);
|
59 |
-
|
60 |
-
/* If whois Server needs any parameters, enter it here */
|
61 |
-
|
62 |
-
$this->WHOIS_PARAM = array(
|
63 |
-
'com.whois-servers.net' => 'domain =$',
|
64 |
-
'net.whois-servers.net' => 'domain =$',
|
65 |
-
'de.whois-servers.net' => '-T dn,ace $',
|
66 |
-
'jp.whois-servers.net' => 'DOM $/e'
|
67 |
-
);
|
68 |
-
|
69 |
-
/* TLD's that have special whois servers or that can only be reached via HTTP */
|
70 |
-
|
71 |
-
$this->WHOIS_SPECIAL = array(
|
72 |
-
'ad' => '',
|
73 |
-
'ae' => 'whois.aeda.net.ae',
|
74 |
-
'af' => 'whois.nic.af',
|
75 |
-
'ai' => 'http://whois.offshore.ai/cgi-bin/whois.pl?domain-name={domain}.ai',
|
76 |
-
'al' => '',
|
77 |
-
'az' => '',
|
78 |
-
'ba' => '',
|
79 |
-
'bb' => 'http://domains.org.bb/regsearch/getdetails.cfm?DND={domain}.bb',
|
80 |
-
'bg' => 'http://www.register.bg/bg-nic/displaydomain.pl?domain={domain}.bg&search=exist',
|
81 |
-
'bi' => 'whois.nic.bi',
|
82 |
-
'bj' => 'whois.nic.bj',
|
83 |
-
'by' => '',
|
84 |
-
'bz' => 'whois2.afilias-grs.net',
|
85 |
-
'cy' => '',
|
86 |
-
'es' => '',
|
87 |
-
'fj' => 'whois.usp.ac.fj',
|
88 |
-
'fm' => 'http://www.dot.fm/query_whois.cfm?domain={domain}&tld=fm',
|
89 |
-
'jobs' => 'jobswhois.verisign-grs.com',
|
90 |
-
'ke' => 'kenic.or.ke',
|
91 |
-
'la' => 'whois.centralnic.net',
|
92 |
-
'gr' => '',
|
93 |
-
'gs' => 'http://www.adamsnames.tc/whois/?domain={domain}.gs',
|
94 |
-
'gt' => 'http://www.gt/Inscripcion/whois.php?domain={domain}.gt',
|
95 |
-
'me' => 'whois.meregistry.net',
|
96 |
-
'mobi' => 'whois.dotmobiregistry.net',
|
97 |
-
'ms' => 'http://www.adamsnames.tc/whois/?domain={domain}.ms',
|
98 |
-
'mt' => 'http://www.um.edu.mt/cgi-bin/nic/whois?domain={domain}.mt',
|
99 |
-
'nl' => 'whois.domain-registry.nl',
|
100 |
-
'ly' => 'whois.nic.ly',
|
101 |
-
'pe' => 'kero.rcp.net.pe',
|
102 |
-
'pr' => 'whois.uprr.pr',
|
103 |
-
'pro' => 'whois.registry.pro',
|
104 |
-
'sc' => 'whois2.afilias-grs.net',
|
105 |
-
'tc' => 'http://www.adamsnames.tc/whois/?domain={domain}.tc',
|
106 |
-
'tf' => 'http://www.adamsnames.tc/whois/?domain={domain}.tf',
|
107 |
-
've' => 'whois.nic.ve',
|
108 |
-
'vg' => 'http://www.adamsnames.tc/whois/?domain={domain}.vg',
|
109 |
-
// Second level
|
110 |
-
'net.au' => 'whois.aunic.net',
|
111 |
-
'ae.com' => 'whois.centralnic.net',
|
112 |
-
'br.com' => 'whois.centralnic.net',
|
113 |
-
'cn.com' => 'whois.centralnic.net',
|
114 |
-
'de.com' => 'whois.centralnic.net',
|
115 |
-
'eu.com' => 'whois.centralnic.net',
|
116 |
-
'hu.com' => 'whois.centralnic.net',
|
117 |
-
'jpn.com'=> 'whois.centralnic.net',
|
118 |
-
'kr.com' => 'whois.centralnic.net',
|
119 |
-
'gb.com' => 'whois.centralnic.net',
|
120 |
-
'no.com' => 'whois.centralnic.net',
|
121 |
-
'qc.com' => 'whois.centralnic.net',
|
122 |
-
'ru.com' => 'whois.centralnic.net',
|
123 |
-
'sa.com' => 'whois.centralnic.net',
|
124 |
-
'se.com' => 'whois.centralnic.net',
|
125 |
-
'za.com' => 'whois.centralnic.net',
|
126 |
-
'uk.com' => 'whois.centralnic.net',
|
127 |
-
'us.com' => 'whois.centralnic.net',
|
128 |
-
'uy.com' => 'whois.centralnic.net',
|
129 |
-
'gb.net' => 'whois.centralnic.net',
|
130 |
-
'se.net' => 'whois.centralnic.net',
|
131 |
-
'uk.net' => 'whois.centralnic.net',
|
132 |
-
'za.net' => 'whois.za.net',
|
133 |
-
'za.org' => 'whois.za.net',
|
134 |
-
'co.za' => 'http://co.za/cgi-bin/whois.sh?Domain={domain}.co.za',
|
135 |
-
'org.za' => 'http://www.org.za/cgi-bin/rwhois?domain={domain}.org.za&format=full'
|
136 |
-
);
|
137 |
-
|
138 |
-
/* handled gTLD whois servers */
|
139 |
-
|
140 |
-
$this->WHOIS_GTLD_HANDLER = array(
|
141 |
-
'whois.bulkregister.com' => 'enom',
|
142 |
-
'whois.dotregistrar.com' => 'dotster',
|
143 |
-
'whois.namesdirect.com' => 'dotster',
|
144 |
-
'whois.psi-usa.info' => 'psiusa',
|
145 |
-
'whois.www.tv' => 'tvcorp',
|
146 |
-
'whois.tucows.com' => 'opensrs',
|
147 |
-
'whois.35.com' => 'onlinenic',
|
148 |
-
'whois.nominalia.com' => 'genericb',
|
149 |
-
'whois.encirca.com' => 'genericb',
|
150 |
-
'whois.corenic.net' => 'genericb'
|
151 |
-
);
|
152 |
-
|
153 |
-
/* Non ICANN TLD's */
|
154 |
-
|
155 |
-
$this->WHOIS_NON_ICANN = array (
|
156 |
-
'agent' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
157 |
-
'agente' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
158 |
-
'america' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}',
|
159 |
-
'amor' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
160 |
-
'amore' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
161 |
-
'amour' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
162 |
-
'arte' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
163 |
-
'artes' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
164 |
-
'arts' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
165 |
-
'asta' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
166 |
-
'auction' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
167 |
-
'auktion' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
168 |
-
'boutique' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
169 |
-
'chat' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
170 |
-
'chiesa' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
171 |
-
'church' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
172 |
-
'cia' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
173 |
-
'ciao' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
174 |
-
'cie' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
175 |
-
'club' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
176 |
-
'clube' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
177 |
-
'com2' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}',
|
178 |
-
'deporte' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
179 |
-
'ditta' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
180 |
-
'earth' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}',
|
181 |
-
'eglise' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
182 |
-
'enchere' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
183 |
-
'escola' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
184 |
-
'escuela' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
185 |
-
'esporte' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
186 |
-
'etc' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}',
|
187 |
-
'famiglia' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
188 |
-
'familia' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
189 |
-
'familie' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
190 |
-
'family' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
191 |
-
'free' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
192 |
-
'hola' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
193 |
-
'game' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
194 |
-
'ges' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
195 |
-
'gmbh' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
196 |
-
'golf' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
197 |
-
'gratis' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
198 |
-
'gratuit' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
199 |
-
'iglesia' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
200 |
-
'igreja' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
201 |
-
'inc' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
202 |
-
'jeu' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
203 |
-
'jogo' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
204 |
-
'juego' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
205 |
-
'kids' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
206 |
-
'kirche' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
207 |
-
'krunst' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
208 |
-
'law' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
209 |
-
'legge' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
210 |
-
'lei' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
211 |
-
'leilao' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
212 |
-
'ley' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
213 |
-
'liebe' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
214 |
-
'lion' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}',
|
215 |
-
'llc' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
216 |
-
'llp' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
217 |
-
'loi' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
218 |
-
'loja' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
219 |
-
'love' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
220 |
-
'ltd' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
221 |
-
'makler' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
222 |
-
'med' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
223 |
-
'mp3' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
224 |
-
'not' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}',
|
225 |
-
'online' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}',
|
226 |
-
'recht' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
227 |
-
'reise' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
228 |
-
'resto' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
229 |
-
'school' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
230 |
-
'schule' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
231 |
-
'scifi' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
232 |
-
'scuola' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
233 |
-
'shop' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
234 |
-
'soc' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
235 |
-
'spiel' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
236 |
-
'sport' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
237 |
-
'subasta' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
238 |
-
'tec' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
239 |
-
'tech' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
240 |
-
'tienda' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
241 |
-
'travel' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
242 |
-
'turismo' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
243 |
-
'usa' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}',
|
244 |
-
'verein' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
245 |
-
'viaje' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
246 |
-
'viagem' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
247 |
-
'video' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
248 |
-
'voyage' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
249 |
-
'xxx' => 'http://www.new.net/search_whois.tp?domain={domain}&tld={tld}',
|
250 |
-
'z' => 'http://www.adns.net/whois.php?txtDOMAIN={domain}.{tld}'
|
251 |
-
);
|
252 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.si.php
DELETED
@@ -1,55 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
26 |
-
*/
|
27 |
-
|
28 |
-
if (!defined('__SI_HANDLER__'))
|
29 |
-
define('__SI_HANDLER__', 1);
|
30 |
-
|
31 |
-
require_once('whois.parser.php');
|
32 |
-
|
33 |
-
class si_handler
|
34 |
-
{
|
35 |
-
function parse($data_str, $query)
|
36 |
-
{
|
37 |
-
$translate = array(
|
38 |
-
'nic-hdl' => 'handle',
|
39 |
-
'nameserver' => 'nserver'
|
40 |
-
);
|
41 |
-
|
42 |
-
$contacts = array(
|
43 |
-
'registrant' => 'owner',
|
44 |
-
'tech-c' => 'tech'
|
45 |
-
);
|
46 |
-
|
47 |
-
$r['regrinfo'] = generic_parser_a($data_str['rawdata'], $translate, $contacts, 'domain', 'Ymd');
|
48 |
-
$r['regyinfo'] = array(
|
49 |
-
'referrer' => 'http://www.arnes.si',
|
50 |
-
'registrar' => 'ARNES'
|
51 |
-
);
|
52 |
-
return $r;
|
53 |
-
}
|
54 |
-
}
|
55 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.utils.php
DELETED
@@ -1,152 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
26 |
-
*/
|
27 |
-
|
28 |
-
class utils extends Whois {
|
29 |
-
|
30 |
-
// showObject() and debugObject()
|
31 |
-
// - debug code to show an object or array
|
32 |
-
|
33 |
-
function showObject(&$obj)
|
34 |
-
{
|
35 |
-
$r = $this->debugObject($obj);
|
36 |
-
return "<pre>$r</pre>\n";
|
37 |
-
}
|
38 |
-
|
39 |
-
function debugObject($obj,$indent=0)
|
40 |
-
{
|
41 |
-
if (is_Array($obj))
|
42 |
-
{
|
43 |
-
$return = '';
|
44 |
-
foreach($obj as $k => $v)
|
45 |
-
{
|
46 |
-
$return .= str_repeat(' ',$indent);
|
47 |
-
$return .= $k."->$v\n";
|
48 |
-
$return .= $this->debugObject($v,$indent+1);
|
49 |
-
}
|
50 |
-
return $return;
|
51 |
-
}
|
52 |
-
}
|
53 |
-
|
54 |
-
function ns_rr_defined($query) {
|
55 |
-
return checkdnsrr($query,'NS');
|
56 |
-
}
|
57 |
-
|
58 |
-
// get nice HTML output
|
59 |
-
|
60 |
-
function showHTML($result, $link_myself=true, $params='query=$0&output=nice') {
|
61 |
-
|
62 |
-
// adds links fort HTML output
|
63 |
-
|
64 |
-
$email_regex = "/([-_\w\.]+)(@)([-_\w\.]+)\b/i";
|
65 |
-
$html_regex = "/(?:^|\b)((((http|https|ftp):\/\/)|(www\.))([\w\.]+)([,:%#&\/?~=\w+\.-]+))(?:\b|$)/is";
|
66 |
-
$ip_regex = "/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/i";
|
67 |
-
|
68 |
-
$out = '';
|
69 |
-
$lempty = true;
|
70 |
-
|
71 |
-
foreach($result['rawdata'] as $line)
|
72 |
-
{
|
73 |
-
$line = trim($line);
|
74 |
-
|
75 |
-
if ($line == '')
|
76 |
-
{
|
77 |
-
if ($lempty) continue;
|
78 |
-
else $lempty = true;
|
79 |
-
}
|
80 |
-
else
|
81 |
-
$lempty = false;
|
82 |
-
|
83 |
-
$out .= $line."\n";
|
84 |
-
}
|
85 |
-
|
86 |
-
if ($lempty) $out = trim($out);
|
87 |
-
|
88 |
-
$out = strip_tags($out);
|
89 |
-
$out = preg_replace ($email_regex, '<a href="mailto:$0">$0</a>', $out);
|
90 |
-
$out = preg_replace_callback ($html_regex, 'href_replace', $out);
|
91 |
-
|
92 |
-
if ($link_myself)
|
93 |
-
{
|
94 |
-
if ($params[0] == '/')
|
95 |
-
$link = $params;
|
96 |
-
else
|
97 |
-
$link = $_SERVER['PHP_SELF'].'?'.$params;
|
98 |
-
|
99 |
-
$out = preg_replace ($ip_regex, '<a href="'.$link.'">$0</a>', $out);
|
100 |
-
|
101 |
-
if (isset($result['regrinfo']['domain']['nserver']))
|
102 |
-
{
|
103 |
-
$nserver = $result['regrinfo']['domain']['nserver'];
|
104 |
-
}
|
105 |
-
else
|
106 |
-
$nserver = false;
|
107 |
-
|
108 |
-
if (isset($result['regrinfo']['network']['nserver']))
|
109 |
-
{
|
110 |
-
$nserver = $result['regrinfo']['network']['nserver'];
|
111 |
-
}
|
112 |
-
|
113 |
-
if (is_array($nserver))
|
114 |
-
{
|
115 |
-
reset($nserver);
|
116 |
-
while (list($host, $ip) = each($nserver))
|
117 |
-
{
|
118 |
-
$url = '<a href="'. str_replace('$0',$ip,$link)."\">$host</a>";
|
119 |
-
$out = str_replace($host, $url, $out);
|
120 |
-
$out = str_replace(strtoupper($host), $url, $out);
|
121 |
-
}
|
122 |
-
}
|
123 |
-
}
|
124 |
-
|
125 |
-
// Add bold field names
|
126 |
-
|
127 |
-
$out = preg_replace ("/(?m)^([-\s\.&;'\w\t\(\)\/]+:\s*)/", '<b>$1</b>', $out);
|
128 |
-
|
129 |
-
// Add italics for disclaimer
|
130 |
-
|
131 |
-
$out = preg_replace ("/(?m)^(%.*)/", '<i>$0</i>', $out);
|
132 |
-
|
133 |
-
return str_replace("\n","<br/>\n",$out);
|
134 |
-
}
|
135 |
-
}
|
136 |
-
|
137 |
-
function href_replace($matches)
|
138 |
-
{
|
139 |
-
if (substr($matches[0],0,4)=='www.')
|
140 |
-
{
|
141 |
-
$web=$matches[0];
|
142 |
-
$url='http://'.$web;
|
143 |
-
}
|
144 |
-
else
|
145 |
-
{
|
146 |
-
$web=$matches[0];
|
147 |
-
$url=$web;
|
148 |
-
}
|
149 |
-
|
150 |
-
return '<a href="'.$url.'" target="_blank">'.$web.'</a>';
|
151 |
-
}
|
152 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/lib/whois/whois.ve.php
DELETED
@@ -1,75 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Whois.php PHP classes to conduct whois queries
|
4 |
-
|
5 |
-
Copyright (C)1999,2005 easyDNS Technologies Inc. & Mark Jeftovic
|
6 |
-
|
7 |
-
Maintained by David Saez
|
8 |
-
|
9 |
-
For the most recent version of this package visit:
|
10 |
-
|
11 |
-
http://www.phpwhois.org
|
12 |
-
|
13 |
-
This program is free software; you can redistribute it and/or
|
14 |
-
modify it under the terms of the GNU General Public License
|
15 |
-
as published by the Free Software Foundation; either version 2
|
16 |
-
of the License, or (at your option) any later version.
|
17 |
-
|
18 |
-
This program is distributed in the hope that it will be useful,
|
19 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
20 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
21 |
-
GNU General Public License for more details.
|
22 |
-
|
23 |
-
You should have received a copy of the GNU General Public License
|
24 |
-
along with this program; if not, write to the Free Software
|
25 |
-
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
26 |
-
USA.
|
27 |
-
*/
|
28 |
-
|
29 |
-
if (!defined('__VE_HANDLER__'))
|
30 |
-
define('__VE_HANDLER__', 1);
|
31 |
-
|
32 |
-
require_once('whois.parser.php');
|
33 |
-
|
34 |
-
class ve_handler
|
35 |
-
{
|
36 |
-
function parse($data_str, $query)
|
37 |
-
{
|
38 |
-
$items = array(
|
39 |
-
'owner' => 'Titular:',
|
40 |
-
'domain.name' => 'Nombre de Dominio:',
|
41 |
-
'admin' => 'Contacto Administrativo',
|
42 |
-
'tech' => 'Contacto Tecnico',
|
43 |
-
'billing' => 'Contacto de Cobranza:',
|
44 |
-
'domain.created' => 'Fecha de Creacion:',
|
45 |
-
'domain.changed' => 'Ultima Actualizacion:',
|
46 |
-
'domain.expires' => 'Fecha de Vencimiento:',
|
47 |
-
'domain.status' => 'Estatus del dominio:',
|
48 |
-
'domain.nserver' => 'Servidor(es) de Nombres de Dominio'
|
49 |
-
);
|
50 |
-
|
51 |
-
$r['regrinfo'] = get_blocks($data_str['rawdata'], $items);
|
52 |
-
|
53 |
-
if (!isset($r['regrinfo']['domain']['created']) || is_array($r['regrinfo']['domain']['created']))
|
54 |
-
{
|
55 |
-
$r['regrinfo'] = array ( 'registered' => 'no');
|
56 |
-
return $r;
|
57 |
-
}
|
58 |
-
|
59 |
-
$dns = array();
|
60 |
-
|
61 |
-
foreach($r['regrinfo']['domain']['nserver'] as $nserv)
|
62 |
-
{
|
63 |
-
if ($nserv[0] == '-') $dns[] = $nserv;
|
64 |
-
}
|
65 |
-
|
66 |
-
$r['regrinfo']['domain']['nserver'] = $dns;
|
67 |
-
$r['regrinfo'] = get_contacts($r['regrinfo']);
|
68 |
-
$r['regyinfo'] = array(
|
69 |
-
'referrer' => 'http://registro.nic.ve',
|
70 |
-
'registrar' => 'NIC-Venezuela - CNTI'
|
71 |
-
);
|
72 |
-
return $r;
|
73 |
-
}
|
74 |
-
}
|
75 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/readme.txt
DELETED
@@ -1,109 +0,0 @@
|
|
1 |
-
=== All In One WP Security & Firewall ===
|
2 |
-
Contributors: Tips and Tricks HQ, wpsolutions, Peter Petreski, Ruhul Amin
|
3 |
-
Donate link: http://www.tipsandtricks-hq.com/wordpress-security-and-firewall-plugin
|
4 |
-
Tags: security, Anti Virus, antivirus, virus, firewall, secure, login, lockdown, htaccess, hacking, malware, vulnerability, protect, phishing, database, backup, plugin
|
5 |
-
Requires at least: 3.5
|
6 |
-
Tested up to: 3.6
|
7 |
-
Stable tag: 1.0
|
8 |
-
License: GPLv3
|
9 |
-
|
10 |
-
A comprehensive, user-friendly, all in one security and firewall plugin for your WordPress site.
|
11 |
-
|
12 |
-
== Description ==
|
13 |
-
= A COMPREHENSIVE, EASY TO USE AND WELL SUPPORTED WORDPRESS SECURITY PLUGIN =
|
14 |
-
|
15 |
-
WordPress itself is a very secure platform. However, it helps to add some extra security and firewall to your site by using a security plugin that enforces a lot of good security practices.
|
16 |
-
|
17 |
-
The All In One WP Security plugin will take your website security to a whole new level.
|
18 |
-
|
19 |
-
This plugin is designed and written by experts and is easy to use and understand.
|
20 |
-
|
21 |
-
It offers the latest recommended WordPress security practices and techniques.
|
22 |
-
|
23 |
-
All In One WP Security also uses an unprecedented security points grading system to measure how well you are protecting your site based on the security features you have activated.
|
24 |
-
|
25 |
-
Below is a list of the security and firewall features offered in this plugin:
|
26 |
-
|
27 |
-
= .htaccess and wp-config.php settings =
|
28 |
-
* Easily backup your original .htaccess and wp-config.php files in case you will need to use them to restore broken functionality.
|
29 |
-
* Modify the contents of the currently active .htaccess or wp-config.php from the admin dashboard with only a few clicks
|
30 |
-
|
31 |
-
= User Accounts Security =
|
32 |
-
* Detect if there is a user account which has the default "admin" username and easily change the username to a value of your choice.
|
33 |
-
* The plugin will also detect if you have any WordPress user accounts which have identical login and display names. Having account's where display name is identical to login name is bad security practice because
|
34 |
-
you are making it 50% easier for hackers because they already know the login name.
|
35 |
-
|
36 |
-
= User Login Security =
|
37 |
-
* Protect against "Brute Force Login Attack" with the Login Lockdown feature. Users with a certain IP address or range will be locked out of the system for a predetermined amount of time based on the configuration settings and you can also choose to be notified
|
38 |
-
via email whenever somebody gets locked out due to too many login attempts.
|
39 |
-
|
40 |
-
* As the administrator you can view a list of all locked out users which are displayed in an easily readable and navigable table which also allows you to unlock individual or bulk IP addresses at the click of a button.
|
41 |
-
|
42 |
-
* Force logout of all users after a configurable time period
|
43 |
-
|
44 |
-
* Monitor/View failed login attempts which show the user's IP address, User ID/Username and Date/Time of the failed login attempt
|
45 |
-
* Monitor/View the account activity of all user accounts on your system by keeping track of the username, IP address, login date/time, and logout date/time.
|
46 |
-
|
47 |
-
= Database Security =
|
48 |
-
* Easily the default WP prefix to a value of your choice with the click of a button.
|
49 |
-
|
50 |
-
* Schedule automatic backups and email notifications or make an instant DB backup whenever you want with one click.
|
51 |
-
|
52 |
-
= File System Security =
|
53 |
-
* Identify files or folders which have permission settings which are not secure and set the permissions to the recommend secure values with click of a button.
|
54 |
-
* Protect your PHP code by disabling file editing from the WordPress administration area.
|
55 |
-
* Easily view and monitor all host system logs from a single menu page and stay informed of any issues or problems occurring on your server so you can address them quickly.
|
56 |
-
|
57 |
-
= WhoIs Lookup =
|
58 |
-
* Perform a WhoIs lookup of a suspicious host or IP address.
|
59 |
-
|
60 |
-
= Blacklist Functionality =
|
61 |
-
* Ban users by specifying IP addresses or use a wild card to specify IP ranges.
|
62 |
-
* Ban users by specifying user agents.
|
63 |
-
* Monitor the most active IP addresses which persistently produce the most SPAM comments and instantly block them with the click of a button.
|
64 |
-
|
65 |
-
= Firewall Functionality =
|
66 |
-
* Instantly activate a selection of firewall settings ranging from basic, intermediate and advanced.
|
67 |
-
* Enable the famous "5G Blacklist" Firewall rules courtesy of [Perishable Press](http://perishablepress.com/)
|
68 |
-
* Forbid proxy comment posting
|
69 |
-
* Disable trace and track
|
70 |
-
* Deny bad or malicious query strings
|
71 |
-
* Protect against Cross Site Scripting (XSS) by activating the comprehensive advanced character string filter.
|
72 |
-
|
73 |
-
= Other Benefits =
|
74 |
-
= Regular updates and additions of new security features =
|
75 |
-
* WordPress Security is something that evolves over time. We will be updating the All In One WP Security plugin with new security features (and fixes if required) on a regular basis so you can rest assured that your site will be on the cutting edge of security protection techniques.
|
76 |
-
* It should work smoothly with most popular WordPress plugins.
|
77 |
-
* Our firewall rules are categorized into "basic", "intermediate" and "advanced". This way you can apply the firewall rules progressively without breaking your site's functionality.
|
78 |
-
|
79 |
-
= Plugin Support =
|
80 |
-
* If you have a question or problem with the All In One Security plugin, post it on the support forum and we will help you.
|
81 |
-
|
82 |
-
= Translations =
|
83 |
-
* All In One WP Security plugin can be translated to any language.
|
84 |
-
|
85 |
-
== Installation ==
|
86 |
-
|
87 |
-
To begin making your WordPress site more secure:
|
88 |
-
|
89 |
-
1. Upload the 'all-in-one-wp-security.zip' file from the Plugins->Add New page in the WordPress administration panel.
|
90 |
-
2. Activate the plugin through the 'Plugins' menu in WordPress
|
91 |
-
3. Go to Settings menu under 'WP Security' and use the configuration wizard or start configuring the plugin yourself.
|
92 |
-
|
93 |
-
== Usage ==
|
94 |
-
|
95 |
-
Go to the settings menu after you activate the plugin and follow the instructions.
|
96 |
-
|
97 |
-
== Screenshots ==
|
98 |
-
None
|
99 |
-
|
100 |
-
== Frequently Asked Questions ==
|
101 |
-
None
|
102 |
-
|
103 |
-
== Upgrade Notice ==
|
104 |
-
None
|
105 |
-
|
106 |
-
== Changelog ==
|
107 |
-
|
108 |
-
= 1.0 =
|
109 |
-
- First commit to the WP repository.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/wp-security-core.php
DELETED
@@ -1,204 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
if (!class_exists('AIO_WP_Security')){
|
4 |
-
|
5 |
-
class AIO_WP_Security{
|
6 |
-
var $version = '1.0';
|
7 |
-
var $db_version = '1.2';
|
8 |
-
var $plugin_url;
|
9 |
-
var $plugin_path;
|
10 |
-
var $configs;
|
11 |
-
var $admin_init;
|
12 |
-
var $debug_logger;
|
13 |
-
var $cron_handler;
|
14 |
-
var $user_login_obj;
|
15 |
-
var $backup_obj;
|
16 |
-
|
17 |
-
function __construct()
|
18 |
-
{
|
19 |
-
$this->load_configs();
|
20 |
-
$this->define_constants();
|
21 |
-
$this->includes();
|
22 |
-
$this->loader_operations();
|
23 |
-
|
24 |
-
add_action('init', array(&$this, 'wp_security_plugin_init'), 0);
|
25 |
-
do_action('aiowpsecurity_loaded');
|
26 |
-
}
|
27 |
-
|
28 |
-
function plugin_url()
|
29 |
-
{
|
30 |
-
if ($this->plugin_url) return $this->plugin_url;
|
31 |
-
return $this->plugin_url = plugins_url( basename( plugin_dir_path(__FILE__) ), basename( __FILE__ ) );
|
32 |
-
}
|
33 |
-
|
34 |
-
function plugin_path()
|
35 |
-
{
|
36 |
-
if ($this->plugin_path) return $this->plugin_path;
|
37 |
-
return $this->plugin_path = untrailingslashit( plugin_dir_path( __FILE__ ) );
|
38 |
-
}
|
39 |
-
|
40 |
-
function load_configs()
|
41 |
-
{
|
42 |
-
include_once('classes/wp-security-config.php');
|
43 |
-
$this->configs = AIOWPSecurity_Config::get_instance();
|
44 |
-
}
|
45 |
-
|
46 |
-
function define_constants()
|
47 |
-
{
|
48 |
-
define('AIO_WP_SECURITY_VERSION', $this->version);
|
49 |
-
define('AIO_WP_SECURITY_DB_VERSION', $this->db_version);
|
50 |
-
define('AIOWPSEC_WP_URL', site_url());
|
51 |
-
define('AIO_WP_SECURITY_URL', $this->plugin_url());
|
52 |
-
define('AIO_WP_SECURITY_PATH', $this->plugin_path());
|
53 |
-
define('AIO_WP_SECURITY_BACKUPS_PATH', AIO_WP_SECURITY_PATH.'/backups');
|
54 |
-
define('AIO_WP_SECURITY_LIB_PATH', AIO_WP_SECURITY_PATH.'/lib');
|
55 |
-
define('AIOWPSEC_MANAGEMENT_PERMISSION', 'add_users');
|
56 |
-
define('AIOWPSEC_MENU_SLUG_PREFIX', 'aiowpsec');
|
57 |
-
define('AIOWPSEC_MAIN_MENU_SLUG', 'aiowpsec');
|
58 |
-
define('AIOWPSEC_SETTINGS_MENU_SLUG', 'aiowpsec_settings');
|
59 |
-
define('AIOWPSEC_USER_ACCOUNTS_MENU_SLUG', 'aiowpsec_useracc');
|
60 |
-
define('AIOWPSEC_USER_LOGIN_MENU_SLUG', 'aiowpsec_userlogin');
|
61 |
-
define('AIOWPSEC_DB_SEC_MENU_SLUG', 'aiowpsec_database');
|
62 |
-
define('AIOWPSEC_FILESYSTEM_MENU_SLUG', 'aiowpsec_filesystem');
|
63 |
-
define('AIOWPSEC_WHOIS_MENU_SLUG', 'aiowpsec_whois');
|
64 |
-
define('AIOWPSEC_BLACKLIST_MENU_SLUG', 'aiowpsec_blacklist');
|
65 |
-
define('AIOWPSEC_FIREWALL_MENU_SLUG', 'aiowpsec_firewall');
|
66 |
-
|
67 |
-
global $wpdb;
|
68 |
-
define('AIOWPSEC_TBL_LOGIN_LOCKDOWN', $wpdb->prefix . 'aiowps_login_lockdown');
|
69 |
-
define('AIOWPSEC_TBL_FAILED_LOGINS', $wpdb->prefix . 'aiowps_failed_logins');
|
70 |
-
define('AIOWPSEC_TBL_USER_LOGIN_ACTIVITY', $wpdb->prefix . 'aiowps_login_activity');
|
71 |
-
|
72 |
-
}
|
73 |
-
|
74 |
-
function includes()
|
75 |
-
{
|
76 |
-
//Load common files for everywhere
|
77 |
-
include_once('classes/wp-security-debug-logger.php');
|
78 |
-
include_once('classes/wp-security-utility.php');
|
79 |
-
include_once('classes/wp-security-utility-htaccess.php');
|
80 |
-
include_once('classes/wp-security-utility-ip-address.php');
|
81 |
-
include_once('classes/wp-security-utility-file.php');
|
82 |
-
|
83 |
-
include_once('classes/wp-security-user-login.php');
|
84 |
-
include_once('classes/wp-security-backup.php');
|
85 |
-
include_once('classes/wp-security-cronjob-handler.php');
|
86 |
-
include_once('classes/grade-system/wp-security-feature-item.php');
|
87 |
-
include_once('classes/grade-system/wp-security-feature-item-manager.php');
|
88 |
-
|
89 |
-
if (is_admin()){ //Load admin side only files
|
90 |
-
include_once('classes/wp-security-configure-settings.php');
|
91 |
-
include_once('admin/wp-security-admin-init.php');
|
92 |
-
include_once('admin/general/wp-security-list-table.php');
|
93 |
-
|
94 |
-
}
|
95 |
-
else{ //Load front end side only files
|
96 |
-
}
|
97 |
-
}
|
98 |
-
|
99 |
-
function loader_operations()
|
100 |
-
{
|
101 |
-
add_action('plugins_loaded',array(&$this, 'plugins_loaded_handler'));//plugins loaded hook
|
102 |
-
$this->debug_logger = new AIOWPSecurity_Logger();
|
103 |
-
if(is_admin()){
|
104 |
-
$this->admin_init = new AIOWPSecurity_Admin_Init();
|
105 |
-
}
|
106 |
-
}
|
107 |
-
|
108 |
-
function activate_handler()
|
109 |
-
{
|
110 |
-
//Only runs when the plugin activates
|
111 |
-
include_once ('classes/wp-security-installer.php');
|
112 |
-
AIOWPSecurity_Installer::run_installer();
|
113 |
-
wp_schedule_event(time(), 'hourly', 'aiowps_hourly_cron_event'); //schedule an hourly cron event
|
114 |
-
//wp_schedule_event(time(), 'daily', 'aiowps_daily_cron_event'); //schedule an daily cron event
|
115 |
-
}
|
116 |
-
|
117 |
-
function deactivate_handler()
|
118 |
-
{
|
119 |
-
//Only runs with the pluign is deactivated
|
120 |
-
wp_clear_scheduled_hook('aiowps_hourly_cron_event');
|
121 |
-
//wp_clear_scheduled_hook('aiowps_daily_cron_event');
|
122 |
-
}
|
123 |
-
|
124 |
-
function db_upgrade_handler()
|
125 |
-
{
|
126 |
-
if(is_admin()){//Check if DB needs to be upgraded
|
127 |
-
if (get_option('aiowpsec_db_version') != AIO_WP_SECURITY_DB_VERSION) {
|
128 |
-
include_once ('classes/wp-security-installer.php');
|
129 |
-
AIOWPSecurity_Installer::run_installer();
|
130 |
-
}
|
131 |
-
}
|
132 |
-
}
|
133 |
-
|
134 |
-
function plugins_loaded_handler()
|
135 |
-
{
|
136 |
-
//Runs when plugins_loaded action gets fired
|
137 |
-
if(is_admin()){
|
138 |
-
//Do plugins_loaded operations for admin side
|
139 |
-
$this->db_upgrade_handler();
|
140 |
-
}
|
141 |
-
$this->do_additional_plugins_loaded_tasks();
|
142 |
-
}
|
143 |
-
|
144 |
-
function wp_security_plugin_init()
|
145 |
-
{
|
146 |
-
//Set up localisation
|
147 |
-
load_plugin_textdomain('aiowpsecurity', false, AIO_WP_SECURITY_PATH . "/languages" );
|
148 |
-
|
149 |
-
//Plugin into code goes here... actions, filters, shortcodes goes here
|
150 |
-
$this->user_login_obj = new AIOWPSecurity_User_Login();//Do the user login operation tasks
|
151 |
-
$this->backup_obj = new AIOWPSecurity_Backup();//Object to handle backup tasks
|
152 |
-
$this->cron_handler = new AIOWPSecurity_Cronjob_Handler();
|
153 |
-
|
154 |
-
add_action('wp_head',array(&$this, 'aiowps_header_content'));
|
155 |
-
|
156 |
-
add_action('wp_login', array('AIOWPSecurity_User_Login', 'wp_login_action_handler'), 10, 2);
|
157 |
-
do_action('aiowps_force_logout_check');
|
158 |
-
$this->do_additional_init_tasks();
|
159 |
-
|
160 |
-
}
|
161 |
-
|
162 |
-
function aiowps_header_content()
|
163 |
-
{
|
164 |
-
//NOP
|
165 |
-
}
|
166 |
-
|
167 |
-
function do_additional_init_tasks()
|
168 |
-
{
|
169 |
-
//NOP
|
170 |
-
}
|
171 |
-
|
172 |
-
function do_additional_plugins_loaded_tasks()
|
173 |
-
{
|
174 |
-
if(isset($_GET['aiowpsec_do_log_out']))
|
175 |
-
{
|
176 |
-
wp_logout();
|
177 |
-
if(isset($_GET['after_logout']))//Redirect to the after logout url directly
|
178 |
-
{
|
179 |
-
$after_logout_url = esc_url($_GET['after_logout']);
|
180 |
-
AIOWPSecurity_Utility::redirect_to_url($after_logout_url);
|
181 |
-
}
|
182 |
-
if(isset($_GET['al_additional_data']))//Inspect the payload and do redirect to login page with a msg and redirect url
|
183 |
-
{
|
184 |
-
$payload = strip_tags($_GET['al_additional_data']);
|
185 |
-
$decoded_payload = base64_decode($payload);
|
186 |
-
parse_str($decoded_payload);
|
187 |
-
if(!empty($redirect_to)){
|
188 |
-
$login_url = AIOWPSecurity_Utility::add_query_data_to_url(wp_login_url(),'redirect_to',$redirect_to);
|
189 |
-
}
|
190 |
-
if(!empty($msg)){
|
191 |
-
$login_url .= '&'.$msg;
|
192 |
-
}
|
193 |
-
if(!empty($login_url)){
|
194 |
-
AIOWPSecurity_Utility::redirect_to_url($login_url);
|
195 |
-
}
|
196 |
-
}
|
197 |
-
}
|
198 |
-
}
|
199 |
-
|
200 |
-
}//End of class
|
201 |
-
|
202 |
-
}//End of class not exists check
|
203 |
-
|
204 |
-
$GLOBALS['aio_wp_security'] = new AIO_WP_Security();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.0/wp-security.php
DELETED
@@ -1,26 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
Plugin Name: All In One WP Security
|
4 |
-
Version: v1.0.0
|
5 |
-
Plugin URI: http://www.tipsandtricks-hq.com/
|
6 |
-
Author: Tips and Tricks HQ, Peter, Ruhul Amin
|
7 |
-
Author URI: http://www.tipsandtricks-hq.com/
|
8 |
-
Description: All round best WordPress security plugin!
|
9 |
-
License: GPL2
|
10 |
-
*/
|
11 |
-
|
12 |
-
if(!defined('ABSPATH'))exit; //Exit if accessed directly
|
13 |
-
|
14 |
-
include_once('wp-security-core.php');
|
15 |
-
register_activation_hook(__FILE__,array('AIO_WP_Security','activate_handler'));//activation hook
|
16 |
-
register_deactivation_hook(__FILE__,array('AIO_WP_Security','deactivate_handler'));//deactivation hook
|
17 |
-
|
18 |
-
function aiowps_show_plugin_settings_link($links, $file)
|
19 |
-
{
|
20 |
-
if ($file == plugin_basename(__FILE__)){
|
21 |
-
$settings_link = '<a href="admin.php?page=aiowpsec_settings">Settings</a>';
|
22 |
-
array_unshift($links, $settings_link);
|
23 |
-
}
|
24 |
-
return $links;
|
25 |
-
}
|
26 |
-
add_filter('plugin_action_links', 'aiowps_show_plugin_settings_link', 10, 2 );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.1/admin/general/wp-security-list-table.php
DELETED
@@ -1,907 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Base class for displaying a list of items in an ajaxified HTML table.
|
4 |
-
*/
|
5 |
-
class AIOWPSecurity_List_Table
|
6 |
-
{
|
7 |
-
/**
|
8 |
-
* The current list of items
|
9 |
-
*
|
10 |
-
* @since 3.1.0
|
11 |
-
* @var array
|
12 |
-
* @access protected
|
13 |
-
*/
|
14 |
-
var $items;
|
15 |
-
|
16 |
-
/**
|
17 |
-
* Various information about the current table
|
18 |
-
*
|
19 |
-
* @since 3.1.0
|
20 |
-
* @var array
|
21 |
-
* @access private
|
22 |
-
*/
|
23 |
-
var $_args;
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Various information needed for displaying the pagination
|
27 |
-
*
|
28 |
-
* @since 3.1.0
|
29 |
-
* @var array
|
30 |
-
* @access private
|
31 |
-
*/
|
32 |
-
var $_pagination_args = array();
|
33 |
-
|
34 |
-
/**
|
35 |
-
* The current screen
|
36 |
-
*
|
37 |
-
* @since 3.1.0
|
38 |
-
* @var object
|
39 |
-
* @access protected
|
40 |
-
*/
|
41 |
-
var $screen;
|
42 |
-
|
43 |
-
/**
|
44 |
-
* Cached bulk actions
|
45 |
-
*
|
46 |
-
* @since 3.1.0
|
47 |
-
* @var array
|
48 |
-
* @access private
|
49 |
-
*/
|
50 |
-
var $_actions;
|
51 |
-
|
52 |
-
/**
|
53 |
-
* Cached pagination output
|
54 |
-
*
|
55 |
-
* @since 3.1.0
|
56 |
-
* @var string
|
57 |
-
* @access private
|
58 |
-
*/
|
59 |
-
var $_pagination;
|
60 |
-
|
61 |
-
/**
|
62 |
-
* Constructor. The child class should call this constructor from it's own constructor
|
63 |
-
*
|
64 |
-
* @param array $args An associative array with information about the current table
|
65 |
-
* @access protected
|
66 |
-
*/
|
67 |
-
function __construct( $args = array() ) {
|
68 |
-
$args = wp_parse_args( $args, array(
|
69 |
-
'plural' => '',
|
70 |
-
'singular' => '',
|
71 |
-
'ajax' => false,
|
72 |
-
'screen' => null,
|
73 |
-
) );
|
74 |
-
|
75 |
-
$this->screen = convert_to_screen( $args['screen'] );
|
76 |
-
|
77 |
-
add_filter( "manage_{$this->screen->id}_columns", array( &$this, 'get_columns' ), 0 );
|
78 |
-
|
79 |
-
if ( !$args['plural'] )
|
80 |
-
$args['plural'] = $this->screen->base;
|
81 |
-
|
82 |
-
$args['plural'] = sanitize_key( $args['plural'] );
|
83 |
-
$args['singular'] = sanitize_key( $args['singular'] );
|
84 |
-
|
85 |
-
$this->_args = $args;
|
86 |
-
|
87 |
-
if ( $args['ajax'] ) {
|
88 |
-
// wp_enqueue_script( 'list-table' );
|
89 |
-
add_action( 'admin_footer', array( &$this, '_js_vars' ) );
|
90 |
-
}
|
91 |
-
}
|
92 |
-
|
93 |
-
/**
|
94 |
-
* Checks the current user's permissions
|
95 |
-
* @uses wp_die()
|
96 |
-
*
|
97 |
-
* @since 3.1.0
|
98 |
-
* @access public
|
99 |
-
* @abstract
|
100 |
-
*/
|
101 |
-
function ajax_user_can() {
|
102 |
-
die( 'function AIOWPSecurity_List_Table::ajax_user_can() must be over-ridden in a sub-class.' );
|
103 |
-
}
|
104 |
-
|
105 |
-
/**
|
106 |
-
* Prepares the list of items for displaying.
|
107 |
-
* @uses AIOWPSecurity_List_Table::set_pagination_args()
|
108 |
-
*
|
109 |
-
* @since 3.1.0
|
110 |
-
* @access public
|
111 |
-
* @abstract
|
112 |
-
*/
|
113 |
-
function prepare_items() {
|
114 |
-
die( 'function AIOWPSecurity_List_Table::prepare_items() must be over-ridden in a sub-class.' );
|
115 |
-
}
|
116 |
-
|
117 |
-
/**
|
118 |
-
* An internal method that sets all the necessary pagination arguments
|
119 |
-
*
|
120 |
-
* @param array $args An associative array with information about the pagination
|
121 |
-
* @access protected
|
122 |
-
*/
|
123 |
-
function set_pagination_args( $args ) {
|
124 |
-
$args = wp_parse_args( $args, array(
|
125 |
-
'total_items' => 0,
|
126 |
-
'total_pages' => 0,
|
127 |
-
'per_page' => 0,
|
128 |
-
) );
|
129 |
-
|
130 |
-
if ( !$args['total_pages'] && $args['per_page'] > 0 )
|
131 |
-
$args['total_pages'] = ceil( $args['total_items'] / $args['per_page'] );
|
132 |
-
|
133 |
-
// redirect if page number is invalid and headers are not already sent
|
134 |
-
if ( ! headers_sent() && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) && $args['total_pages'] > 0 && $this->get_pagenum() > $args['total_pages'] ) {
|
135 |
-
wp_redirect( add_query_arg( 'paged', $args['total_pages'] ) );
|
136 |
-
exit;
|
137 |
-
}
|
138 |
-
|
139 |
-
$this->_pagination_args = $args;
|
140 |
-
}
|
141 |
-
|
142 |
-
/**
|
143 |
-
* Access the pagination args
|
144 |
-
*
|
145 |
-
* @since 3.1.0
|
146 |
-
* @access public
|
147 |
-
*
|
148 |
-
* @param string $key
|
149 |
-
* @return array
|
150 |
-
*/
|
151 |
-
function get_pagination_arg( $key ) {
|
152 |
-
if ( 'page' == $key )
|
153 |
-
return $this->get_pagenum();
|
154 |
-
|
155 |
-
if ( isset( $this->_pagination_args[$key] ) )
|
156 |
-
return $this->_pagination_args[$key];
|
157 |
-
}
|
158 |
-
|
159 |
-
/**
|
160 |
-
* Whether the table has items to display or not
|
161 |
-
*
|
162 |
-
* @since 3.1.0
|
163 |
-
* @access public
|
164 |
-
*
|
165 |
-
* @return bool
|
166 |
-
*/
|
167 |
-
function has_items() {
|
168 |
-
return !empty( $this->items );
|
169 |
-
}
|
170 |
-
|
171 |
-
/**
|
172 |
-
* Message to be displayed when there are no items
|
173 |
-
*
|
174 |
-
* @since 3.1.0
|
175 |
-
* @access public
|
176 |
-
*/
|
177 |
-
function no_items() {
|
178 |
-
_e( 'No items found.' );
|
179 |
-
}
|
180 |
-
|
181 |
-
/**
|
182 |
-
* Display the search box.
|
183 |
-
*
|
184 |
-
* @since 3.1.0
|
185 |
-
* @access public
|
186 |
-
*
|
187 |
-
* @param string $text The search button text
|
188 |
-
* @param string $input_id The search input id
|
189 |
-
*/
|
190 |
-
function search_box( $text, $input_id ) {
|
191 |
-
if ( empty( $_REQUEST['s'] ) && !$this->has_items() )
|
192 |
-
return;
|
193 |
-
|
194 |
-
$input_id = $input_id . '-search-input';
|
195 |
-
|
196 |
-
if ( ! empty( $_REQUEST['orderby'] ) )
|
197 |
-
echo '<input type="hidden" name="orderby" value="' . esc_attr( $_REQUEST['orderby'] ) . '" />';
|
198 |
-
if ( ! empty( $_REQUEST['order'] ) )
|
199 |
-
echo '<input type="hidden" name="order" value="' . esc_attr( $_REQUEST['order'] ) . '" />';
|
200 |
-
if ( ! empty( $_REQUEST['post_mime_type'] ) )
|
201 |
-
echo '<input type="hidden" name="post_mime_type" value="' . esc_attr( $_REQUEST['post_mime_type'] ) . '" />';
|
202 |
-
if ( ! empty( $_REQUEST['detached'] ) )
|
203 |
-
echo '<input type="hidden" name="detached" value="' . esc_attr( $_REQUEST['detached'] ) . '" />';
|
204 |
-
?>
|
205 |
-
<p class="search-box">
|
206 |
-
<label class="screen-reader-text" for="<?php echo $input_id ?>"><?php echo $text; ?>:</label>
|
207 |
-
<input type="search" id="<?php echo $input_id ?>" name="s" value="<?php _admin_search_query(); ?>" />
|
208 |
-
<?php submit_button( $text, 'button', false, false, array('id' => 'search-submit') ); ?>
|
209 |
-
</p>
|
210 |
-
<?php
|
211 |
-
}
|
212 |
-
|
213 |
-
/**
|
214 |
-
* Get an associative array ( id => link ) with the list
|
215 |
-
* of views available on this table.
|
216 |
-
*
|
217 |
-
* @since 3.1.0
|
218 |
-
* @access protected
|
219 |
-
*
|
220 |
-
* @return array
|
221 |
-
*/
|
222 |
-
function get_views() {
|
223 |
-
return array();
|
224 |
-
}
|
225 |
-
|
226 |
-
/**
|
227 |
-
* Display the list of views available on this table.
|
228 |
-
*
|
229 |
-
* @since 3.1.0
|
230 |
-
* @access public
|
231 |
-
*/
|
232 |
-
function views() {
|
233 |
-
$views = $this->get_views();
|
234 |
-
$views = apply_filters( 'views_' . $this->screen->id, $views );
|
235 |
-
|
236 |
-
if ( empty( $views ) )
|
237 |
-
return;
|
238 |
-
|
239 |
-
echo "<ul class='subsubsub'>\n";
|
240 |
-
foreach ( $views as $class => $view ) {
|
241 |
-
$views[ $class ] = "\t<li class='$class'>$view";
|
242 |
-
}
|
243 |
-
echo implode( " |</li>\n", $views ) . "</li>\n";
|
244 |
-
echo "</ul>";
|
245 |
-
}
|
246 |
-
|
247 |
-
/**
|
248 |
-
* Get an associative array ( option_name => option_title ) with the list
|
249 |
-
* of bulk actions available on this table.
|
250 |
-
*
|
251 |
-
* @since 3.1.0
|
252 |
-
* @access protected
|
253 |
-
*
|
254 |
-
* @return array
|
255 |
-
*/
|
256 |
-
function get_bulk_actions() {
|
257 |
-
return array();
|
258 |
-
}
|
259 |
-
|
260 |
-
/**
|
261 |
-
* Display the bulk actions dropdown.
|
262 |
-
*
|
263 |
-
* @since 3.1.0
|
264 |
-
* @access public
|
265 |
-
*/
|
266 |
-
function bulk_actions() {
|
267 |
-
if ( is_null( $this->_actions ) ) {
|
268 |
-
$no_new_actions = $this->_actions = $this->get_bulk_actions();
|
269 |
-
// This filter can currently only be used to remove actions.
|
270 |
-
$this->_actions = apply_filters( 'bulk_actions-' . $this->screen->id, $this->_actions );
|
271 |
-
$this->_actions = array_intersect_assoc( $this->_actions, $no_new_actions );
|
272 |
-
$two = '';
|
273 |
-
} else {
|
274 |
-
$two = '2';
|
275 |
-
}
|
276 |
-
|
277 |
-
if ( empty( $this->_actions ) )
|
278 |
-
return;
|
279 |
-
|
280 |
-
echo "<select name='action$two'>\n";
|
281 |
-
echo "<option value='-1' selected='selected'>" . __( 'Bulk Actions' ) . "</option>\n";
|
282 |
-
|
283 |
-
foreach ( $this->_actions as $name => $title ) {
|
284 |
-
$class = 'edit' == $name ? ' class="hide-if-no-js"' : '';
|
285 |
-
|
286 |
-
echo "\t<option value='$name'$class>$title</option>\n";
|
287 |
-
}
|
288 |
-
|
289 |
-
echo "</select>\n";
|
290 |
-
|
291 |
-
submit_button( __( 'Apply' ), 'action', false, false, array( 'id' => "doaction$two" ) );
|
292 |
-
echo "\n";
|
293 |
-
}
|
294 |
-
|
295 |
-
/**
|
296 |
-
* Get the current action selected from the bulk actions dropdown.
|
297 |
-
*
|
298 |
-
* @since 3.1.0
|
299 |
-
* @access public
|
300 |
-
*
|
301 |
-
* @return string|bool The action name or False if no action was selected
|
302 |
-
*/
|
303 |
-
function current_action() {
|
304 |
-
if ( isset( $_REQUEST['action'] ) && -1 != $_REQUEST['action'] )
|
305 |
-
return $_REQUEST['action'];
|
306 |
-
|
307 |
-
if ( isset( $_REQUEST['action2'] ) && -1 != $_REQUEST['action2'] )
|
308 |
-
return $_REQUEST['action2'];
|
309 |
-
|
310 |
-
return false;
|
311 |
-
}
|
312 |
-
|
313 |
-
/**
|
314 |
-
* Generate row actions div
|
315 |
-
*
|
316 |
-
* @since 3.1.0
|
317 |
-
* @access protected
|
318 |
-
*
|
319 |
-
* @param array $actions The list of actions
|
320 |
-
* @param bool $always_visible Whether the actions should be always visible
|
321 |
-
* @return string
|
322 |
-
*/
|
323 |
-
function row_actions( $actions, $always_visible = false ) {
|
324 |
-
$action_count = count( $actions );
|
325 |
-
$i = 0;
|
326 |
-
|
327 |
-
if ( !$action_count )
|
328 |
-
return '';
|
329 |
-
|
330 |
-
$out = '<div class="' . ( $always_visible ? 'row-actions-visible' : 'row-actions' ) . '">';
|
331 |
-
foreach ( $actions as $action => $link ) {
|
332 |
-
++$i;
|
333 |
-
( $i == $action_count ) ? $sep = '' : $sep = ' | ';
|
334 |
-
$out .= "<span class='$action'>$link$sep</span>";
|
335 |
-
}
|
336 |
-
$out .= '</div>';
|
337 |
-
|
338 |
-
return $out;
|
339 |
-
}
|
340 |
-
|
341 |
-
/**
|
342 |
-
* Display a monthly dropdown for filtering items
|
343 |
-
*
|
344 |
-
* @since 3.1.0
|
345 |
-
* @access protected
|
346 |
-
*/
|
347 |
-
function months_dropdown( $post_type ) {
|
348 |
-
global $wpdb, $wp_locale;
|
349 |
-
|
350 |
-
$months = $wpdb->get_results( $wpdb->prepare( "
|
351 |
-
SELECT DISTINCT YEAR( post_date ) AS year, MONTH( post_date ) AS month
|
352 |
-
FROM $wpdb->posts
|
353 |
-
WHERE post_type = %s
|
354 |
-
ORDER BY post_date DESC
|
355 |
-
", $post_type ) );
|
356 |
-
|
357 |
-
$month_count = count( $months );
|
358 |
-
|
359 |
-
if ( !$month_count || ( 1 == $month_count && 0 == $months[0]->month ) )
|
360 |
-
return;
|
361 |
-
|
362 |
-
$m = isset( $_GET['m'] ) ? (int) $_GET['m'] : 0;
|
363 |
-
?>
|
364 |
-
<select name='m'>
|
365 |
-
<option<?php selected( $m, 0 ); ?> value='0'><?php _e( 'Show all dates' ); ?></option>
|
366 |
-
<?php
|
367 |
-
foreach ( $months as $arc_row ) {
|
368 |
-
if ( 0 == $arc_row->year )
|
369 |
-
continue;
|
370 |
-
|
371 |
-
$month = zeroise( $arc_row->month, 2 );
|
372 |
-
$year = $arc_row->year;
|
373 |
-
|
374 |
-
printf( "<option %s value='%s'>%s</option>\n",
|
375 |
-
selected( $m, $year . $month, false ),
|
376 |
-
esc_attr( $arc_row->year . $month ),
|
377 |
-
/* translators: 1: month name, 2: 4-digit year */
|
378 |
-
sprintf( __( '%1$s %2$d' ), $wp_locale->get_month( $month ), $year )
|
379 |
-
);
|
380 |
-
}
|
381 |
-
?>
|
382 |
-
</select>
|
383 |
-
<?php
|
384 |
-
}
|
385 |
-
|
386 |
-
/**
|
387 |
-
* Display a view switcher
|
388 |
-
*
|
389 |
-
* @since 3.1.0
|
390 |
-
* @access protected
|
391 |
-
*/
|
392 |
-
function view_switcher( $current_mode ) {
|
393 |
-
$modes = array(
|
394 |
-
'list' => __( 'List View' ),
|
395 |
-
'excerpt' => __( 'Excerpt View' )
|
396 |
-
);
|
397 |
-
|
398 |
-
?>
|
399 |
-
<input type="hidden" name="mode" value="<?php echo esc_attr( $current_mode ); ?>" />
|
400 |
-
<div class="view-switch">
|
401 |
-
<?php
|
402 |
-
foreach ( $modes as $mode => $title ) {
|
403 |
-
$class = ( $current_mode == $mode ) ? 'class="current"' : '';
|
404 |
-
echo "<a href='" . esc_url( add_query_arg( 'mode', $mode, $_SERVER['REQUEST_URI'] ) ) . "' $class><img id='view-switch-$mode' src='" . esc_url( includes_url( 'images/blank.gif' ) ) . "' width='20' height='20' title='$title' alt='$title' /></a>\n";
|
405 |
-
}
|
406 |
-
?>
|
407 |
-
</div>
|
408 |
-
<?php
|
409 |
-
}
|
410 |
-
|
411 |
-
/**
|
412 |
-
* Display a comment count bubble
|
413 |
-
*
|
414 |
-
* @since 3.1.0
|
415 |
-
* @access protected
|
416 |
-
*
|
417 |
-
* @param int $post_id
|
418 |
-
* @param int $pending_comments
|
419 |
-
*/
|
420 |
-
function comments_bubble( $post_id, $pending_comments ) {
|
421 |
-
$pending_phrase = sprintf( __( '%s pending' ), number_format( $pending_comments ) );
|
422 |
-
|
423 |
-
if ( $pending_comments )
|
424 |
-
echo '<strong>';
|
425 |
-
|
426 |
-
echo "<a href='" . esc_url( add_query_arg( 'p', $post_id, admin_url( 'edit-comments.php' ) ) ) . "' title='" . esc_attr( $pending_phrase ) . "' class='post-com-count'><span class='comment-count'>" . number_format_i18n( get_comments_number() ) . "</span></a>";
|
427 |
-
|
428 |
-
if ( $pending_comments )
|
429 |
-
echo '</strong>';
|
430 |
-
}
|
431 |
-
|
432 |
-
/**
|
433 |
-
* Get the current page number
|
434 |
-
*
|
435 |
-
* @since 3.1.0
|
436 |
-
* @access protected
|
437 |
-
*
|
438 |
-
* @return int
|
439 |
-
*/
|
440 |
-
function get_pagenum() {
|
441 |
-
$pagenum = isset( $_REQUEST['paged'] ) ? absint( $_REQUEST['paged'] ) : 0;
|
442 |
-
|
443 |
-
if( isset( $this->_pagination_args['total_pages'] ) && $pagenum > $this->_pagination_args['total_pages'] )
|
444 |
-
$pagenum = $this->_pagination_args['total_pages'];
|
445 |
-
|
446 |
-
return max( 1, $pagenum );
|
447 |
-
}
|
448 |
-
|
449 |
-
/**
|
450 |
-
* Get number of items to display on a single page
|
451 |
-
*
|
452 |
-
* @since 3.1.0
|
453 |
-
* @access protected
|
454 |
-
*
|
455 |
-
* @return int
|
456 |
-
*/
|
457 |
-
function get_items_per_page( $option, $default = 20 ) {
|
458 |
-
$per_page = (int) get_user_option( $option );
|
459 |
-
if ( empty( $per_page ) || $per_page < 1 )
|
460 |
-
$per_page = $default;
|
461 |
-
|
462 |
-
return (int) apply_filters( $option, $per_page );
|
463 |
-
}
|
464 |
-
|
465 |
-
/**
|
466 |
-
* Display the pagination.
|
467 |
-
*
|
468 |
-
* @since 3.1.0
|
469 |
-
* @access protected
|
470 |
-
*/
|
471 |
-
function pagination( $which ) {
|
472 |
-
if ( empty( $this->_pagination_args ) )
|
473 |
-
return;
|
474 |
-
|
475 |
-
extract( $this->_pagination_args, EXTR_SKIP );
|
476 |
-
|
477 |
-
$output = '<span class="displaying-num">' . sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) ) . '</span>';
|
478 |
-
|
479 |
-
$current = $this->get_pagenum();
|
480 |
-
|
481 |
-
$current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
|
482 |
-
|
483 |
-
$current_url = remove_query_arg( array( 'hotkeys_highlight_last', 'hotkeys_highlight_first' ), $current_url );
|
484 |
-
|
485 |
-
$page_links = array();
|
486 |
-
|
487 |
-
$disable_first = $disable_last = '';
|
488 |
-
if ( $current == 1 )
|
489 |
-
$disable_first = ' disabled';
|
490 |
-
if ( $current == $total_pages )
|
491 |
-
$disable_last = ' disabled';
|
492 |
-
|
493 |
-
$page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
|
494 |
-
'first-page' . $disable_first,
|
495 |
-
esc_attr__( 'Go to the first page' ),
|
496 |
-
esc_url( remove_query_arg( 'paged', $current_url ) ),
|
497 |
-
'«'
|
498 |
-
);
|
499 |
-
|
500 |
-
$page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
|
501 |
-
'prev-page' . $disable_first,
|
502 |
-
esc_attr__( 'Go to the previous page' ),
|
503 |
-
esc_url( add_query_arg( 'paged', max( 1, $current-1 ), $current_url ) ),
|
504 |
-
'‹'
|
505 |
-
);
|
506 |
-
|
507 |
-
if ( 'bottom' == $which )
|
508 |
-
$html_current_page = $current;
|
509 |
-
else
|
510 |
-
$html_current_page = sprintf( "<input class='current-page' title='%s' type='text' name='paged' value='%s' size='%d' />",
|
511 |
-
esc_attr__( 'Current page' ),
|
512 |
-
$current,
|
513 |
-
strlen( $total_pages )
|
514 |
-
);
|
515 |
-
|
516 |
-
$html_total_pages = sprintf( "<span class='total-pages'>%s</span>", number_format_i18n( $total_pages ) );
|
517 |
-
$page_links[] = '<span class="paging-input">' . sprintf( _x( '%1$s of %2$s', 'paging' ), $html_current_page, $html_total_pages ) . '</span>';
|
518 |
-
|
519 |
-
$page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
|
520 |
-
'next-page' . $disable_last,
|
521 |
-
esc_attr__( 'Go to the next page' ),
|
522 |
-
esc_url( add_query_arg( 'paged', min( $total_pages, $current+1 ), $current_url ) ),
|
523 |
-
'›'
|
524 |
-
);
|
525 |
-
|
526 |
-
$page_links[] = sprintf( "<a class='%s' title='%s' href='%s'>%s</a>",
|
527 |
-
'last-page' . $disable_last,
|
528 |
-
esc_attr__( 'Go to the last page' ),
|
529 |
-
esc_url( add_query_arg( 'paged', $total_pages, $current_url ) ),
|
530 |
-
'»'
|
531 |
-
);
|
532 |
-
|
533 |
-
$pagination_links_class = 'pagination-links';
|
534 |
-
if ( ! empty( $infinite_scroll ) )
|
535 |
-
$pagination_links_class = ' hide-if-js';
|
536 |
-
$output .= "\n<span class='$pagination_links_class'>" . join( "\n", $page_links ) . '</span>';
|
537 |
-
|
538 |
-
if ( $total_pages )
|
539 |
-
$page_class = $total_pages < 2 ? ' one-page' : '';
|
540 |
-
else
|
541 |
-
$page_class = ' no-pages';
|
542 |
-
|
543 |
-
$this->_pagination = "<div class='tablenav-pages{$page_class}'>$output</div>";
|
544 |
-
|
545 |
-
echo $this->_pagination;
|
546 |
-
}
|
547 |
-
|
548 |
-
/**
|
549 |
-
* Get a list of columns. The format is:
|
550 |
-
* 'internal-name' => 'Title'
|
551 |
-
*
|
552 |
-
* @since 3.1.0
|
553 |
-
* @access protected
|
554 |
-
* @abstract
|
555 |
-
*
|
556 |
-
* @return array
|
557 |
-
*/
|
558 |
-
function get_columns() {
|
559 |
-
die( 'function AIOWPSecurity_List_Table::get_columns() must be over-ridden in a sub-class.' );
|
560 |
-
}
|
561 |
-
|
562 |
-
/**
|
563 |
-
* Get a list of sortable columns. The format is:
|
564 |
-
* 'internal-name' => 'orderby'
|
565 |
-
* or
|
566 |
-
* 'internal-name' => array( 'orderby', true )
|
567 |
-
*
|
568 |
-
* The second format will make the initial sorting order be descending
|
569 |
-
*
|
570 |
-
* @since 3.1.0
|
571 |
-
* @access protected
|
572 |
-
*
|
573 |
-
* @return array
|
574 |
-
*/
|
575 |
-
function get_sortable_columns() {
|
576 |
-
return array();
|
577 |
-
}
|
578 |
-
|
579 |
-
/**
|
580 |
-
* Get a list of all, hidden and sortable columns, with filter applied
|
581 |
-
*
|
582 |
-
* @since 3.1.0
|
583 |
-
* @access protected
|
584 |
-
*
|
585 |
-
* @return array
|
586 |
-
*/
|
587 |
-
function get_column_info() {
|
588 |
-
if ( isset( $this->_column_headers ) )
|
589 |
-
return $this->_column_headers;
|
590 |
-
|
591 |
-
$columns = get_column_headers( $this->screen );
|
592 |
-
$hidden = get_hidden_columns( $this->screen );
|
593 |
-
|
594 |
-
$_sortable = apply_filters( "manage_{$this->screen->id}_sortable_columns", $this->get_sortable_columns() );
|
595 |
-
|
596 |
-
$sortable = array();
|
597 |
-
foreach ( $_sortable as $id => $data ) {
|
598 |
-
if ( empty( $data ) )
|
599 |
-
continue;
|
600 |
-
|
601 |
-
$data = (array) $data;
|
602 |
-
if ( !isset( $data[1] ) )
|
603 |
-
$data[1] = false;
|
604 |
-
|
605 |
-
$sortable[$id] = $data;
|
606 |
-
}
|
607 |
-
|
608 |
-
$this->_column_headers = array( $columns, $hidden, $sortable );
|
609 |
-
|
610 |
-
return $this->_column_headers;
|
611 |
-
}
|
612 |
-
|
613 |
-
/**
|
614 |
-
* Return number of visible columns
|
615 |
-
*
|
616 |
-
* @since 3.1.0
|
617 |
-
* @access public
|
618 |
-
*
|
619 |
-
* @return int
|
620 |
-
*/
|
621 |
-
function get_column_count() {
|
622 |
-
list ( $columns, $hidden ) = $this->get_column_info();
|
623 |
-
$hidden = array_intersect( array_keys( $columns ), array_filter( $hidden ) );
|
624 |
-
return count( $columns ) - count( $hidden );
|
625 |
-
}
|
626 |
-
|
627 |
-
/**
|
628 |
-
* Print column headers, accounting for hidden and sortable columns.
|
629 |
-
*
|
630 |
-
* @since 3.1.0
|
631 |
-
* @access protected
|
632 |
-
*
|
633 |
-
* @param bool $with_id Whether to set the id attribute or not
|
634 |
-
*/
|
635 |
-
function print_column_headers( $with_id = true ) {
|
636 |
-
list( $columns, $hidden, $sortable ) = $this->get_column_info();
|
637 |
-
|
638 |
-
$current_url = set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
|
639 |
-
$current_url = remove_query_arg( 'paged', $current_url );
|
640 |
-
|
641 |
-
if ( isset( $_GET['orderby'] ) )
|
642 |
-
$current_orderby = $_GET['orderby'];
|
643 |
-
else
|
644 |
-
$current_orderby = '';
|
645 |
-
|
646 |
-
if ( isset( $_GET['order'] ) && 'desc' == $_GET['order'] )
|
647 |
-
$current_order = 'desc';
|
648 |
-
else
|
649 |
-
$current_order = 'asc';
|
650 |
-
|
651 |
-
if ( ! empty( $columns['cb'] ) ) {
|
652 |
-
static $cb_counter = 1;
|
653 |
-
$columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __( 'Select All' ) . '</label>'
|
654 |
-
. '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" />';
|
655 |
-
$cb_counter++;
|
656 |
-
}
|
657 |
-
|
658 |
-
foreach ( $columns as $column_key => $column_display_name ) {
|
659 |
-
$class = array( 'manage-column', "column-$column_key" );
|
660 |
-
|
661 |
-
$style = '';
|
662 |
-
if ( in_array( $column_key, $hidden ) )
|
663 |
-
$style = 'display:none;';
|
664 |
-
|
665 |
-
$style = ' style="' . $style . '"';
|
666 |
-
|
667 |
-
if ( 'cb' == $column_key )
|
668 |
-
$class[] = 'check-column';
|
669 |
-
elseif ( in_array( $column_key, array( 'posts', 'comments', 'links' ) ) )
|
670 |
-
$class[] = 'num';
|
671 |
-
|
672 |
-
if ( isset( $sortable[$column_key] ) ) {
|
673 |
-
list( $orderby, $desc_first ) = $sortable[$column_key];
|
674 |
-
|
675 |
-
if ( $current_orderby == $orderby ) {
|
676 |
-
$order = 'asc' == $current_order ? 'desc' : 'asc';
|
677 |
-
$class[] = 'sorted';
|
678 |
-
$class[] = $current_order;
|
679 |
-
} else {
|
680 |
-
$order = $desc_first ? 'desc' : 'asc';
|
681 |
-
$class[] = 'sortable';
|
682 |
-
$class[] = $desc_first ? 'asc' : 'desc';
|
683 |
-
}
|
684 |
-
|
685 |
-
$column_display_name = '<a href="' . esc_url( add_query_arg( compact( 'orderby', 'order' ), $current_url ) ) . '"><span>' . $column_display_name . '</span><span class="sorting-indicator"></span></a>';
|
686 |
-
}
|
687 |
-
|
688 |
-
$id = $with_id ? "id='$column_key'" : '';
|
689 |
-
|
690 |
-
if ( !empty( $class ) )
|
691 |
-
$class = "class='" . join( ' ', $class ) . "'";
|
692 |
-
|
693 |
-
echo "<th scope='col' $id $class $style>$column_display_name</th>";
|
694 |
-
}
|
695 |
-
}
|
696 |
-
|
697 |
-
/**
|
698 |
-
* Display the table
|
699 |
-
*
|
700 |
-
* @since 3.1.0
|
701 |
-
* @access public
|
702 |
-
*/
|
703 |
-
function display() {
|
704 |
-
extract( $this->_args );
|
705 |
-
|
706 |
-
$this->display_tablenav( 'top' );
|
707 |
-
|
708 |
-
?>
|
709 |
-
<table class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>" cellspacing="0">
|
710 |
-
<thead>
|
711 |
-
<tr>
|
712 |
-
<?php $this->print_column_headers(); ?>
|
713 |
-
</tr>
|
714 |
-
</thead>
|
715 |
-
|
716 |
-
<tfoot>
|
717 |
-
<tr>
|
718 |
-
<?php $this->print_column_headers( false ); ?>
|
719 |
-
</tr>
|
720 |
-
</tfoot>
|
721 |
-
|
722 |
-
<tbody id="the-list"<?php if ( $singular ) echo " data-wp-lists='list:$singular'"; ?>>
|
723 |
-
<?php $this->display_rows_or_placeholder(); ?>
|
724 |
-
</tbody>
|
725 |
-
</table>
|
726 |
-
<?php
|
727 |
-
$this->display_tablenav( 'bottom' );
|
728 |
-
}
|
729 |
-
|
730 |
-
/**
|
731 |
-
* Get a list of CSS classes for the <table> tag
|
732 |
-
*
|
733 |
-
* @since 3.1.0
|
734 |
-
* @access protected
|
735 |
-
*
|
736 |
-
* @return array
|
737 |
-
*/
|
738 |
-
function get_table_classes() {
|
739 |
-
return array( 'widefat', 'fixed', $this->_args['plural'] );
|
740 |
-
}
|
741 |
-
|
742 |
-
/**
|
743 |
-
* Generate the table navigation above or below the table
|
744 |
-
*
|
745 |
-
* @since 3.1.0
|
746 |
-
* @access protected
|
747 |
-
*/
|
748 |
-
function display_tablenav( $which ) {
|
749 |
-
if ( 'top' == $which )
|
750 |
-
wp_nonce_field( 'bulk-' . $this->_args['plural'] );
|
751 |
-
?>
|
752 |
-
<div class="tablenav <?php echo esc_attr( $which ); ?>">
|
753 |
-
|
754 |
-
<div class="alignleft actions">
|
755 |
-
<?php $this->bulk_actions(); ?>
|
756 |
-
</div>
|
757 |
-
<?php
|
758 |
-
$this->extra_tablenav( $which );
|
759 |
-
$this->pagination( $which );
|
760 |
-
?>
|
761 |
-
|
762 |
-
<br class="clear" />
|
763 |
-
</div>
|
764 |
-
<?php
|
765 |
-
}
|
766 |
-
|
767 |
-
/**
|
768 |
-
* Extra controls to be displayed between bulk actions and pagination
|
769 |
-
*
|
770 |
-
* @since 3.1.0
|
771 |
-
* @access protected
|
772 |
-
*/
|
773 |
-
function extra_tablenav( $which ) {}
|
774 |
-
|
775 |
-
/**
|
776 |
-
* Generate the <tbody> part of the table
|
777 |
-
*
|
778 |
-
* @since 3.1.0
|
779 |
-
* @access protected
|
780 |
-
*/
|
781 |
-
function display_rows_or_placeholder() {
|
782 |
-
if ( $this->has_items() ) {
|
783 |
-
$this->display_rows();
|
784 |
-
} else {
|
785 |
-
list( $columns, $hidden ) = $this->get_column_info();
|
786 |
-
echo '<tr class="no-items"><td class="colspanchange" colspan="' . $this->get_column_count() . '">';
|
787 |
-
$this->no_items();
|
788 |
-
echo '</td></tr>';
|
789 |
-
}
|
790 |
-
}
|
791 |
-
|
792 |
-
/**
|
793 |
-
* Generate the table rows
|
794 |
-
*
|
795 |
-
* @since 3.1.0
|
796 |
-
* @access protected
|
797 |
-
*/
|
798 |
-
function display_rows() {
|
799 |
-
foreach ( $this->items as $item )
|
800 |
-
$this->single_row( $item );
|
801 |
-
}
|
802 |
-
|
803 |
-
/**
|
804 |
-
* Generates content for a single row of the table
|
805 |
-
*
|
806 |
-
* @since 3.1.0
|
807 |
-
* @access protected
|
808 |
-
*
|
809 |
-
* @param object $item The current item
|
810 |
-
*/
|
811 |
-
function single_row( $item ) {
|
812 |
-
static $row_class = '';
|
813 |
-
$row_class = ( $row_class == '' ? ' class="alternate"' : '' );
|
814 |
-
|
815 |
-
echo '<tr' . $row_class . '>';
|
816 |
-
echo $this->single_row_columns( $item );
|
817 |
-
echo '</tr>';
|
818 |
-
}
|
819 |
-
|
820 |
-
/**
|
821 |
-
* Generates the columns for a single row of the table
|
822 |
-
*
|
823 |
-
* @since 3.1.0
|
824 |
-
* @access protected
|
825 |
-
*
|
826 |
-
* @param object $item The current item
|
827 |
-
*/
|
828 |
-
function single_row_columns( $item ) {
|
829 |
-
list( $columns, $hidden ) = $this->get_column_info();
|
830 |
-
|
831 |
-
foreach ( $columns as $column_name => $column_display_name ) {
|
832 |
-
$class = "class='$column_name column-$column_name'";
|
833 |
-
|
834 |
-
$style = '';
|
835 |
-
if ( in_array( $column_name, $hidden ) )
|
836 |
-
$style = ' style="display:none;"';
|
837 |
-
|
838 |
-
$attributes = "$class$style";
|
839 |
-
|
840 |
-
if ( 'cb' == $column_name ) {
|
841 |
-
echo '<th scope="row" class="check-column">';
|
842 |
-
echo $this->column_cb( $item );
|
843 |
-
echo '</th>';
|
844 |
-
}
|
845 |
-
elseif ( method_exists( $this, 'column_' . $column_name ) ) {
|
846 |
-
echo "<td $attributes>";
|
847 |
-
echo call_user_func( array( &$this, 'column_' . $column_name ), $item );
|
848 |
-
echo "</td>";
|
849 |
-
}
|
850 |
-
else {
|
851 |
-
echo "<td $attributes>";
|
852 |
-
echo $this->column_default( $item, $column_name );
|
853 |
-
echo "</td>";
|
854 |
-
}
|
855 |
-
}
|
856 |
-
}
|
857 |
-
|
858 |
-
/**
|
859 |
-
* Handle an incoming ajax request (called from admin-ajax.php)
|
860 |
-
*
|
861 |
-
* @since 3.1.0
|
862 |
-
* @access public
|
863 |
-
*/
|
864 |
-
function ajax_response() {
|
865 |
-
$this->prepare_items();
|
866 |
-
|
867 |
-
extract( $this->_args );
|
868 |
-
extract( $this->_pagination_args, EXTR_SKIP );
|
869 |
-
|
870 |
-
ob_start();
|
871 |
-
if ( ! empty( $_REQUEST['no_placeholder'] ) )
|
872 |
-
$this->display_rows();
|
873 |
-
else
|
874 |
-
$this->display_rows_or_placeholder();
|
875 |
-
|
876 |
-
$rows = ob_get_clean();
|
877 |
-
|
878 |
-
$response = array( 'rows' => $rows );
|
879 |
-
|
880 |
-
if ( isset( $total_items ) )
|
881 |
-
$response['total_items_i18n'] = sprintf( _n( '1 item', '%s items', $total_items ), number_format_i18n( $total_items ) );
|
882 |
-
|
883 |
-
if ( isset( $total_pages ) ) {
|
884 |
-
$response['total_pages'] = $total_pages;
|
885 |
-
$response['total_pages_i18n'] = number_format_i18n( $total_pages );
|
886 |
-
}
|
887 |
-
|
888 |
-
die( json_encode( $response ) );
|
889 |
-
}
|
890 |
-
|
891 |
-
/**
|
892 |
-
* Send required variables to JavaScript land
|
893 |
-
*
|
894 |
-
* @access private
|
895 |
-
*/
|
896 |
-
function _js_vars() {
|
897 |
-
$args = array(
|
898 |
-
'class' => get_class( $this ),
|
899 |
-
'screen' => array(
|
900 |
-
'id' => $this->screen->id,
|
901 |
-
'base' => $this->screen->base,
|
902 |
-
)
|
903 |
-
);
|
904 |
-
|
905 |
-
printf( "<script type='text/javascript'>list_args = %s;</script>\n", json_encode( $args ) );
|
906 |
-
}
|
907 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.1/admin/index.php
DELETED
@@ -1,5 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Do not modify the files in this folder.
|
5 |
-
*/
|
|
|
|
|
|
|
|
|
|
tags/1.1/admin/wp-security-admin-init.php
DELETED
@@ -1,167 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/*
|
3 |
-
* Inits the admin dashboard side of things.
|
4 |
-
* Main admin file which loads all settings panels and sets up admin menus.
|
5 |
-
*/
|
6 |
-
class AIOWPSecurity_Admin_Init
|
7 |
-
{
|
8 |
-
var $main_menu_page;
|
9 |
-
var $dashboard_menu;
|
10 |
-
var $settings_menu;
|
11 |
-
var $user_accounts_menu;
|
12 |
-
var $user_login_menu;
|
13 |
-
var $db_security_menu;
|
14 |
-
var $filesystem_menu;
|
15 |
-
var $whois_menu;
|
16 |
-
var $blacklist_menu;
|
17 |
-
var $firewall_menu;
|
18 |
-
|
19 |
-
function __construct()
|
20 |
-
{
|
21 |
-
$this->admin_includes();
|
22 |
-
add_action('admin_menu', array(&$this, 'create_admin_menus'));
|
23 |
-
|
24 |
-
//make sure we are on our plugin's menu pages
|
25 |
-
if (isset($_GET['page']) && strpos($_GET['page'], AIOWPSEC_MENU_SLUG_PREFIX ) !== false ) {
|
26 |
-
add_action('admin_print_scripts', array(&$this, 'admin_menu_page_scripts'));
|
27 |
-
add_action('admin_print_styles', array(&$this, 'admin_menu_page_styles'));
|
28 |
-
add_action('admin_init', array( &$this, 'admin_init_hook_handler')); //For changing button text inside media uploader (thickbox)
|
29 |
-
}
|
30 |
-
}
|
31 |
-
|
32 |
-
function admin_includes()
|
33 |
-
{
|
34 |
-
include_once('wp-security-admin-menu.php');
|
35 |
-
}
|
36 |
-
|
37 |
-
function admin_menu_page_scripts()
|
38 |
-
{
|
39 |
-
wp_enqueue_script('jquery');
|
40 |
-
wp_enqueue_script('postbox');
|
41 |
-
wp_enqueue_script('dashboard');
|
42 |
-
wp_enqueue_script('thickbox');
|
43 |
-
wp_enqueue_script('media-upload');
|
44 |
-
wp_register_script('aiowpsec-admin-js', AIO_WP_SECURITY_URL. '/js/wp-security-admin-script.js', array('jquery'));
|
45 |
-
wp_enqueue_script('aiowpsec-admin-js');
|
46 |
-
}
|
47 |
-
|
48 |
-
function admin_menu_page_styles()
|
49 |
-
{
|
50 |
-
wp_enqueue_style('dashboard');
|
51 |
-
wp_enqueue_style('thickbox');
|
52 |
-
wp_enqueue_style('global');
|
53 |
-
wp_enqueue_style('wp-admin');
|
54 |
-
wp_enqueue_style('aiowpsec-admin-css', AIO_WP_SECURITY_URL. '/css/wp-security-admin-styles.css');
|
55 |
-
}
|
56 |
-
|
57 |
-
function admin_init_hook_handler()
|
58 |
-
{
|
59 |
-
$this->aiowps_media_uploader_modification();
|
60 |
-
$this->initialize_feature_manager();
|
61 |
-
}
|
62 |
-
|
63 |
-
//For media uploader thickbox - change button text
|
64 |
-
function aiowps_media_uploader_modification()
|
65 |
-
{
|
66 |
-
global $pagenow;
|
67 |
-
if ('media-upload.php' == $pagenow || 'async-upload.php' == $pagenow)
|
68 |
-
{
|
69 |
-
// Here we will customize the 'Insert into Post' Button text inside Thickbox
|
70 |
-
add_filter( 'gettext', array($this, 'aiowps_media_uploader_replace_thickbox_text'), 1, 2);
|
71 |
-
}
|
72 |
-
}
|
73 |
-
|
74 |
-
function aiowps_media_uploader_replace_thickbox_text($translated_text, $text)
|
75 |
-
{
|
76 |
-
if ('Insert into Post' == $text)
|
77 |
-
{
|
78 |
-
$referer = strpos(wp_get_referer(), 'aiowpsec');
|
79 |
-
if ($referer != '')
|
80 |
-
{
|
81 |
-
return ('Select File');
|
82 |
-
}
|
83 |
-
}
|
84 |
-
return $translated_text;
|
85 |
-
}
|
86 |
-
|
87 |
-
function initialize_feature_manager()
|
88 |
-
{
|
89 |
-
$aiowps_feature_mgr = new AIOWPSecurity_Feature_Item_Manager();
|
90 |
-
$aiowps_feature_mgr->initialize_features();
|
91 |
-
$aiowps_feature_mgr->check_and_set_feature_status();
|
92 |
-
$aiowps_feature_mgr->calculate_total_points();
|
93 |
-
$GLOBALS['aiowps_feature_mgr'] = $aiowps_feature_mgr;
|
94 |
-
}
|
95 |
-
|
96 |
-
function create_admin_menus()
|
97 |
-
{
|
98 |
-
$menu_icon_url = AIO_WP_SECURITY_URL.'/images/plugin-icon.png';
|
99 |
-
$this->main_menu_page = add_menu_page(__('WP Security', 'aiowpsecurity'), __('WP Security', 'aiowpsecurity'), AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_MAIN_MENU_SLUG , array(&$this, 'handle_dashboard_menu_rendering'), $menu_icon_url);
|
100 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Dashboard', 'aiowpsecurity'), __('Dashboard', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_MAIN_MENU_SLUG, array(&$this, 'handle_dashboard_menu_rendering'));
|
101 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Settings', 'aiowpsecurity'), __('Settings', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_SETTINGS_MENU_SLUG, array(&$this, 'handle_settings_menu_rendering'));
|
102 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('User Accounts', 'aiowpsecurity'), __('User Accounts', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_USER_ACCOUNTS_MENU_SLUG, array(&$this, 'handle_user_accounts_menu_rendering'));
|
103 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('User Login', 'aiowpsecurity'), __('User Login', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_USER_LOGIN_MENU_SLUG, array(&$this, 'handle_user_login_menu_rendering'));
|
104 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Database Security', 'aiowpsecurity'), __('Database Security', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_DB_SEC_MENU_SLUG, array(&$this, 'handle_database_menu_rendering'));
|
105 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Filesystem Security', 'aiowpsecurity'), __('Filesystem Security', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_FILESYSTEM_MENU_SLUG, array(&$this, 'handle_filesystem_menu_rendering'));
|
106 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('WHOIS Lookup', 'aiowpsecurity'), __('WHOIS Lookup', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_WHOIS_MENU_SLUG, array(&$this, 'handle_whois_menu_rendering'));
|
107 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Blacklist Manager', 'aiowpsecurity'), __('Blacklist Manager', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_BLACKLIST_MENU_SLUG, array(&$this, 'handle_blacklist_menu_rendering'));
|
108 |
-
add_submenu_page(AIOWPSEC_MAIN_MENU_SLUG, __('Firewall', 'aiowpsecurity'), __('Firewall', 'aiowpsecurity') , AIOWPSEC_MANAGEMENT_PERMISSION, AIOWPSEC_FIREWALL_MENU_SLUG, array(&$this, 'handle_firewall_menu_rendering'));
|
109 |
-
do_action('aiowpsecurity_admin_menu_created');
|
110 |
-
}
|
111 |
-
|
112 |
-
function handle_dashboard_menu_rendering()
|
113 |
-
{
|
114 |
-
include_once('wp-security-dashboard-menu.php');
|
115 |
-
$this->dashboard_menu = new AIOWPSecurity_Dashboard_Menu();
|
116 |
-
}
|
117 |
-
|
118 |
-
function handle_settings_menu_rendering()
|
119 |
-
{
|
120 |
-
include_once('wp-security-settings-menu.php');
|
121 |
-
$this->settings_menu = new AIOWPSecurity_Settings_Menu();
|
122 |
-
|
123 |
-
}
|
124 |
-
|
125 |
-
function handle_user_accounts_menu_rendering()
|
126 |
-
{
|
127 |
-
include_once('wp-security-user-accounts-menu.php');
|
128 |
-
$this->user_accounts_menu = new AIOWPSecurity_User_Accounts_Menu();
|
129 |
-
}
|
130 |
-
|
131 |
-
function handle_user_login_menu_rendering()
|
132 |
-
{
|
133 |
-
include_once('wp-security-user-login-menu.php');
|
134 |
-
$this->user_login_menu = new AIOWPSecurity_User_Login_Menu();
|
135 |
-
}
|
136 |
-
|
137 |
-
function handle_database_menu_rendering()
|
138 |
-
{
|
139 |
-
include_once('wp-security-database-menu.php');
|
140 |
-
$this->db_security_menu = new AIOWPSecurity_Database_Menu();
|
141 |
-
}
|
142 |
-
|
143 |
-
function handle_filesystem_menu_rendering()
|
144 |
-
{
|
145 |
-
include_once('wp-security-filesystem-menu.php');
|
146 |
-
$this->filesystem_menu = new AIOWPSecurity_Filescan_Menu();
|
147 |
-
}
|
148 |
-
|
149 |
-
function handle_whois_menu_rendering()
|
150 |
-
{
|
151 |
-
include_once('wp-security-whois-menu.php');
|
152 |
-
$this->whois_menu = new AIOWPSecurity_WhoIs_Menu();
|
153 |
-
}
|
154 |
-
|
155 |
-
function handle_blacklist_menu_rendering()
|
156 |
-
{
|
157 |
-
include_once('wp-security-blacklist-menu.php');
|
158 |
-
$this->blacklist_menu = new AIOWPSecurity_Blacklist_Menu();
|
159 |
-
}
|
160 |
-
|
161 |
-
function handle_firewall_menu_rendering()
|
162 |
-
{
|
163 |
-
include_once('wp-security-firewall-menu.php');
|
164 |
-
$this->firewall_menu = new AIOWPSecurity_Firewall_Menu();
|
165 |
-
}
|
166 |
-
}//End of class
|
167 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.1/admin/wp-security-admin-menu.php
DELETED
@@ -1,93 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/* Parent class for all admin menu classes */
|
4 |
-
abstract class AIOWPSecurity_Admin_Menu
|
5 |
-
{
|
6 |
-
/**
|
7 |
-
* Shows postbox for settings menu
|
8 |
-
*
|
9 |
-
* @param string $id css ID for postbox
|
10 |
-
* @param string $title title of the postbox section
|
11 |
-
* @param string $content the content of the postbox
|
12 |
-
**/
|
13 |
-
function postbox_toggle($id, $title, $content)
|
14 |
-
{
|
15 |
-
//Always send string with translation markers in it
|
16 |
-
?>
|
17 |
-
<div id="<?php echo $id; ?>" class="postbox">
|
18 |
-
<div class="handlediv" title="Click to toggle"><br /></div>
|
19 |
-
<h3 class="hndle"><span><?php echo $title; ?></span></h3>
|
20 |
-
<div class="inside">
|
21 |
-
<?php echo $content; ?>
|
22 |
-
</div>
|
23 |
-
</div>
|
24 |
-
<?php
|
25 |
-
}
|
26 |
-
|
27 |
-
function postbox($title, $content)
|
28 |
-
{
|
29 |
-
//Always send string with translation markers in it
|
30 |
-
?>
|
31 |
-
<div class="postbox">
|
32 |
-
<h3><label for="title"><?php echo $title; ?></label></h3>
|
33 |
-
<div class="inside">
|
34 |
-
<?php echo $content; ?>
|
35 |
-
</div>
|
36 |
-
</div>
|
37 |
-
<?php
|
38 |
-
}
|
39 |
-
|
40 |
-
function show_msg_settings_updated()
|
41 |
-
{
|
42 |
-
echo '<div id="message" class="updated fade"><p><strong>';
|
43 |
-
_e('Settings successfully updated.','aiowpsecurity');
|
44 |
-
echo '</strong></p></div>';
|
45 |
-
}
|
46 |
-
|
47 |
-
static function show_msg_record_deleted_st()
|
48 |
-
{
|
49 |
-
echo '<div id="message" class="updated fade"><p><strong>';
|
50 |
-
_e('The selected record(s) deleted successfully!','aiowpsecurity');
|
51 |
-
echo '</strong></p></div>';
|
52 |
-
}
|
53 |
-
|
54 |
-
function show_msg_updated($msg)
|
55 |
-
{
|
56 |
-
echo '<div id="message" class="updated fade"><p><strong>';
|
57 |
-
echo $msg;
|
58 |
-
echo '</strong></p></div>';
|
59 |
-
}
|
60 |
-
|
61 |
-
static function show_msg_updated_st($msg)
|
62 |
-
{
|
63 |
-
echo '<div id="message" class="updated fade"><p><strong>';
|
64 |
-
echo $msg;
|
65 |
-
echo '</strong></p></div>';
|
66 |
-
}
|
67 |
-
|
68 |
-
function show_msg_error($error_msg)
|
69 |
-
{
|
70 |
-
echo '<div id="message" class="error"><p><strong>';
|
71 |
-
echo $error_msg;
|
72 |
-
echo '</strong></p></div>';
|
73 |
-
}
|
74 |
-
|
75 |
-
static function show_msg_error_st($error_msg)
|
76 |
-
{
|
77 |
-
echo '<div id="message" class="error"><p><strong>';
|
78 |
-
echo $error_msg;
|
79 |
-
echo '</strong></p></div>';
|
80 |
-
}
|
81 |
-
|
82 |
-
function start_buffer()
|
83 |
-
{
|
84 |
-
ob_start();
|
85 |
-
}
|
86 |
-
|
87 |
-
function end_buffer_and_collect()
|
88 |
-
{
|
89 |
-
$output = ob_get_contents();
|
90 |
-
ob_end_clean();
|
91 |
-
return $output;
|
92 |
-
}
|
93 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tags/1.1/admin/wp-security-blacklist-menu.php
DELETED
@@ -1,332 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class AIOWPSecurity_Blacklist_Menu extends AIOWPSecurity_Admin_Menu
|
4 |
-
{
|
5 |
-
var $menu_page_slug = AIOWPSEC_BLACKLIST_MENU_SLUG;
|
6 |
-
|
7 |
-
/* Specify all the tabs of this menu in the following array */
|
8 |
-
var $menu_tabs = array(
|
9 |
-
'tab1' => 'Ban Users',
|
10 |
-
'tab2' => 'SPAM Comments IP Monitoring',
|
11 |
-
);
|
12 |
-
|
13 |
-
var $menu_tabs_handler = array(
|
14 |
-
'tab1' => 'render_tab1',
|
15 |
-
'tab2' => 'render_tab2',
|
16 |
-
);
|
17 |
-
|
18 |
-
function __construct()
|
19 |
-
{
|
20 |
-
$this->render_menu_page();
|
21 |
-
}
|
22 |
-
|
23 |
-
function get_current_tab()
|
24 |
-
{
|
25 |
-
$tab_keys = array_keys($this->menu_tabs);
|
26 |
-
$tab = isset( $_GET['tab'] ) ? $_GET['tab'] : $tab_keys[0];
|
27 |
-
return $tab;
|
28 |
-
}
|
29 |
-
|
30 |
-
/*
|
31 |
-
* Renders our tabs of this menu as nav items
|
32 |
-
*/
|
33 |
-
function render_menu_tabs()
|
34 |
-
{
|
35 |
-
$current_tab = $this->get_current_tab();
|
36 |
-
|
37 |
-
echo '<h2 class="nav-tab-wrapper">';
|
38 |
-
foreach ( $this->menu_tabs as $tab_key => $tab_caption )
|
39 |
-
{
|
40 |
-
$active = $current_tab == $tab_key ? 'nav-tab-active' : '';
|
41 |
-
echo '<a class="nav-tab ' . $active . '" href="?page=' . $this->menu_page_slug . '&tab=' . $tab_key . '">' . $tab_caption . '</a>';
|
42 |
-
}
|
43 |
-
echo '</h2>';
|
44 |
-
}
|
45 |
-
|
46 |
-
/*
|
47 |
-
* The menu rendering goes here
|
48 |
-
*/
|
49 |
-
function render_menu_page()
|
50 |
-
{
|
51 |
-
$tab = $this->get_current_tab();
|
52 |
-
?>
|
53 |
-
<div class="wrap">
|
54 |
-
<div id="poststuff"><div id="post-body">
|
55 |
-
<?php
|
56 |
-
$this->render_menu_tabs();
|
57 |
-
//$tab_keys = array_keys($this->menu_tabs);
|
58 |
-
call_user_func(array(&$this, $this->menu_tabs_handler[$tab]));
|
59 |
-
?>
|
60 |
-
</div></div>
|
61 |
-
</div><!-- end of wrap -->
|
62 |
-
<?php
|
63 |
-
}
|
64 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|