├── CHANGELOG ├── LICENSE.txt ├── README ├── bfstop.php ├── bfstop.xml ├── deploy.sh ├── helpers ├── crypto.php ├── db.php ├── htaccess.php ├── index.html ├── ipaddress.php ├── log.php └── notify.php ├── index.html ├── language ├── ca-ES │ ├── ca-ES.plg_system_bfstop.ini │ ├── ca-ES.plg_system_bfstop.sys.ini │ └── index.html ├── de-DE │ ├── de-DE.plg_system_bfstop.ini │ ├── de-DE.plg_system_bfstop.sys.ini │ └── index.html ├── en-GB │ ├── en-GB.plg_system_bfstop.ini │ ├── en-GB.plg_system_bfstop.sys.ini │ └── index.html ├── es-ES │ ├── es-ES.plg_system_bfstop.ini │ ├── es-ES.plg_system_bfstop.sys.ini │ └── index.html ├── fr-FR │ ├── fr-FR.plg_system_bfstop.ini │ ├── fr-FR.plg_system_bfstop.sys.ini │ └── index.html ├── index.html ├── it-IT │ ├── it-IT.plg_system_bfstop.ini │ └── it-IT.plg_system_bfstop.sys.ini ├── nl-NL │ ├── index.html │ ├── nl-NL.plg_system_bfstop.ini │ └── nl-NL.plg_system_bfstop.sys.ini ├── pt-BR │ ├── index.html │ ├── pt-BR.plg_system_bfstop.ini │ └── pt-BR.plg_system_bfstop.sys.ini ├── pt-PT │ ├── index.html │ ├── pt-PT.plg_system_bfstop.ini │ └── pt-PT.plg_system_bfstop.sys.ini └── ru-RU │ ├── index.html │ ├── ru-RU.plg_system_bfstop.ini │ └── ru-RU.plg_system_bfstop.sys.ini ├── sql ├── index.html ├── install.mysql.utf8.sql ├── uninstall.mysql.utf8.sql └── updates │ ├── 0.9.10.sql │ ├── 0.9.11.sql │ ├── 0.9.5.sql │ ├── 0.9.6.sql │ ├── 0.9.7.sql │ ├── 0.9.8.sql │ ├── 0.9.9.sql │ ├── 1.0.0.sql │ ├── 1.0.1.sql │ ├── 1.2.0.sql │ ├── 1.3.0.sql │ ├── 1.4.0.sql │ ├── 1.4.2.sql │ ├── 1.4.3.sql │ └── index.html ├── unittests └── cryptotest.php ├── update.xml └── updatescript.php /CHANGELOG: -------------------------------------------------------------------------------- 1 | 1.5.2 (2024-02-18) 2 | - Note: Only component changes, no plugin changes 3 | - Fix errors for PHP < 8 4 | 5 | 1.5.1 (2024-02-14) 6 | - Note: Only component changes, no plugin changes 7 | - Fix error in admin views discovered after release of 1.5.0 8 | 9 | 1.5.0 (2024-02-14) 10 | - Fix bugs (php 8.x issues, ACL options display) 11 | - IP address and subnet validation 12 | - Controls for overriding number of shown elements in lists 13 | - Joomla 5 compatibility 14 | - Hints to go to plugin settings on installation and in settings view 15 | 16 | 1.4.5/6 (2023-05-15) 17 | - Fix server errors in backend 18 | - Fix deprecation warning in server type check 19 | - Remove copyright header dates 20 | 21 | 1.4.4 (2021-07-26) 22 | - No changes to bfstop plugin, just keeping plugin at same version as component 23 | 24 | 1.4.3 (2021-04-28) 25 | - Fix allowlist name in SQL (un)install script + update to fix situation for everyone 26 | 27 | 1.4.2 (2021-04-20) 28 | - Joomla 4 Compatibility 29 | - Language: Whitelist -> Allow list (en/de) 30 | - Component: 31 | - Default sort order descending by date 32 | - Warn if plugin is not enabled 33 | - Plugin: 34 | - Less verbose log output where unnecessary 35 | - Fix problems with usernames > 25 characters 36 | 37 | 1.4.1 (2017-02-01) 38 | - JED checker error fixes 39 | 40 | 1.4.0 (2017-02-01) 41 | - Blocking via .htaccess 42 | - New method for determining client IP to support load balancers/proxies 43 | - IPv6 fixes (IPv6 subnet masks not yet supported) 44 | - mysql compatibility 45 | - php 7 compatibility 46 | 47 | 1.3.0 (2014-03-23) 48 | - Inclusion guard fixes 49 | 50 | 1.3.0beta1 (2014-03-15) 51 | - Allow showing IP address in blocked message 52 | - Show hint to use reset password functionality 53 | - Prevent unrelated entries from showing up in logfile 54 | 55 | 1.2.0 (2014-01-07) 56 | - fix language problems 57 | - only do pruning once a day (if enabled) 58 | 59 | 1.2.0beta1 (2013-12-31) 60 | - IP subnet range support for whitelisting&blocking 61 | - Multiple notification recipients (no more awkward choice between which input to consider for email addresses - all inputs where something is specified are taken into consideration; multiple email addresses can be specified separated by a semicolon; and a user group can be chosen to be notified) 62 | - Several fixes (language, whitelist/ block list editing) 63 | 64 | 1.1.1 (2013-12-05) 65 | - Fix installation SQL error 66 | - Correctly update package instead of component and plugin separately 67 | 68 | 1.1.0 (2013-12-04) 69 | - Adds it-IT translations - thanks to Stefano Buscaglia! 70 | - Updated translations (ca-ES, nl-NL, fr-FR) - thanks to maintainers! 71 | - whitelist (manageable via backend) 72 | - adaptive delay 73 | - option for automatic pruning of old failed log entries 74 | - link to whois information for failed&blocked IP addresses in backend 75 | - use more reliable method to determine clients' IP address 76 | - some other small fixes 77 | 78 | 1.0.0 (2013-08-18) 79 | - fix error when php compiled without openssl, using mcrypt or mt_rand instead 80 | - only create unblock token if mail really sent out 81 | - Updated translations (ca-ES, es-ES, nl-NL, fr-FR) 82 | - Adds ru-RU translations (thanks to Raven) 83 | 84 | 1.0.0beta1 (2013-08-05) 85 | - Possibility to send HTTP status code 403 instead of 200 in case of block 86 | - fix Joomla 3.1.4 compatibility 87 | - fix php 5.2 compatibility issue introduced with 0.9.11 88 | - fix issue with display of permanent blocks 89 | 90 | 0.9.11 (2013-06-23) 91 | - Improves blocked list status output 92 | - Common log setting with configurable log levels 93 | - Adds ca-ES translations (thanks to nouespai) 94 | - Adds fr-FR translations (thanks to Flying_Lolo) 95 | - Adds nl-NL translations (thanks to Agrusoft) 96 | - Adds es-ES translations (thanks to Aimagen) 97 | - Optionally enable plugin only for backend or frontend 98 | - After a configurable number of blocks the block duration can be set to permanent on the next block 99 | - Update via automatic Joomla! update mechanism 100 | - Warning if there is a user with username 'admin' 101 | - View failed login attempts in backend 102 | - Allow viewing and editing block duration for each IP banned IP address 103 | - Ability to test the notification 104 | - improves Joomla! 3.x table layout 105 | 106 | 0.9.10.2 (2013-05-28) 107 | - fix for issue #12 "bfstop doesn't block", where a block duration of 108 | unlimited would always lead to no IP being blocked 109 | 110 | 0.9.10.1 (2013-05-17) 111 | - fix unblock by token link for administration login 112 | - fix Joomla! 3 compatibility 113 | - fix DB query problem introduced with refactoring 114 | 115 | 0.9.10 (2013-05-13) 116 | - adds pt-PT and pt-BR translations (thanks to solrac!) 117 | - fixes a problem that no IP addresses were blocked when the MySQL timezone 118 | and the PHP timezone were not the same 119 | - adds a table to display and allow unblocking of the currently blocked IP 120 | addresses to the backend 121 | - adds the possibility to send an email to a user, in case login was tried 122 | for an existing user, to allow him to unblock his IP. 123 | - a successful login now resets the failed login count 124 | - disables "remaining attempts" hint when blocking is disabled 125 | - adapts default block interval to 1 day 126 | 127 | 0.9.9 (2013-04-05) 128 | - adds a configurable "automatic unblock time", i.e. a time after which an IP 129 | address will be automatically allowed to do further login attempts. 130 | this replaces the previous "block interval" 131 | Note (added 2013-04-20): The default value for the block duration was set 132 | to 30 minutes with the introduction of this version; meaning that the 133 | default behavior of the plugin changed from blocking an IP address forever 134 | to blocking it only 30 minutes, and also to considering only the failed 135 | login attempts from those last 30 minutes; meaning the number of attempts 136 | allowed for attackers was drastically increased. The default values will 137 | be adjusted with the next version to allow less attempts. 138 | - implements optional notification about the number of remaining login 139 | attempts before the IP address will be blocked 140 | 141 | 0.9.8 (2013-01-23) 142 | - corrects small problems with logging which prevented previous versions 143 | to be installable on Joomla! 3.0. This should now be possible. In case you 144 | look at the log and wonder about some deprecation warnings - it seems that 145 | some functions were deprecated without providing replacement yet... 146 | 147 | 0.9.7 (2013-01-15) 148 | - corrects the plugin name (meaning you have to uninstall previous versions 149 | manually! if this is the first version you installed - which is very likely, 150 | since no version before has been published to JED - there's nothing 151 | special to do) 152 | - corrects problems with not loaded language files during install, 153 | causing a text like PLG_BFSTOP_DESC instead of a meaningful description 154 | - adds an option to en- or disable logging (some internal messages about what 155 | the plugin is doing, written to a file), disables it by default 156 | 157 | 0.9.6 (2013-01-06) 158 | - removes password from failed login entries in the database to prevent 159 | information disclosure 160 | 161 | 0.9.5 (2012-12-06) 162 | - Version initially released to the public 163 | - fixes uninstall script previusly causing an error 164 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | Brute Force Stop Plugin (plg_system_bfstop) 2 | Joomla System Plugin 3 | 4 | This is the plugin part of the Brute Force Stop Joomla! Extension package. 5 | 6 | For detailed information, as well as instructions on how to download, install 7 | and configure it, please browse to 8 | https://github.com/codeling/bfstop/wiki 9 | 10 | For information on what changed in recent versions, see the CHANGELOG file 11 | 12 | If you find any issues, please report them at 13 | https://github.com/codeling/bfstop/issues 14 | 15 | If you are interested in the source code, or want to contribute, the 16 | repository can be found under 17 | https://github.com/codeling/bfstop 18 | 19 | For any further questions, don't hesitate to contact me under 20 | bfstop@bfroehler.info 21 | 22 | -------------------------------------------------------------------------------- /bfstop.php: -------------------------------------------------------------------------------- 1 | params->get($paramName, $default); 33 | } 34 | function getIntParam($paramName, $default) 35 | { 36 | return (int)$this->params->get($paramName, $default); 37 | } 38 | function getStringParam($paramName, $default) 39 | { 40 | return $this->params->get($paramName, $default); 41 | } 42 | 43 | function __construct(& $subject, $config) 44 | { 45 | parent::__construct($subject, $config); 46 | } 47 | 48 | static function endsWith($haystack, $needle) 49 | { 50 | $length = strlen($needle); 51 | if ($length == 0) 52 | { 53 | return true; 54 | } 55 | return (substr($haystack, -$length) === $needle); 56 | } 57 | 58 | function getUnblockLink($id) 59 | { 60 | $token = $this->mydb->getNewUnblockToken($id, 61 | BFStopTokenGenerator::getToken($this->logger)); 62 | $link = 'index.php?option=com_bfstop'. 63 | '&view=tokenunblock'. 64 | '&token='.$token; 65 | $linkBase = Uri::base(); 66 | // strip off an eventual administrator - tokenunblock is a site view 67 | $adminDir = 'administrator/'; 68 | if (self::endsWith($linkBase, $adminDir)) 69 | { 70 | $linkBase = substr($linkBase, 0, 71 | strlen($linkBase)-strlen($adminDir)); 72 | } 73 | return $linkBase.$link; 74 | } 75 | 76 | function getPasswordResetLink() 77 | { 78 | $link = 'index.php?option=com_users&view=reset'; 79 | return Route::_($link); 80 | } 81 | 82 | function block($logEntry, $duration) 83 | { 84 | $blockEnabled = $this->getBoolParam('blockEnabled', true); 85 | if (!$blockEnabled) { 86 | return; 87 | } 88 | // if the IP address is blocked we actually shouldn't be here in 89 | // the first place I guess, but just to make sure 90 | if ($this->mydb->isIPBlocked($logEntry->ipaddress)) 91 | { 92 | $this->logger->log('IP '.$logEntry->ipaddress. 93 | ' is already blocked!', Log::ERROR); 94 | return; 95 | } 96 | $maxBlocksBefore = $this->getIntParam('maxBlocksBefore', 0); 97 | if ($maxBlocksBefore > 0) 98 | { 99 | $numberOfPrevBlocks = $this->mydb-> 100 | getNumberOfPreviousBlocks($logEntry->ipaddress); 101 | $this->logger->log('Number of previous blocks for IP='. 102 | $logEntry->ipaddress.': '.$numberOfPrevBlocks, 103 | Log::DEBUG); 104 | if ($numberOfPrevBlocks >= $maxBlocksBefore) 105 | { 106 | $this->logger->log('Number of previous blocks '. 107 | 'exceeds configured maximum, blocking '. 108 | 'permanently!', Log::INFO); 109 | $duration = 0; 110 | } 111 | } 112 | $usehtaccess = $this->getBoolParam('useHtaccess', false); 113 | $htaccessPath = $this->getStringParam('htaccessPath', JPATH_ROOT); 114 | if ($htaccessPath === "") 115 | { 116 | $this->logger->log('htaccessPath empty, setting it to '.JPATH_ROOT, Log::INFO); 117 | $htaccessPath = JPATH_ROOT; 118 | } 119 | $id = $this->mydb->blockIP($logEntry, $duration, $usehtaccess, $htaccessPath); 120 | 121 | $this->logger->log('Inserted IP address '.$logEntry->ipaddress. 122 | ' into block list', Log::INFO); 123 | // send email notification to admin 124 | $this->notifier->blockedNotifyAdmin($logEntry, 125 | $this->getRealDurationFromDBDuration($duration), 126 | $this->getIntParam('notifyBlockedNumber', 5)); 127 | if ($this->getBoolParam('notifyBlockedUser', false)) 128 | { 129 | $userEmail = $this->mydb->getUserEmailByName( 130 | $logEntry->username); 131 | if ($userEmail != null) 132 | { 133 | $this->logger->log("Existing user '". 134 | $logEntry->username. 135 | "' was blocked, sending unblock ". 136 | "instructions", 137 | Log::INFO); 138 | $this->notifier->sendUnblockMail($userEmail, 139 | $this->getUnblockLink($id)); 140 | } else { 141 | $this->logger->log('Unknown user ('. 142 | $logEntry->username. 143 | ') blocked, not sending any '. 144 | 'notifications', Log::DEBUG); 145 | } 146 | } 147 | } 148 | 149 | function getRealDurationFromDBDuration($duration) 150 | { 151 | return ($duration <= 0) 152 | ? BFStopDBHelper::$UNLIMITED_DURATION 153 | : $duration; 154 | } 155 | 156 | function blockIfTooManyAttempts($logEntry) 157 | { 158 | $blockInterval = $this->getIntParam('blockDuration', 159 | BFStopNotifier::$ONE_DAY); 160 | $maxNumber = $this->getIntParam('blockNumber', 15); 161 | $checkInterval = $this->getRealDurationFromDBDuration( 162 | $this->getIntParam('checkInterval', BFStopNotifier::$ONE_DAY)); 163 | if ($this->mydb->getNumberOfFailedLogins( 164 | $checkInterval, 165 | $logEntry->ipaddress, 166 | $logEntry->logtime) < $maxNumber) { 167 | return; 168 | } 169 | $this->block($logEntry, $blockInterval); 170 | } 171 | 172 | 173 | private function init() 174 | { 175 | $this->logger = new BFStopLogger($this->getIntParam( 176 | 'logLevel', BFStopLogger::Disabled)); 177 | $this->mydb = new BFStopDBHelper($this->logger); 178 | $this->notifier = new BFStopNotifier($this->logger, $this->mydb, 179 | $this->params->get('emailaddress', ''), 180 | $this->getIntParam('userID', -1), 181 | $this->getIntParam('userGroup', -1), 182 | $this->getBoolParam('groupNotificationEnabled', false)); 183 | $this->myapp = Factory::getApplication(); 184 | } 185 | 186 | function notifyOfRemainingAttempts($logEntry) 187 | { 188 | // remaining attempts notification only makes sense if we 189 | // actually block 190 | $notifyRemaining = $this->getBoolParam('notifyRemainingAttempts', 191 | false); 192 | $passwordReminder = $this->getIntParam('notifyUsePasswordReminder', 193 | -1); 194 | if ( !$this->getBoolParam('blockEnabled', true) || 195 | (!$notifyRemaining && 196 | !($passwordReminder == -1 || $passwordReminder > 0))) 197 | { 198 | // avoid database access if reminders are disabled anyway 199 | return; 200 | } 201 | $allowedAttempts = $this->getIntParam('blockNumber', 15); 202 | $checkInterval = $this->getRealDurationFromDBDuration( 203 | $this->getIntParam('checkInterval', BFStopNotifier::$ONE_DAY)); 204 | $numberOfFailedLogins = $this->mydb->getNumberOfFailedLogins( 205 | $checkInterval, 206 | $logEntry->ipaddress, $logEntry->logtime); 207 | $attemptsLeft = $allowedAttempts - $numberOfFailedLogins; 208 | $this->logger->log("Failed logins: $numberOfFailedLogins; ". 209 | "allowed: $allowedAttempts", Log::DEBUG); 210 | if ($attemptsLeft < 0) { 211 | $this->logger->log('Remaining attempts below zero ('. 212 | $attemptsLeft.'), that should not happen. ', 213 | Log::ERROR); 214 | return; 215 | } 216 | if ($notifyRemaining && $attemptsLeft > 0) { 217 | $this->myapp->enqueueMessage(Text::sprintf( 218 | "PLG_SYSTEM_BFSTOP_X_ATTEMPTS_LEFT", $attemptsLeft), 219 | 'warning'); 220 | } 221 | if ($passwordReminder == -1 || $attemptsLeft <= $passwordReminder) 222 | { 223 | $resetLink = $this->getPasswordResetLink(); 224 | $this->myapp->enqueueMessage(Text::sprintf( 225 | "PLG_SYSTEM_BFSTOP_PASSWORD_RESET_RECOMMENDED", 226 | $resetLink), 'warning'); 227 | } 228 | } 229 | 230 | public function isEnabledForCurrentOrigin() 231 | { 232 | $enabledFor = $this->getIntParam('enabledForOrigin', 3); 233 | return ( ($enabledFor & ($this->myapp->getClientId()+1)) != 0); 234 | } 235 | 236 | public function determineDelayDuration() 237 | { 238 | $delayDuration = $this->getIntParam('delayDuration', 0); 239 | $adaptive = $this->getBoolParam('adaptiveDelay', false); 240 | if ($adaptive) 241 | { 242 | $maxDelay = $this->getIntParam('adaptiveDelayMax', 60); 243 | $lowThreshold = $this->getIntParam('adaptiveDelayThresholdMin', 50); 244 | $highThreshold = $this->getIntParam('adaptiveDelayThresholdMax', 1000); 245 | if ($lowThreshold > $highThreshold) 246 | { 247 | $tmp = $lowThreshold; 248 | $lowThreshold = $highThreshold; 249 | $highThreshold = $tmp; 250 | $this->logger->log('Lower threshold is configured to a smaller value than higher threshold!'. 251 | ' Please correct! Swapping the values for now!', 252 | Log::WARNING); 253 | } 254 | if ($lowThreshold == $highThreshold) 255 | { 256 | $this->logger->log('Lower and higher threshold cannot be configured to the same value!'. 257 | ' Either disable adaptive delay and use the delay duration instead, or'. 258 | ' set the thresholds to reasonable values! Using delay duration for now', 259 | Log::WARNING); 260 | return $delayDuration; 261 | } 262 | 263 | $recentFailed = $this->mydb->getFailedLoginsInLastHour(); 264 | $recentFailed = min($recentFailed, $highThreshold); 265 | if ($recentFailed > $lowThreshold) 266 | { 267 | $delay = $delayDuration + ($recentFailed-$lowThreshold) 268 | * ($maxDelay-$delayDuration) 269 | / ($highThreshold-$lowThreshold); 270 | return $delay; 271 | } 272 | } 273 | return $delayDuration; 274 | } 275 | 276 | public function onUserLoginFailure($user, $options=null) 277 | { 278 | $this->init(); 279 | if (!$this->isEnabledForCurrentOrigin()) 280 | { 281 | return; 282 | } 283 | $ipAddress = getIPAddr($this->logger); 284 | if (empty($ipAddress) || $ipAddress === '') 285 | { 286 | $this->logger->log('Empty IP address!', Log::ERROR); 287 | return; 288 | } 289 | if ($this->mydb->isIPOnAllowList($ipAddress)) 290 | { 291 | $this->logger->log('Ignoring failed login by allowed address '.$ipAddress, Log::INFO); 292 | return; 293 | } 294 | CMSPlugin::loadLanguage('plg_system_bfstop'); 295 | $delayDuration = $this->determineDelayDuration(); 296 | if ($delayDuration != 0) 297 | { 298 | sleep($delayDuration); 299 | } 300 | 301 | $logEntry = new stdClass(); 302 | $logEntry->id = null; 303 | $logEntry->ipaddress = $ipAddress; 304 | $logEntry->logtime = date("Y-m-d H:i:s"); 305 | $logEntry->username = mb_strimwidth($user['username'], 0, 150, "..."); 306 | $logEntry->origin = $this->myapp->getClientId(); 307 | 308 | $this->logger->log('Failed login attempt from IP address '. 309 | $logEntry->ipaddress, Log::DEBUG); 310 | 311 | // insert into log: 312 | $this->mydb->insertFailedLogin($logEntry); 313 | 314 | $this->notifyOfRemainingAttempts($logEntry); 315 | 316 | $maxNumber = $this->getIntParam('notifyFailedNumber', 0); 317 | $this->notifier->failedLogin($logEntry, $maxNumber); 318 | $this->blockIfTooManyAttempts($logEntry); 319 | } 320 | 321 | public function OnUserLogin($user, $options) 322 | { 323 | $this->init(); 324 | if (!$this->isEnabledForCurrentOrigin()) 325 | { 326 | return; 327 | } 328 | $info = new stdClass(); 329 | $info->ipaddress = getIPAddr($this->logger); 330 | $info->username = $user['username']; 331 | $this->logger->log('Successful login by '.$info->username. 332 | ' from IP address '.$info->ipaddress, Log::DEBUG); 333 | $this->mydb->successfulLogin($info); 334 | } 335 | 336 | function isUnblockRequest() 337 | { 338 | $input = $this->myapp->input; 339 | $view = $input->getString('view', ''); 340 | $token = $input->getString('token', ''); 341 | $result = (strcmp($view, "tokenunblock") == 0 && 342 | $this->mydb->unblockTokenExists($token)); 343 | if ($result) { 344 | $this->logger->log('Seeing valid unblock token ('. 345 | $token.'), letting the request pass through '. 346 | 'to com_bfstop', 347 | Log::INFO); 348 | } 349 | return $result; 350 | } 351 | 352 | public function onAfterInitialise() 353 | { 354 | $this->init(); 355 | if (!$this->isEnabledForCurrentOrigin()) 356 | { 357 | return; 358 | } 359 | $purgeAge = $this->getIntParam('deleteOld', 0); 360 | if ($purgeAge > 0) 361 | { 362 | $purgeInterval = 86400; // = 24*60*60 => one day 363 | $lastPurge = $this->params->get('lastPurge', 0); 364 | $now = time(); 365 | if ($now > ($lastPurge + $purgeInterval)) 366 | { 367 | $this->mydb->purgeOldEntries($purgeAge); 368 | $this->params->set('lastPurge', $now); 369 | $this->mydb->saveParams($this->params); 370 | } 371 | } 372 | $ipaddress = getIPAddr($this->logger); 373 | if ($this->mydb->isIPOnAllowList($ipaddress)) 374 | { 375 | return; 376 | } 377 | if ($this->mydb->isIPBlocked($ipaddress)) 378 | { 379 | $this->logger->log("Blocked IP Address $ipaddress ". 380 | "trying to access ". 381 | $this->mydb->getClientString( 382 | $this->myapp->getClientId()), 383 | Log::INFO ); 384 | if ($this->isUnblockRequest()) 385 | { 386 | return; 387 | } 388 | CMSPlugin::loadLanguage('plg_system_bfstop'); 389 | if ($this->getBoolParam('useHttpError', false)) 390 | { 391 | header('HTTP/1.0 403 Forbidden'); 392 | } 393 | $message = $this->params->get('blockedMessage', 394 | Text::_('PLG_SYSTEM_BFSTOP_BLOCKED_IP_MESSAGE')); 395 | 396 | if ($this->getBoolParam('blockedMsgShowIP', false)) 397 | { 398 | $message .= " ".Text::sprintf('PLG_SYSTEM_BFSTOP_BLOCKED_CLIENT_IP', $ipaddress); 399 | } 400 | echo $message; 401 | $this->myapp->close(); 402 | } 403 | } 404 | } 405 | -------------------------------------------------------------------------------- /bfstop.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | plg_system_bfstop 4 | Bernhard Froehler 5 | PLG_SYSTEM_BFSTOP_DESC 6 | November 2012 7 | Copyright (C) Bernhard Froehler 8 | GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html 9 | bfstop@bfroehler.info 10 | https://github.com/codeling/bfstop 11 | 1.5.2 12 | 13 | bfstop.php 14 | index.html 15 | helpers 16 | language 17 | sql 18 | 19 | 20 | language/ca-ES/ca-ES.plg_system_bfstop.ini 21 | language/ca-ES/ca-ES.plg_system_bfstop.sys.ini 22 | language/de-DE/de-DE.plg_system_bfstop.ini 23 | language/de-DE/de-DE.plg_system_bfstop.sys.ini 24 | language/en-GB/en-GB.plg_system_bfstop.ini 25 | language/en-GB/en-GB.plg_system_bfstop.sys.ini 26 | language/es-ES/es-ES.plg_system_bfstop.ini 27 | language/es-ES/es-ES.plg_system_bfstop.sys.ini 28 | language/fr-FR/fr-FR.plg_system_bfstop.ini 29 | language/fr-FR/fr-FR.plg_system_bfstop.sys.ini 30 | language/it-IT/it-IT.plg_system_bfstop.ini 31 | language/it-IT/it-IT.plg_system_bfstop.sys.ini 32 | language/nl-NL/nl-NL.plg_system_bfstop.ini 33 | language/nl-NL/nl-NL.plg_system_bfstop.sys.ini 34 | language/ru-RU/ru-RU.plg_system_bfstop.ini 35 | language/ru-RU/ru-RU.plg_system_bfstop.sys.ini 36 | 37 | 38 | 39 | sql/install.mysql.utf8.sql 40 | 41 | 42 | 43 | 44 | sql/uninstall.mysql.utf8.sql 45 | 46 | 47 | 48 | 49 | sql/updates 50 | 51 | 52 | 53 | 54 |
55 | 59 | 62 | 63 | 64 | 65 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 |
82 |
83 | 86 | 89 | 92 | 93 | 94 | 95 | 98 | 101 | 102 | 103 | 104 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 |
127 |
128 | 131 | 132 | 133 | 134 | 135 | 138 | 139 | 140 | 141 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 170 | 171 | 172 | 173 | 176 | 177 | 178 | 179 | 180 | 181 | 184 | 187 | 188 | 189 | 190 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 202 | 203 | 204 | 205 | 209 | 212 |
213 |
214 | 218 | 221 | 222 | 223 | 224 | 225 | 229 | 233 | 237 |
238 |
239 |
240 | updatescript.php 241 | 242 | https://bfstop.bfroehler.info/update.xml 243 | 244 |
245 | -------------------------------------------------------------------------------- /deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Simple deployment script. Can create a zip file from all 4 | # files or can copy to a Joomla! folder (to update an 5 | # existing installation) 6 | # 7 | # set to the joomla directory you want to deploy to: 8 | dstdir= 9 | 10 | # internal variables to be updated when files are added: 11 | extname=bfstop 12 | sqlfiles="sql" 13 | srcfiles="$extname.php helpers $extname.xml $sqlfiles updatescript.php index.html" 14 | langfiles="language" 15 | docs="CHANGELOG LICENSE.txt README" 16 | plgtype="system" 17 | langs="de-DE en-GB" 18 | version=1.5.2 19 | 20 | if [ "$1" == "zip" ] 21 | then 22 | zip -r $extname-$version.zip $srcfiles $docs $langfiles 23 | exit 24 | fi 25 | 26 | if [ "$1" != "" ] 27 | then 28 | dstdir=$1 29 | fi 30 | 31 | if [ "$dstdir" == "" ] 32 | then 33 | echo "You have to set dstdir variable first (to the joomla directory you want to deploy to)" 34 | exit 35 | fi 36 | 37 | cp -r $srcfiles $dstdir/plugins/$plgtype/$extname/ 38 | 39 | for lang in $langs 40 | do 41 | cp language/$lang/* $dstdir/administrator/language/$lang/ 42 | done 43 | 44 | -------------------------------------------------------------------------------- /helpers/crypto.php: -------------------------------------------------------------------------------- 1 | log('Using OpenSSL random number generator for token', Log::DEBUG); 38 | $token = openssl_random_pseudo_bytes($length, $strongCrypto); 39 | if (!$strongCrypto) 40 | { 41 | $logger->log('Your servers openssl implementation does not use strong cryptographics!', Log::WARNING); 42 | } 43 | } 44 | if (!$strongCrypto && 45 | function_exists('mcrypt_create_iv') && 46 | (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN' || 47 | version_compare(phpversion(), '5.3.7') > 0) ) 48 | { 49 | $logger->log('Using mcrypt for token', Log::DEBUG); 50 | $seed = mcrypt_create_iv($length, MCRYPT_DEV_URANDOM); 51 | if ($seed != false && strlen($seed) == $length) { 52 | $token = $seed; 53 | } 54 | } 55 | if (strcmp($token, '') == 0) { 56 | $logger->log('The php version on your server has neither openssl nor mcrypt support! Therefore we need to fall back to insecure way of producing tokens! Please consider switching to a php version with built-in openssl support, or enabling the mcrypt module (note that on windows, only php versions >= 5.3.7 come with mcrypt modules providing the required level of randomness)!', Log::WARNING); 57 | $token = self::getRandToken($length); 58 | } 59 | return sha1($token); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /helpers/db.php: -------------------------------------------------------------------------------- 1 | db = Factory::getDbo(); 32 | $this->logger = $logger; 33 | } 34 | 35 | public static function checkDBError($db, $logger) { 36 | if (method_exists('db', 'getErrorNum')) 37 | { 38 | $errNum = $db->getErrorNum(); 39 | if ($errNum != 0) { 40 | $errMsg = $db->getErrorMsg(); 41 | $this->logger->log("Database error (#$errNum) occured: $errMsg", Log::ERROR); 42 | } 43 | } 44 | } 45 | 46 | public function myCheckDBError() 47 | { 48 | BFStopDBHelper::checkDBError($this->db, $this->logger); 49 | } 50 | 51 | public function eventsInInterval( 52 | $interval, 53 | $time, 54 | $additionalWhere, 55 | $table='#__bfstop_failedlogin', 56 | $timecol='logtime') 57 | { 58 | try 59 | { 60 | if ($interval <= 0) 61 | { 62 | $this->logger->log("Invalid interval $interval"); 63 | } 64 | // check if in the last $interval hours, $number incidents have occured already: 65 | $sql = "SELECT COUNT(*) FROM ".$table." t ". 66 | "WHERE t.".$timecol. 67 | " between DATE_SUB(". 68 | $this->db->quote($time). 69 | ", INTERVAL $interval MINUTE) AND ". 70 | $this->db->quote($time). 71 | " ".$additionalWhere; 72 | $this->db->setQuery($sql); 73 | $numberOfEvents = ((int)$this->db->loadResult()); 74 | $this->myCheckDBError(); 75 | return $numberOfEvents; 76 | } 77 | catch (Exception $e) 78 | { 79 | $this->logger->log("Database exception occured: ".$e->getMessage(), Log::ERROR); 80 | return 0; 81 | } 82 | } 83 | 84 | public function getNumberOfFailedLogins($interval, $ipaddress, $logtime) 85 | { 86 | return $this->eventsInInterval($interval, $logtime, 87 | 'AND ipaddress = '.$this->db->quote($ipaddress). 88 | ' AND handled = 0', 89 | '#__bfstop_failedlogin', 90 | 'logtime'); 91 | } 92 | 93 | public function getFailedLoginsInLastHour() 94 | { 95 | try 96 | { 97 | $nowDateTime = date("Y-m-d H:i:s"); 98 | $sql = "SELECT COUNT(*) FROM #__bfstop_failedlogin ". 99 | "WHERE logtime > DATE_SUB(". 100 | $this->db->quote($nowDateTime). 101 | ", INTERVAL 1 HOUR)"; 102 | $this->db->setQuery($sql); 103 | $numRows = $this->db->loadResult(); 104 | $this->myCheckDBError(); 105 | return $numRows; 106 | } 107 | catch (Exception $e) 108 | { 109 | $this->logger->log("Database exception occured: ".$e->getMessage(), Log::ERROR); 110 | return 0; 111 | } 112 | } 113 | 114 | public function getNumberOfPreviousBlocks($ipaddress) 115 | { 116 | $interval = self::$UNLIMITED_DURATION; 117 | $logtime = date("Y-m-d H:i:s"); 118 | return $this->eventsInInterval($interval, $logtime, 119 | 'AND ipaddress = '.$this->db->quote($ipaddress). 120 | ' AND NOT EXISTS (SELECT 1 FROM #__bfstop_unblock u '. 121 | ' WHERE t.id=u.block_id AND source=0)', 122 | '#__bfstop_bannedip', 'crdate'); 123 | } 124 | 125 | public function getFormattedFailedList($ipAddress, $curTime, $interval) 126 | { 127 | try 128 | { 129 | $sql = "SELECT * FROM #__bfstop_failedlogin t where ipaddress=". 130 | $this->db->quote($ipAddress). 131 | " AND t.logtime". 132 | " between DATE_SUB(".$this->db->quote($curTime). 133 | ", INTERVAL $interval MINUTE) AND ". 134 | $this->db->quote($curTime); 135 | $this->db->setQuery($sql); 136 | $entries = $this->db->loadObjectList(); 137 | $this->myCheckDBError(); 138 | $result = str_pad(Text::_('PLG_SYSTEM_BFSTOP_USERNAME'), 25)." ". 139 | str_pad(Text::_('PLG_SYSTEM_BFSTOP_IPADDRESS') , 15)." ". 140 | str_pad(Text::_('PLG_SYSTEM_BFSTOP_DATETIME') , 20)." ". 141 | str_pad(Text::_('PLG_SYSTEM_BFSTOP_ORIGIN') , 8)."\n". 142 | str_repeat("-", 97)."\n"; 143 | foreach ($entries as $entry) 144 | { 145 | $result .= str_pad($entry->username, 25)." ". 146 | str_pad($entry->ipaddress , 15)." ". 147 | str_pad($entry->logtime , 20)." ". 148 | str_pad($this->getClientString($entry->origin), 8)."\n"; 149 | } 150 | return $result; 151 | } 152 | catch (Exception $e) 153 | { 154 | $this->logger->log("Database exception occured: ".$e->getMessage(), Log::ERROR); 155 | return ''; 156 | } 157 | } 158 | 159 | public function ipAddressMatch($ipaddress) 160 | { 161 | // literal match 162 | return 163 | "(". 164 | "ipaddress=".$this->db->quote($ipaddress)." AND ". 165 | "LOCATE('/', ipaddress) = 0". 166 | ")"; 167 | } 168 | 169 | public function ipSubNetIPv4Match($ipaddress) 170 | { 171 | $DashPos = 'LOCATE("/", ipaddress)'; 172 | $IPv4NetMask = '~((1 << (32 - SUBSTR(ipaddress, '.$DashPos.'+1, LENGTH(ipaddress)-'.$DashPos.')))-1)'; 173 | $SubNetAddress = 'SUBSTR(ipaddress, 1, LOCATE("/", ipaddress)-1)'; 174 | return 175 | "(". 176 | // IPv4 subnet match (CIDR Suffix notation) 177 | "(". 178 | "LOCATE('/', ipaddress) != 0 AND LOCATE('.', ipaddress) != 0 AND ". 179 | "(INET_ATON(".$this->db->quote($ipaddress).") & ".$IPv4NetMask.")". 180 | " = ". 181 | "(INET_ATON(".$SubNetAddress.") & ".$IPv4NetMask.")". 182 | ")". 183 | // IPv6 subnet match -> needs mysql >= 5.6.3 for INET6_ATON 184 | ")"; 185 | } 186 | 187 | private function checkForEntries($sql, $action) 188 | { 189 | try 190 | { 191 | $this->db->setQuery($sql); 192 | $entries = $this->db->loadObjectList(); 193 | foreach($entries as $entry) 194 | { 195 | $this->logger->log($action." because of entry: ". 196 | "id=".$entry->id.", ". 197 | "ipaddress=".$entry->ipaddress, 198 | Log::DEBUG); 199 | } 200 | $this->myCheckDBError(); 201 | return count($entries); 202 | } 203 | catch (Exception $e) 204 | { 205 | $this->logger->log("Database exception occured: ".$e->getMessage(), Log::ERROR); 206 | return 0; 207 | } 208 | } 209 | 210 | public function isIPBlocked($ipaddress) 211 | { 212 | $sqlCheckPattern = "SELECT id, ipaddress, crdate, duration FROM #__bfstop_bannedip b WHERE ". 213 | "%s AND (b.duration=0 OR DATE_ADD(b.crdate, INTERVAL b.duration MINUTE) >= ". 214 | $this->db->quote(date("Y-m-d H:i:s")).")". 215 | " AND NOT EXISTS (SELECT 1 FROM #__bfstop_unblock u WHERE b.id = u.block_id)"; 216 | $sqlIPCheck = sprintf($sqlCheckPattern, $this->ipAddressMatch($ipaddress)); 217 | $sqlSubNetIPv4Check = sprintf($sqlCheckPattern, $this->ipSubNetIPv4Match($ipaddress)); 218 | $entryCount = $this->checkForEntries($sqlIPCheck, "Blocked"); 219 | $entryCount += $this->checkForEntries($sqlSubNetIPv4Check, "Blocked"); 220 | return ($entryCount > 0); 221 | } 222 | 223 | public function isIPOnAllowList($ipaddress) 224 | { 225 | $sqlCheckPattern = "SELECT id, ipaddress from #__bfstop_allowlist WHERE %s"; 226 | $sqlIPCheck = sprintf($sqlCheckPattern, $this->ipAddressMatch($ipaddress)); 227 | $sqlSubNetIPv4Check = sprintf($sqlCheckPattern, $this->ipSubNetIPv4Match($ipaddress)); 228 | $entryCount = $this->checkForEntries($sqlIPCheck, "Allowed"); 229 | $entryCount += $this->checkForEntries($sqlSubNetIPv4Check, "Allowed"); 230 | return ($entryCount > 0); 231 | } 232 | 233 | public function blockIP($logEntry, $duration, $usehtaccess, $htaccessPath) 234 | { 235 | try 236 | { 237 | $blockEntry = new stdClass(); 238 | $blockEntry->ipaddress = $logEntry->ipaddress; 239 | $blockEntry->crdate = date("Y-m-d H:i:s"); 240 | $blockEntry->duration = $duration; 241 | if (!$this->db->insertObject('#__bfstop_bannedip', $blockEntry, 'id')) 242 | { 243 | $this->logger->log('Insert block entry failed!', Log::ERROR); 244 | $blockEntry->id = -1; 245 | } 246 | $this->myCheckDBError(); 247 | $this->setFailedLoginHandled($logEntry, false); 248 | if ($usehtaccess) 249 | { 250 | $htaccess = new BFStopHtAccess($htaccessPath, $this->logger); 251 | $this->logger->log('Blocking '.$logEntry->ipaddress.' through '.$htaccess->getFileName(), Log::INFO); 252 | $htaccess->denyIP($logEntry->ipaddress); 253 | } 254 | return $blockEntry->id; 255 | } 256 | catch (Exception $e) 257 | { 258 | $this->logger->log("Database exception occured: ".$e->getMessage(), Log::ERROR); 259 | return -1; 260 | } 261 | } 262 | 263 | public function getNewUnblockToken($id, $token) 264 | { 265 | try 266 | { 267 | $tokenEntry = new stdClass(); 268 | $tokenEntry->token = $token; 269 | $tokenEntry->block_id = $id; 270 | $tokenEntry->crdate = date("Y-m-d H:i:s"); 271 | if (!$this->db->insertObject('#__bfstop_unblock_token', $tokenEntry)) 272 | { 273 | // maybe check if duplicate token (=PRIMARY KEY violation) and retry? 274 | $this->logger->log('Insert unblock token failed!', Log::ERROR); 275 | $tokenEntry->token = null; 276 | } 277 | $this->myCheckDBError(); 278 | return $tokenEntry->token; 279 | } 280 | catch (Exception $e) 281 | { 282 | $this->logger->log("Database exception occured: ".$e->getMessage(), Log::ERROR); 283 | return null; 284 | } 285 | } 286 | 287 | public function unblockTokenExists($token) 288 | { 289 | try 290 | { 291 | $sql = "SELECT token FROM #__bfstop_unblock_token WHERE token=". 292 | $this->db->quote($token); 293 | $this->db->setQuery($sql); 294 | $result = $this->db->loadResult(); 295 | $this->myCheckDBError(); 296 | return $result != null; 297 | } 298 | catch (Exception $e) 299 | { 300 | $this->logger->log("Database exception occured: ".$e->getMessage(), Log::ERROR); 301 | return false; 302 | } 303 | } 304 | 305 | private function getUserEmailWhere($where) 306 | { 307 | try 308 | { 309 | $sql = "select email from #__users where $where LIMIT 1"; 310 | $this->db->setQuery($sql); 311 | $emailAddress = $this->db->loadResult(); 312 | $this->myCheckDBError(); 313 | return $emailAddress; 314 | } 315 | catch (Exception $e) 316 | { 317 | $this->logger->log("Database exception occured: ".$e->getMessage(), Log::ERROR); 318 | return ''; 319 | } 320 | } 321 | 322 | public function getUserEmailByID($uid) 323 | { 324 | return $this->getUserEmailWhere("id=".((int)$uid)); 325 | } 326 | 327 | public function getUserEmailByName($username) 328 | { 329 | return $this->getUserEmailWhere("username='$username'"); 330 | } 331 | 332 | public function getUserGroupEmail($gid) 333 | { 334 | try 335 | { 336 | $sql = "SELECT email from #__users u ". 337 | "LEFT JOIN #__user_usergroup_map g ". 338 | "ON u.id = g.user_id ". 339 | "WHERE g.group_id = ".((int)($gid)); 340 | $this->db->setQuery($sql); 341 | $dbrows = $this->db->loadAssocList(); 342 | $this->myCheckDBError(); 343 | $emailAddresses = array(); 344 | foreach($dbrows as $row) 345 | { 346 | $emailAddresses[] = $row['email']; 347 | } 348 | return $emailAddresses; 349 | } 350 | catch (Exception $e) 351 | { 352 | $this->logger->log("Database exception occured: ".$e->getMessage(), Log::ERROR); 353 | return array(); 354 | } 355 | } 356 | 357 | public function insertFailedLogin($logEntry) 358 | { 359 | $logQuery = $this->db->insertObject('#__bfstop_failedlogin', $logEntry, 'id'); 360 | $this->myCheckDBError(); 361 | } 362 | 363 | public function setFailedLoginHandled($info, $restrictOnUsername) 364 | { 365 | try 366 | { 367 | $sql = 'UPDATE #__bfstop_failedlogin SET handled=1'. 368 | ' WHERE ipaddress='.$this->db->quote($info->ipaddress). 369 | ' AND handled=0'; 370 | if ($restrictOnUsername) { 371 | $sql .= ' AND username='.$this->db->quote($info->username); 372 | } 373 | $this->db->setQuery($sql); 374 | $this->db->execute(); 375 | $this->myCheckDBError(); 376 | } 377 | catch (Exception $e) 378 | { 379 | $this->logger->log("Database exception occured: ".$e->getMessage(), Log::ERROR); 380 | } 381 | } 382 | 383 | public function successfulLogin($info) 384 | { 385 | $this->setFailedLoginHandled($info, true); 386 | } 387 | 388 | public function purgeOldEntries($purgeAgeWeeks) 389 | { 390 | try 391 | { 392 | $this->logger->log("Purging entries older than $purgeAgeWeeks weeks", Log::INFO); 393 | $deleteDate = 'DATE_SUB('. 394 | ' NOW(), INTERVAL '. 395 | $this->db->quote($purgeAgeWeeks). 396 | ' WEEK)'; 397 | $sql = 'DELETE FROM #__bfstop_failedlogin WHERE logtime < '.$deleteDate; 398 | $this->db->setQuery($sql); 399 | $this->db->execute(); 400 | $this->myCheckDBError(); 401 | 402 | $sql = 'DELETE FROM #__bfstop_bannedip WHERE duration != 0 AND 403 | DATE_ADD(crdate, INTERVAL duration MINUTE) < '.$deleteDate; 404 | $this->db->setQuery($sql); 405 | $this->db->execute(); 406 | $this->myCheckDBError(); 407 | 408 | $sql = 'DELETE FROM #__bfstop_unblock WHERE NOT EXISTS '. 409 | '(SELECT 1 FROM #__bfstop_bannedip b WHERE b.id = #__bfstop_unblock.block_id)'; 410 | $this->db->setQuery($sql); 411 | $this->db->execute(); 412 | $this->myCheckDBError(); 413 | 414 | $sql = 'DELETE FROM #__bfstop_unblock_token WHERE crdate < '.$deleteDate; 415 | $this->db->setQuery($sql); 416 | $this->db->execute(); 417 | $this->myCheckDBError(); 418 | } 419 | catch (Exception $e) 420 | { 421 | $this->logger->log("Database exception occured: ".$e->getMessage(), Log::ERROR); 422 | } 423 | } 424 | 425 | public function saveParams($params) 426 | { 427 | try 428 | { 429 | $query = $this->db->getQuery(true); 430 | $query->update('#__extensions AS a'); 431 | $query->set('a.params = '. $this->db->quote((string)$params) ); 432 | $query->where('a.element = "bfstop"'); 433 | $this->db->setQuery($query); 434 | $this->db->execute(); 435 | } 436 | catch (Exception $e) 437 | { 438 | $this->logger->log("Database exception occured: ".$e->getMessage(), Log::ERROR); 439 | } 440 | } 441 | } 442 | -------------------------------------------------------------------------------- /helpers/htaccess.php: -------------------------------------------------------------------------------- 1 | path = $dir . '/.htaccess'; 38 | $this->logger = $logger; 39 | } 40 | 41 | public function getFileName() { 42 | return $this->path; 43 | } 44 | 45 | /** 46 | * Get .htaccess lines before custom lines 47 | * 48 | * @var array 49 | */ 50 | private function getHeader() 51 | { 52 | return array( 53 | '', 54 | 'Require all granted' 55 | ); 56 | } 57 | 58 | /** 59 | * Get .htaccess lines after custom lines 60 | * 61 | * @var array 62 | */ 63 | private function getFooter() 64 | { 65 | return array( 66 | '' 67 | ); 68 | } 69 | 70 | /** 71 | * Check if .htaccess file is found, readable and writeable. 72 | * 73 | * @return array 74 | */ 75 | public function checkRequirements() 76 | { 77 | $result = array( 78 | 'apacheserver' => 79 | strstr(preg_replace("/[^a-z]+/", "", strtolower($_SERVER['SERVER_SOFTWARE'])), 'apache'), 80 | 'found' => file_exists($this->path), 81 | 'readable' => is_readable($this->path), 82 | 'writeable' => is_writeable($this->path) 83 | ); 84 | return $result; 85 | } 86 | 87 | /** 88 | * Return array of denied IP addresses from .htaccess. 89 | * 90 | * @return array 91 | */ 92 | public function getDeniedIPs() 93 | { 94 | $lines = $this->getLines(self::BlockPrefix); 95 | 96 | foreach ($lines as $key => $line) { 97 | $lines[$key] = substr($line, strlen(self::BlockPrefix)); 98 | } 99 | 100 | return $lines; 101 | } 102 | 103 | /** 104 | * Add 'deny from $IP' to .htaccess. 105 | * 106 | * @param string $IP 107 | * @return boolean 108 | */ 109 | public function denyIP($IP) 110 | { 111 | return $this->addLine(self::BlockPrefix . $IP); 112 | } 113 | 114 | /** 115 | * Remove 'deny from $IP' from .htaccess. 116 | * 117 | * @param string $IP 118 | * @return boolean 119 | */ 120 | public function undenyIP($IP) 121 | { 122 | return $this->removeLine(self::BlockPrefix . $IP); 123 | } 124 | 125 | /** 126 | * Edit ErrorDocument 403 line in .htaccess. 127 | * 128 | * @param string $message 129 | * @return boolean 130 | */ 131 | public function edit403Message($message) 132 | { 133 | if (empty($message)) return $this->remove403Message(); 134 | 135 | $line = 'ErrorDocument 403 "' . $message . '"'; 136 | 137 | $otherLines = $this->getLines('ErrorDocument 403 ', true, true); 138 | 139 | $insertion = array_merge($this->getHeader(), array($line), $otherLines, $this->getFooter()); 140 | 141 | return $this->insert($insertion); 142 | } 143 | 144 | /** 145 | * Remove ErrorDocument 403 line from .htaccess. 146 | * 147 | * @return boolean 148 | */ 149 | public function remove403Message() 150 | { 151 | return $this->removeLine('', 'ErrorDocument 403 '); 152 | } 153 | 154 | /** 155 | * Return array of (prefixed) lines from .htaccess. 156 | * 157 | * @param string $prefixes 158 | * @return array 159 | */ 160 | private function getLines($prefixes = false, $onlyBody = false, $exceptPrefix = false) 161 | { 162 | $allLines = $this->extract(); 163 | 164 | if ($onlyBody) { 165 | $allLines = array_diff($allLines, $this->getHeader(), $this->getFooter()); 166 | } 167 | 168 | if (!$prefixes) return $allLines; 169 | 170 | if (!is_array($prefixes)) { 171 | $prefixes = array($prefixes); 172 | } 173 | 174 | $prefixedLines = array(); 175 | foreach ($allLines as $line) { 176 | foreach ($prefixes as $prefix) { 177 | if (strpos($line, $prefix) === 0) { 178 | $prefixedLines[] = $line; 179 | } 180 | } 181 | } 182 | 183 | if ($exceptPrefix) { 184 | $prefixedLines = array_diff($allLines, $prefixedLines); 185 | } 186 | 187 | return $prefixedLines; 188 | } 189 | 190 | /** 191 | * Add single line to .htaccess. 192 | * 193 | * @param string $line 194 | * @return boolean 195 | */ 196 | private function addLine($line) 197 | { 198 | $insertion = array_merge($this->getHeader(), $this->getLines(false, true), array($line), $this->getFooter()); 199 | 200 | return $this->insert(array_unique($insertion)); 201 | } 202 | 203 | /** 204 | * Remove single line from .htaccess. 205 | * 206 | * @param string $line 207 | * @param string $prefix 208 | * @return boolean 209 | */ 210 | private function removeLine($line, $prefix = false) 211 | { 212 | $insertion = $this->getLines(); 213 | 214 | if ($prefix !== false) { 215 | $lineKey = false; 216 | $prefixLength = strlen($prefix); 217 | foreach ($insertion as $key => $line) { 218 | if (substr($line, 0, $prefixLength) === $prefix) { 219 | $lineKey = $key; 220 | break; 221 | } 222 | } 223 | } else { 224 | $lineKey = array_search($line, $insertion); 225 | } 226 | 227 | if ($lineKey === false) return true; 228 | 229 | unset($insertion[$lineKey]); 230 | 231 | return $this->insert($insertion); 232 | } 233 | 234 | private static $marker = 'BFStop Blocks'; 235 | 236 | /** 237 | * Return array of strings from between BEGIN and END markers from .htaccess. 238 | * 239 | * @return array Array of strings from between BEGIN and END markers from .htaccess. 240 | */ 241 | private function extract() 242 | { 243 | $result = array(); 244 | 245 | if (!file_exists($this->path)) return $result; 246 | 247 | if ($markerdata = explode("\n", implode('', file($this->path)))) { 248 | $state = false; 249 | foreach ($markerdata as $markerline) { 250 | if (strpos($markerline, '# END ' . self::$marker) !== false) { 251 | $state = false; 252 | } 253 | if ($state) { 254 | $result[] = $markerline; 255 | } 256 | if (strpos($markerline, '# BEGIN ' . self::$marker) !== false) { 257 | $state = true; 258 | } 259 | } 260 | } 261 | 262 | return $result; 263 | } 264 | 265 | /** 266 | * Insert an array of strings into .htaccess, placing it between BEGIN and END markers. 267 | * Replace existing marked info. Retain surrounding data. 268 | * Create file if none exists. 269 | * 270 | * @param string $insertion 271 | * @return bool True on write success, false on failure. 272 | */ 273 | private function insert($insertion) 274 | { 275 | if (!file_exists($this->path) || is_writeable($this->path)) { 276 | if (!file_exists($this->path)) { 277 | $markerdata = ''; 278 | } else { 279 | $markerdata = explode("\n", implode('', file($this->path))); 280 | } 281 | 282 | $newContent = ''; 283 | 284 | $foundit = false; 285 | if ($markerdata) { 286 | $lineCount = count($markerdata); 287 | 288 | $state = true; 289 | foreach ($markerdata as $n => $markerline) { 290 | if (strpos($markerline, '# BEGIN ' . self::$marker) !== false) { 291 | $state = false; 292 | } 293 | 294 | if ($state) { // Non-BFLP lines 295 | if ($n + 1 < $lineCount) { 296 | $newContent .= "{$markerline}\n"; 297 | } else { 298 | $newContent .= "{$markerline}"; 299 | } 300 | } 301 | 302 | if (strpos($markerline, '# END ' . self::$marker) !== false) { 303 | $newContent .= "# BEGIN ".self::$marker."\n"; 304 | if (is_array($insertion)) { 305 | foreach ($insertion as $insertline) { 306 | $newContent .= "{$insertline}\n"; 307 | } 308 | } 309 | $newContent .= "# END ".self::$marker."\n"; 310 | 311 | $state = true; 312 | $foundit = true; 313 | } 314 | } 315 | 316 | // If BEGIN marker found but missing END marker 317 | if ($state === false) 318 | { 319 | if (!is_null($this->logger)) 320 | { 321 | $this->logger->log("corrupted .htaccess: BEGIN marker was found, but not END!", Log::ERROR); 322 | } 323 | return false; 324 | } 325 | } 326 | 327 | if (!$foundit) { 328 | // insert at the very beginning: 329 | $beginContent = "# BEGIN ".self::$marker."\n"; 330 | foreach ($insertion as $insertline) { 331 | $beginContent .= "{$insertline}\n"; 332 | } 333 | $beginContent .= "# END ".self::$marker."\n\n"; 334 | $newContent = $beginContent . $newContent; 335 | } 336 | 337 | return file_put_contents($this->path, $newContent, LOCK_EX); 338 | } 339 | if (!is_null($this->logger)) 340 | { 341 | $this->logger->log(".htaccess file is not writable!", Log::ERROR); 342 | } 343 | return false; 344 | } 345 | } 346 | 347 | -------------------------------------------------------------------------------- /helpers/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /helpers/ipaddress.php: -------------------------------------------------------------------------------- 1 | log('No proper remote IP address available, falling back to REMOTE_ADDR "'.$_SERVER['REMOTE_ADDR']. 27 | '"!', Log::WARNING); 28 | // possibly we should instead stop processing in case no proper IP address can be determined 29 | return $_SERVER['REMOTE_ADDR']; 30 | } 31 | 32 | -------------------------------------------------------------------------------- /helpers/log.php: -------------------------------------------------------------------------------- 1 | log_level = $log_level; 21 | $priorities = Log::ALL; 22 | if ($log_level > self::Disabled) 23 | { 24 | Log::addLogger(array( 25 | 'text_file' => 'plg_system_bfstop.log.php', 26 | 'text_entry_format' => 27 | '{DATETIME} {PRIORITY} {MESSAGE}' 28 | ), 29 | $priorities, 30 | array(self::LogCategory)); 31 | } 32 | } 33 | 34 | function isEnabled($priority = Log::ERROR) { 35 | return $priority <= $this->log_level; 36 | } 37 | 38 | function log($msg, $priority) 39 | { 40 | if ($this->isEnabled($priority)) { 41 | Log::add($msg, $priority, self::LogCategory); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /helpers/notify.php: -------------------------------------------------------------------------------- 1 | logger = $logger; 25 | $this->db = $db; 26 | 27 | $this->notifyAddresses = empty($emailAddress)? array() : explode(";",$emailAddress); 28 | $userEmail = $this->db->getUserEmailByID($userID); 29 | if (!empty($userEmail)) 30 | { 31 | $this->notifyAddresses = array_merge($this->notifyAddresses, array($userEmail)); 32 | } 33 | if ($groupNotifEnabled) 34 | { 35 | $this->notifyAddresses = array_merge($this->notifyAddresses, $this->db->getUserGroupEmail($userGroup)); 36 | } 37 | if (count($this->notifyAddresses) == 0) 38 | { 39 | $this->logger->log('No notification address specified!', Log::DEBUG); 40 | } 41 | } 42 | 43 | public function getNotifyAddresses() 44 | { 45 | return $this->notifyAddresses; 46 | } 47 | 48 | public function getSiteName() 49 | { 50 | $config = Factory::getConfig(); 51 | $siteName = $config->get('sitename'); // Joomla! 3.x 52 | $siteName = (strcmp($siteName,'') == 0) 53 | ? $config->get('config.sitename') 54 | : $siteName; 55 | return $siteName; 56 | } 57 | 58 | function isNotificationAllowed($logtime, $maxNumber, 59 | $table='#__bfstop_failedlogin', 60 | $timecol='logtime') 61 | { 62 | // -1 stands for an unlimited number of notifications 63 | if ($maxNumber == -1) 64 | { 65 | return true; 66 | } 67 | // 0 stands for no notifications 68 | else if ($maxNumber == 0) 69 | { 70 | return false; 71 | } 72 | return $this->db->eventsInInterval( 73 | self::$ONE_DAY, $logtime, '', $table, $timecol) 74 | <= $maxNumber; 75 | } 76 | 77 | function getBlockedBody($logEntry, $interval) 78 | { 79 | return Text::sprintf('PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_BODY', 80 | $logEntry->ipaddress, 81 | Uri::root(), 82 | $this->db->getFormattedFailedList($logEntry->ipaddress, 83 | $logEntry->logtime, 84 | $interval 85 | ) 86 | ); 87 | } 88 | 89 | function getFailedLoginBody($logEntry) 90 | { 91 | $bodys = Text::sprintf('PLG_SYSTEM_BFSTOP_FAILED_LOGIN_ATTEMPT', 92 | $this->getSiteName(), 93 | Uri::root()) ."\n"; 94 | $bodys.= str_pad(Text::_('PLG_SYSTEM_BFSTOP_USERNAME').":",15) . 95 | $logEntry->username ."\n"; 96 | $bodys.= str_pad(Text::_('PLG_SYSTEM_BFSTOP_IPADDRESS').":",15). 97 | $logEntry->ipaddress ."\n"; 98 | $bodys.= str_pad(Text::_('PLG_SYSTEM_BFSTOP_DATETIME').":",15) . 99 | $logEntry->logtime ."\n"; 100 | $bodys.= str_pad(Text::_('PLG_SYSTEM_BFSTOP_ORIGIN').":",15) . 101 | $this->db->getClientString($logEntry->origin)."\n"; 102 | return $bodys; 103 | } 104 | 105 | function sendMail($subject, $body, $emailAddresses) 106 | { 107 | if (!is_array($emailAddresses) || count($emailAddresses) == 0) 108 | { 109 | $this->logger->log("sendMail called with invalid argument: $emailAddresses", Log::ERROR); 110 | return false; 111 | } 112 | $mail = Factory::getMailer(); 113 | $mail->setSubject($subject); 114 | $mail->setBody($body); 115 | foreach ($emailAddresses as $recipient) 116 | { 117 | $mail->addRecipient($recipient); 118 | } 119 | try 120 | { 121 | $sendResult = $mail->Send(); 122 | } 123 | catch (phpmailerException $e) 124 | { 125 | $sendResult = $e->errorMessage(); 126 | } 127 | catch (MailDisabledException $e) 128 | { 129 | $sendResult = $e->getReason(); 130 | } 131 | catch (Exception $e) 132 | { 133 | $sendResult = $e->getMessage(); 134 | } 135 | $success = ($sendResult === true); 136 | $this->logger->log('Sent email to '.implode(", ", $emailAddresses). 137 | ', subject: '.$subject.'; '.($success 138 | ? 'successful' 139 | :'not successful: '.$sendResult 140 | ), $success ? Log::INFO : Log::ERROR); 141 | return $sendResult; 142 | } 143 | 144 | public function failedLogin($logEntry, $maxNumber) 145 | { 146 | if (!$this->isNotificationAllowed($logEntry->logtime, 147 | $maxNumber)) 148 | { 149 | return; 150 | } 151 | $body = $this->getFailedLoginBody($logEntry); 152 | $subject = Text::sprintf("PLG_SYSTEM_BFSTOP_FAILED_LOGIN_ATTEMPT", 153 | $this->getSiteName(), 154 | Uri::root()); 155 | $this->sendMail($subject, $body, $this->notifyAddresses); 156 | } 157 | 158 | public function blockedNotifyAdmin($logEntry, $interval, $maxNumber) 159 | { 160 | if (!$this->isNotificationAllowed( 161 | $logEntry->logtime, $maxNumber, 162 | '#__bfstop_bannedip', 'crdate')) 163 | { 164 | return; 165 | } 166 | $body = $this->getBlockedBody($logEntry, $interval); 167 | $subject = Text::sprintf('PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_SUBJECT', 168 | $this->getSiteName(), 169 | $logEntry->ipaddress); 170 | $this->sendMail($subject, $body, $this->notifyAddresses); 171 | } 172 | 173 | public function sendUnblockMail($userEmail, $unblockLink) 174 | { 175 | $siteName = $this->getSiteName(); 176 | $this->sendMail( 177 | Text::sprintf('PLG_SYSTEM_BFSTOP_BLOCKED_SUBJECT', $siteName), 178 | Text::sprintf('PLG_SYSTEM_BFSTOP_BLOCKED_BODY', 179 | $siteName, 180 | $unblockLink 181 | ), 182 | array($userEmail) 183 | ); 184 | } 185 | } 186 | 187 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /language/ca-ES/ca-ES.plg_system_bfstop.ini: -------------------------------------------------------------------------------- 1 | ;traducció feta per nouespai 28/09/2014 2 | 3 | PLG_SYSTEM_BFSTOP_FAILED_LOGIN_ATTEMPT="Intent d'identificació erroni a %s" 4 | PLG_SYSTEM_BFSTOP_USERNAME="Nom d'usuari" 5 | PLG_SYSTEM_BFSTOP_IPADDRESS="Adreça IP" 6 | PLG_SYSTEM_BFSTOP_ERROR="Error" 7 | PLG_SYSTEM_BFSTOP_DATETIME="Dia i hora" 8 | PLG_SYSTEM_BFSTOP_ORIGIN="Origen" 9 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_BODY="El bloqueig de l'adreçça IP %1$s ha estat perquè hi havia massa intents fallits d'ingressar en poc temps a %2$s. Aquests són tots els intents des d'aquesta adreça que hem registrat:\n\n%3$s\n\nAvís: Poden ésser més dels que causen el bloqueig; podria haver hagut intents anteriors, que ja van causar un bloqueig temporal llavors, o que estaven més separats que el que es considerava necessari per al bloqueig!" 10 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_SUBJECT="%s: Adreça IP bloquejada %s" 11 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_MESSAGE="La teva adreça IP ha estat bloquejada perquè hi havia massa intents fallits d'ingressar en molt poc temps." 12 | PLG_SYSTEM_BFSTOP_X_ATTEMPTS_LEFT="Et resten %d intent(s) d'ingressar abans que la teva adreça IP sigui bloquejada. Si no recordes el nom o contrasenya, pots demanar al sistema que te la torni a enviar" 13 | PLG_SYSTEM_BFSTOP_BLOCKED_SUBJECT="%s: Intents fallits d'inici de sessió" 14 | PLG_SYSTEM_BFSTOP_BLOCKED_BODY="Hola,\n\nAlgú ha intentat iniciar sessió amb el teu nom d'usuari al lloc web '%s', però ha utilitzat una contrasenya incorrecta.\nAixò ha passat tantes vegades que s'ha bloquejat l'accés des de l'adreça Ip des d'on aquests intents de connexió es van originar per evitar abusos.\n\nEn cas que no siguis tu qui hagis fet aquests intents de connexió, si us plau, ignora aquest missatge. Hauríes de ser capaç d'iniciar sessió com de costum. \nHauries de ser responsable d'aquests intents de connexió, i o bé saber de nou la contrasenya (o utilitzar la funció de 'Restablir contrasenya'). Ara tens l'oportunitat de desbloquejar l'adreça Ip, clicant aquest enllaç:\n%s\n\nAfectuosament, el gestor automàtica del lloc web!\n\nNota: Aquest és un missatge generat automàticament." 15 | PLG_SYSTEM_BFSTOP_PASSWORD_RESET_RECOMMENDED="Li avisem que un o més dels seus intents de connexió han fallat recentment. Si ho segueix intentant, aviat serà bloquejat. Per tant, li recomanem que utilitzi la funcionalitat per restablir la contrasenya!" 16 | PLG_SYSTEM_BFSTOP_BLOCKED_CLIENT_IP="La vostra adreça IP és: %s." 17 | -------------------------------------------------------------------------------- /language/ca-ES/ca-ES.plg_system_bfstop.sys.ini: -------------------------------------------------------------------------------- 1 | ; traducció feta per nouespai 29/08/2014 2 | 3 | PLG_SYSTEM_BFSTOP="Sistema - Brute Force Stop" 4 | PLG_SYSTEM_BFSTOP_DESC="

Brute Force Stop
Aquest connector proporciona els mitjans per evitar els atacs per força bruta a la teva instal·lació Joomla!. Per això, el connector emmagatzema informació sobre els intents fallits de connexió, de manera que en arribar a un nombre configurable d'intents fallits d'inici de sessió l'adreça IP de l'atacant pot ser bloquejada. A més, pot configurar notificacions sobre intents fallits i les adreces IP bloquejades, així com un retard variable després d'un inici de sessió fallit.

No oblidis de configurar i publicar el connector després de la instal·lació!
Si tens qualsevol pregunta sobre el connector, visita El lloc del projecte a github. Si hi ha algun problema en utilitzar el connector, no dubtis a reportar al Seguiment d'incidències.

En algunes parts, aquest connector s'inspira en els següents plugins Login Failed Log, Redirect Failed Logins and Ban IP Address/Range. Moltes gràcies als autors d'aquests connectors!.
Brute Force Stop és un connector Joomla!, publicat sota la GNU General Public License.
" 5 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_LABEL="Activar bloqueig" 6 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_DESC="Si aquest connector ha de bloquejar les adreces IP. Quan està desactivat, no s'afegiran noves adreces IP a la llista d'adreces bloquejades, i ni tan sols les adreces IP que ja estan en aquesta llista seran bloquejades més (encara que la llista en si es mantindrà)." 7 | PLG_SYSTEM_BFSTOP_USERID_LABEL="Selecciona un usuari" 8 | PLG_SYSTEM_BFSTOP_USERID_DESC="Selecciona l'usuari que desitja tenir notificacions d'enviament." 9 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_LABEL="Adreça de correu electrònic" 10 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_DESC="Introdueix l'adreça de correu electrònic on vols tenir notificacions d'enviament." 11 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_LABEL="Missatges d'inici de sessió fallits per dia" 12 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_DESC="Amb quina freqüència es notificaran inicis de sessió fallits en un dia" 13 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_LABEL="Missatges de bloqueig per dia" 14 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_DESC="Amb quina freqüència es notificaran les IP bloquejades en un dia" 15 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_LABEL="Retard" 16 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_DESC="Retard (en segons) en un intent d'accés fallit" 17 | PLG_SYSTEM_BFSTOP_LOGLEVEL_LABEL="Iniciant sessió" 18 | PLG_SYSTEM_BFSTOP_LOGLEVEL_DESC="Determina si un informe sobre les activitats del connector ha de ser creat (això tan sols serà necessari en cas d'un problema, el fitxer de registre es pot trobar al directori de registres amb el nom plg_system_bfstop.log.php)" 19 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_LABEL="Límit abans de bloquejar" 20 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_DESC="Quantes vegades un usuari pot equivocar-se abans de que es bloquegi la IP" 21 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_LABEL="Missatge de bloqueig" 22 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_DESC="El missatge que voleu que aparegui a la finestra del navegador d'un usuari la direcció IP del qual ha estat bloquejada a causa de massa intents de connexió fallits. Si es deixa buida, es mostrarà aquest missatge per defecte: La seva adreça IP ha estat bloquejada a causa de haver massa intents fallits d'ingressar en molt poc temps." 23 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_LABEL="Durada del bloqueig" 24 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_DESC="Determina el temps que es bloqueja l'adreça IP abans de que se li permeti accedir al lloc de nou" 25 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_LABEL="Intents restants" 26 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_DESC="Activa o desactiva les notificacions sobre els intents restants. Si està habilitat, l'usuari, després de cada intent fallit d'inici de sessió, veurà un missatge en el formulari d'accés de quants intents d'inici de sessió encara estan disponibles abans que es bloquegi l'adreça IP. Aquest ajust només s'activa si s'ha habilitat el bloqueig (si el bloqueig està desactivat, les entrades 'restants' no tindrien sentit)." 27 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_LABEL="Missatge a l'usuari bloquejat" 28 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_DESC="Quan s'activa, en cas d'una adreça IP bloquejada, la notificació s'enviarà a l'usuari que va intentar connectar-se (només per descomptat, en cas que sigui un nom d'usuari existent)." 29 | PLG_SYSTEM_BFSTOP_USE_HTTP_ERROR_LABEL="Utilitza error HTTP" 30 | PLG_SYSTEM_BFSTOP_USE_HTTP_ERROR_DESC="Si està activat, bfstop enviarà un codi d'estat 403 (prohibit) si l'adreça IP dels usuaris està bloquejada" 31 | PLG_SYSTEM_BFSTOP_ENABLED="Activat" 32 | PLG_SYSTEM_BFSTOP_DISABLED="Desactivat" 33 | PLG_SYSTEM_BFSTOP_NOTIFY_UNLIMITED="Il·limitat" 34 | PLG_SYSTEM_BFSTOP_NOTIFY_NEVER="Mai" 35 | PLG_SYSTEM_BFSTOP_BLOCK_UNLIMITED="Il·limitat" 36 | PLG_SYSTEM_BFSTOP_BLOCK_5MINUTES="5 minuts" 37 | PLG_SYSTEM_BFSTOP_BLOCK_10MINUTES="10 minuts" 38 | PLG_SYSTEM_BFSTOP_BLOCK_15MINUTES="15 minuts" 39 | PLG_SYSTEM_BFSTOP_BLOCK_30MINUTES="30 minuts" 40 | PLG_SYSTEM_BFSTOP_BLOCK_1HOUR="1 hora" 41 | PLG_SYSTEM_BFSTOP_BLOCK_2HOURS="2 hores" 42 | PLG_SYSTEM_BFSTOP_BLOCK_4HOURS="4 hores" 43 | PLG_SYSTEM_BFSTOP_BLOCK_8HOURS="8 hores" 44 | PLG_SYSTEM_BFSTOP_BLOCK_24HOURS="1 dia" 45 | PLG_SYSTEM_BFSTOP_BLOCK_1WEEK="1 setmana" 46 | PLG_SYSTEM_BFSTOP_BLOCK_30DAYS="30 dies" 47 | PLG_SYSTEM_BFSTOP_MAX_BLOCKS_BEFORE_LABEL="Permanent després de" 48 | PLG_SYSTEM_BFSTOP_MAX_BLOCKS_BEFORE_DESC="Determina després de quants intents bloquejats s'establirà un bloqueig permanent. El bloquejos que van ser retirats (o sigui desbloquejats) per token també compten. Només aquells realitzats a través de la part administrativa seran ignorats." 49 | PLG_SYSTEM_BFSTOP_MAX_BLOCK_NEVER="Mai" 50 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_ORIGIN_LABEL="Activa per a" 51 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_ORIGIN_DESC="Determina a quines parts del sistema de Joomla! han de ser actius. Si es posa que només sigui frontal o administració, no es considerarà l'altre part, per cap funcionalitat (per exemple, si està configurat només per l'administració, els intents fallits d'inici de sessió al frontal no es registraran i les connexions reeixides al frontal no reiniciaran el comptador d'inicis de sessió fallida). Si us plau, tingues en compte que un bloqueig sempre afecta tot el lloc, no importa el que s'introdueix aquí!." 52 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_FRONTEND="Només Frontal" 53 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_BACKEND="Només Administració" 54 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_BOTH="Frontal i Administració" 55 | PLG_SYSTEM_BFSTOP_FATAL="Error fatal" 56 | PLG_SYSTEM_BFSTOP_INFO="Misstage informatiu" 57 | PLG_SYSTEM_BFSTOP_DEBUG="Informació detallada" 58 | PLG_SYSTEM_BFSTOP_DELETE_OLD_ENTRIES_LABEL="Suprimeix les entrades antigues" 59 | PLG_SYSTEM_BFSTOP_DELETE_OLD_ENTRIES_DESC="Elimina les entrades més antigues que el nombre de setmanes que figuren en aquest camp (estableix a 0 per desactivar la supressió de les entrades antigues)." 60 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_LABEL="Retard adaptatiu" 61 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_DESC="Adapta el retard a la taxa actual de retards que han fallat. Augmentarà el retard cada vegada que hi ha un major nombre d'inicis de sessió com una contramesura per als atacs distribuïts." 62 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_MAX_LABEL="Retard màxim" 63 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_MAX_DESC="El termini màxim per a la resposta als intents de connexió fallits quan el retard adaptatiu s'activa" 64 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MIN_LABEL="Nivell mínim" 65 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MIN_DESC="El nivell en què el retard adaptatiu comença a fer efecte (mesurat en nombre d'inicis de sessió fallits en la darrera hora)" 66 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MAX_LABEL="Nivell màxim" 67 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MAX_DESC="El nivell en què el retard adaptatiu arriba al retard màxim (mesurat en nombre d'inicis de sessió fallits en la darrera hora)" 68 | PLG_SYSTEM_BFSTOP_DELAY_FIELDSET_LABEL="Retard" 69 | PLG_SYSTEM_BFSTOP_NOTIFICATION_FIELDSET_LABEL="Notificació" 70 | PLG_SYSTEM_BFSTOP_GROUP_NOTIFICATION_ENABLED_LABEL="Grup d'usuaris per a la notificació" 71 | PLG_SYSTEM_BFSTOP_GROUP_NOTIFICATION_ENABLED_DESC="Si està activat, el grup d'usuaris seleccionats a continuació seran notificats en cas d'inicis de sessió fallits o IP prohibides" 72 | PLG_SYSTEM_BFSTOP_USERGROUP_LABEL="Grup d'usuaris" 73 | PLG_SYSTEM_BFSTOP_USERGROUP_DESC="Tria un grup d'usuaris per a notificar-los sobre els inicis de sessió fallits i IP prohibides (si està activat anteriorment). Probablement hauràs de crear un grup dedicat per això, o usar un grup amb administradors experimentats, com el grup per defecte 'Superusuaris'." 74 | PLG_SYSTEM_BFSTOP_NOTIFY_USE_PASSWORD_REMINDER_LABEL="Recordatori per al restabliment de la clau " 75 | PLG_SYSTEM_BFSTOP_NOTIFY_USE_PASSWORD_REMINDER_DESC="Si s'ha de mostrar, i quan, un recordatori sobre l'ús de la funcionalitat de recuperació de la contrasenya en un inici de sessió fallit" 76 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_ALWAYS="Sempre" 77 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_1LEFT="Quan resti 1 intent" 78 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_2LEFT="Quan restin 2 intents" 79 | PLG_SYSTEM_BFSTOP_BLOCKED_MSG_SHOWIP_LABEL="Mostra IP" 80 | PLG_SYSTEM_BFSTOP_BLOCKED_MSG_SHOWIP_DESC="Un cop bloquejat, mostrar a l'usuari la seva adreça IP (segons la percepció del servidor)" 81 | -------------------------------------------------------------------------------- /language/ca-ES/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /language/de-DE/de-DE.plg_system_bfstop.ini: -------------------------------------------------------------------------------- 1 | PLG_SYSTEM_BFSTOP_FAILED_LOGIN_ATTEMPT="%s: Fehlgeschlagener Login-Versuch auf %s" 2 | PLG_SYSTEM_BFSTOP_USERNAME="Benutzername" 3 | PLG_SYSTEM_BFSTOP_IPADDRESS="IP-Adresse" 4 | PLG_SYSTEM_BFSTOP_ERROR="Fehler" 5 | PLG_SYSTEM_BFSTOP_DATETIME="Zeitpunkt" 6 | PLG_SYSTEM_BFSTOP_ORIGIN="Quelle" 7 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_BODY="Die IP Adresse %1$s wurde aufgrund zu vieler fehlgeschlagener Login-Versuche auf %2$s gesperrt! Login-Versuche, die von dieser IP-Adresse aufgezeichnet wurden:\n\n%3$s\n\nHinweis: Es könnten mehr Versuche angeführt sein als die, die zur Blockierung beitrugen, wenn es frühere Versuche gab, die z.B. bereits früher eine Blockade ausgelöst haben, oder zu weit auseinander lagen um eine Blockierung zu verursachen!" 8 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_SUBJECT="%s: IP-Adresse %s gesperrt" 9 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_MESSAGE="Deine IP-Addresse wurde aufgrund zu vieler fehlgeschlagener Login-Versuche gesperrt." 10 | PLG_SYSTEM_BFSTOP_X_ATTEMPTS_LEFT="Du hast noch %d Versuch(e) bevor deine IP-Adresse blockiert wird!" 11 | PLG_SYSTEM_BFSTOP_BLOCKED_SUBJECT="%s: Fehlgeschlagene Login-Versuche" 12 | PLG_SYSTEM_BFSTOP_BLOCKED_BODY="Hallo!\n\nJemand hat versucht, sich mit deinem Benutzernamen auf der Webseite '%s' einzuloggen, dafür aber ein falsches Passwort angegeben.\nDies ist so oft passiert dass die IP-Adresse von der diese Versuche ausgingen, gesperrt wurde, um Missbrauch vorzubeugen.\n\nFür den Fall dass Du das nicht selbst warst, ignoriere bitte diese Mail. Du solltest Dich weiterhin wie gewohnt einloggen können.\nSolltest du jedoch selbst für diese Versuche verantwortlich sein, und du weißt nun das Passwort wieder (du kannst alternativ auch die 'Passwort zurücksetzen'-Funktion benützen), dann kannst Du die Sperre wieder aufheben indem du auf den folgenden Link klickst:\n%s\n\nFreundliche Grüße von der automatischen Webseiten-Verwaltung!\n\nHinweis: Dies ist eine automatisiert versendete Nachricht." 13 | PLG_SYSTEM_BFSTOP_PASSWORD_RESET_RECOMMENDED="Es wurde bemerkt, dass einer oder mehrere deiner Login-Versuche fehlgeschlagen sind. Bei erneuten Versuchen wirst du in Kürze gesperrt. Es wird daher empfohlen, die Funktionalität zum Zurücksetzen des Passworts zu benützen!" 14 | PLG_SYSTEM_BFSTOP_BLOCKED_CLIENT_IP="Deine IP-Adresse ist: %s." 15 | -------------------------------------------------------------------------------- /language/de-DE/de-DE.plg_system_bfstop.sys.ini: -------------------------------------------------------------------------------- 1 | PLG_SYSTEM_BFSTOP="System - Brute Force Stop" 2 | PLG_SYSTEM_BFSTOP_DESC="

Brute Force Stop

Dieses Plugin dient der Abwehr von Brute-Force-Attacken auf Ihre Joomla-Installation. Zu diesem Zweck wird ein Log über fehlgeschlagene Login-Versuche in Ihrem Front- und Backend erstellt, und bei Erreichen einer konfigurierbaren Anzahl solcher fehlgeschlagener Versuche wird die IP-Adresse, von der diese Versuche kommen, gesperrt. Weiters lassen sich Benachrichtigungen über fehlgeschlagene Login-Versuche sowie über geblockte IP-Adressen konfigurieren. Weiters kann man vor der Antwort auf fehlgeschlagene Login-Versuche eine einstellbare Verzögerung konfigurieren.

Mehr Informationen gibt es unter folgenden Ressourcen:

Brute Force Stop ist veröffentlicht unter der GNU General Public License.
" 3 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_LABEL="Blockierung" 4 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_DESC="Bestimmt ob das Plugin IP-Adressen blockieren soll. Wenn deaktiviert, werden keine neuen Sperren mehr angelegt, und auch bereits eingetragene Sperren ignoriert (obgleich diese erhalten bleiben)." 5 | PLG_SYSTEM_BFSTOP_USERID_LABEL="Benutzer wählen" 6 | PLG_SYSTEM_BFSTOP_USERID_DESC="Den Benutzer auswählen, an dessen Email-Adresse die Benachrichtigungen gesendet werden sollen." 7 | PLG_SYSTEM_BFSTOP_USE_HTACCESS_LABEL=".htaccess verwenden" 8 | PLG_SYSTEM_BFSTOP_USE_HTACCESS_DESC="Verwende die .htaccess-Datei im Joomla-Verzeichnis zum Blockieren von IP-Adressen. Möglicherweise schneller als die Blockierung aus Joomla! heraus, funktioniert aber nur wenn php direkte Schreibrechte auf die .htaccess-Datei hat. Aktivieren Sie diese Funktion also nur wenn Sie wissen was Sie tun, und behalten sie die Server-Logfiles im Auge." 9 | PLG_SYSTEM_BFSTOP_HTACCESS_PATH_LABEL=".htaccess Pfad" 10 | PLG_SYSTEM_BFSTOP_HTACCESS_PATH_DESC="Pfad zur .htaccess Datei, die für das Blocken verwendet wird (wenn Blocken mit .htaccess eingeschaltet ist, siehe die Option '.htaccess verwenden' in den Haupteinstellungen des Plugins). Hier darf nur das Verzeichnis eingetragen werden, mit abschließendem Schrägstrich ('.htaccess' wird automatisch angehängt). Wenn leer, wird automatisch das Wurzelverzeichnis dieser Joomla!-Installation verwendet; normalerweise sollte dieses Feld also freigelassen werden, es sollte nur in speziellen Konfigurationen notwendig sein hier etwas einzutragen (etwa wenn Joomla in einem Unterverzeichnis des Servers installiert ist, aber der Zugriff auf den gesamten Server blockiert werden soll)." 11 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_LABEL="Email-Adresse(n)" 12 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_DESC="Die Email-Adresse(n) eingeben, an die die Benachrichtigungen gesendet werden sollen. Wenn mehrere Adressen eingegeben werden, müssen diese durch einen Strichpunkt (;) getrennt werden." 13 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_LABEL="Fehlgeschlagen-Nachrichten" 14 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_DESC="Wie oft an einem Tag maximal eine Benachrichtigung über fehlgeschlagene Login-Versuche gesendet werden soll." 15 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_LABEL="Blockiert-Nachrichten" 16 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_DESC="Wie oft an einem Tag maximal eine Benachrichtigung über blockierte IP-Adressen gesendet werden soll." 17 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_LABEL="Verzögerung" 18 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_DESC="Verzögerung (in Sekunden) bei einem fehlgeschlagenen Login-Versuch" 19 | PLG_SYSTEM_BFSTOP_LOGLEVEL_LABEL="Logging" 20 | PLG_SYSTEM_BFSTOP_LOGLEVEL_DESC="Bestimmt ob eine Logdatei über die Aktivitäten des Plugins angelegt werden soll (dies sollte nur im Fehlerfall notwendig sein; die Logdatei findet sich im logs-Verzeichnis unter dem Namen plg_system_bfstop.log.php); weiters bestimmt diese Einstellung, wie viel Informationen im Logfile festgehalten werden; je weiter unten in der Liste, desto detailliertere Informationen wird das Logfile enthalten. Ein guter Standard-Wert ist wahrscheinlich 'Warnung' - hier werden alle Warnungen, Fehler und fatalen Fehler im Logfile festgehalten." 21 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_LABEL="Sperrschwelle" 22 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_DESC="Wie oft ein Login von derselben IP-Adresse aus versucht werden kann bevor diese IP-Adresse gesperrt wird." 23 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_LABEL="Sperrnachricht" 24 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_DESC="Die Nachricht, die dem Benutzer im Browserfenster angezeigt werden soll, wenn dieser nach zu vielen gescheiterten Login-Versuchen gesperrt wurde (wenn leergelassen, wird eine Standard-Nachricht angezeigt: 'Deine IP-Addresse wurde aufgrund zu vieler fehlgeschlagener Login-Versuche gesperrt.')." 25 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_LABEL="Sperrdauer" 26 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_DESC="Bestimmt wie lange die IP-Sperre aufrecht erhalten werden soll bevor der Zugriff auf die Website wieder erlaubt wird" 27 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_LABEL="Übrige Versuche" 28 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_DESC="Schaltet die Benachrichtigung über verbleibende Versuche ein; wenn aktiviert, wird im Login-Formular nach einem fehlgeschlagenen Login-Versuch eine Nachricht mit den verbleibenden Login-Versuchen angezeigt. Diese Einstellung wird nur dann berücksichtigt, wenn Sperren eingeschaltet ist (wenn es nicht eingeschaltet ist, gibt es ja auch keine 'verbleibenden' Versuche)" 29 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_LABEL="Benutzer-Block-Nachricht" 30 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_DESC="Wenn eingeschaltet, wird an die in der Datenbank hinterlegte Email-Adresse eine Nachricht hinterlegt, wenn eine IP-Adresse gesperrt wird (sofern der Benutzername, mit dem das Login versucht wurde, ein existierender war)" 31 | PLG_SYSTEM_BFSTOP_USE_HTTP_ERROR_LABEL="Verwende HTTP-Fehler" 32 | PLG_SYSTEM_BFSTOP_USE_HTTP_ERROR_DESC="Wenn aktiviert, wird der HTTP Statuscode 403 (Forbidden) gesendet wenn die IP-Addresse eines Benutzers gesperrt ist." 33 | PLG_SYSTEM_BFSTOP_ENABLED="aktiviert" 34 | PLG_SYSTEM_BFSTOP_DISABLED="deaktiviert" 35 | PLG_SYSTEM_BFSTOP_NOTIFY_UNLIMITED="unbegrenzt" 36 | PLG_SYSTEM_BFSTOP_NOTIFY_NEVER="niemals" 37 | PLG_SYSTEM_BFSTOP_BLOCK_UNLIMITED="unbegrenzt" 38 | PLG_SYSTEM_BFSTOP_BLOCK_5MINUTES="5 Minuten" 39 | PLG_SYSTEM_BFSTOP_BLOCK_10MINUTES="10 Minuten" 40 | PLG_SYSTEM_BFSTOP_BLOCK_15MINUTES="15 Minuten" 41 | PLG_SYSTEM_BFSTOP_BLOCK_30MINUTES="30 Minuten" 42 | PLG_SYSTEM_BFSTOP_BLOCK_1HOUR="1 Stunde" 43 | PLG_SYSTEM_BFSTOP_BLOCK_2HOURS="2 Stunden" 44 | PLG_SYSTEM_BFSTOP_BLOCK_4HOURS="4 Stunden" 45 | PLG_SYSTEM_BFSTOP_BLOCK_8HOURS="8 Stunden" 46 | PLG_SYSTEM_BFSTOP_BLOCK_24HOURS="1 Tag" 47 | PLG_SYSTEM_BFSTOP_BLOCK_1WEEK="1 Woche" 48 | PLG_SYSTEM_BFSTOP_BLOCK_30DAYS="30 Tage" 49 | PLG_SYSTEM_BFSTOP_MAX_BLOCKS_BEFORE_LABEL="Permanent nach" 50 | PLG_SYSTEM_BFSTOP_MAX_BLOCKS_BEFORE_DESC="Bestimmt nach wie vielen Sperren eine permanente Sperre einer IP-Adresse eingerichtet wird. Zur Bestimmung der Anzahl vorheriger Sperren werden auch solche wiederaufgehobenen Sperren hinzugezählt, die der Benutzer selbst wiederaufgehoben hat; nur per Backend aufgehobene Sperren werden ignoriert" 51 | PLG_SYSTEM_BFSTOP_MAX_BLOCK_NEVER="Niemals" 52 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_ORIGIN_LABEL="Aktiv für" 53 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_ORIGIN_DESC="Bestimmt für welche Teile des Joomla!-Systems das Plugin aktiv ist. Wenn nur für entweder Frontend oder Backend aktiviert, dann wird vom anderen Teil keinerlei Aktion für irgendeine Funktionalität berücksichtigt (wenn zum Beispiel hier 'Nur Backend' eingestellt ist, dann wird nicht nur kein Log über fehlgeschlagene Logins im Frontend geführt, sondern auch erfolgreiche Logins im Frontend werden nicht zu einer Zurücksetzung des Zählers der fehlgeschlagenen Logins für das Backend verwendet). Wichtig: Eine Sperre betrifft immer die gesamte Seite, egal was hier eingestellt ist." 54 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_FRONTEND="Nur Frontend" 55 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_BACKEND="Nur Backend" 56 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_BOTH="Frontend und Backend" 57 | PLG_SYSTEM_BFSTOP_FATAL="Fatale Fehler" 58 | PLG_SYSTEM_BFSTOP_WARNING="Warnung" 59 | PLG_SYSTEM_BFSTOP_INFO="Zusätzliche Information" 60 | PLG_SYSTEM_BFSTOP_DEBUG="Detailliertes Log" 61 | PLG_SYSTEM_BFSTOP_DELETE_OLD_ENTRIES_LABEL="Löschen alter Einträge" 62 | PLG_SYSTEM_BFSTOP_DELETE_OLD_ENTRIES_DESC="Lösche Einträge älter als die in diesem Feld eingegebene Anzahl an Wochen (auf 0 setzen um keine alten Einträge zu löschen)." 63 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_LABEL="Adaptives Delay" 64 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_DESC="Aktivieren um die Verzögerung bei fehlgeschlagenen Login-Versuchen automatisch an die derzeitige Anzahl an fehlgeschlagenen Logins anzupassen. Wird die Verzögerung angepasst erhöhen wann immer eine erhöhte Anzahl an fehlgeschlagenen Login-Versuchen festgestellt wird, als Gegenmaßnahme gegen verteilte Attacken." 65 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_MAX_LABEL="Maximal-Verzögerung" 66 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_MAX_DESC="Die maximale Verzögerung der Antwort bei fehlgeschlagenen Nachrichten wenn die adaptive Verzögerung aktiviert ist." 67 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MIN_LABEL="Untere Schwelle" 68 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MIN_DESC="Die untere Schwelle ab der die adaptive Verzögerung aktiv wird (gemessen in fehlgeschlagenen Logins in der letzten Stunde)" 69 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MAX_LABEL="Obere Schwelle" 70 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MAX_DESC="Die Schwelle ab der die adaptive Verzögerung die maximale Verzögerung erreichen soll (gemessen in fehlgeschlagenen Logins in der letzten Stunde)" 71 | PLG_SYSTEM_BFSTOP_DELAY_FIELDSET_LABEL="Verzögerung" 72 | PLG_SYSTEM_BFSTOP_NOTIFICATION_FIELDSET_LABEL="Benachrichtigung" 73 | PLG_SYSTEM_BFSTOP_GROUP_NOTIFICATION_ENABLED_LABEL="Benutzergruppen-Nachricht" 74 | PLG_SYSTEM_BFSTOP_GROUP_NOTIFICATION_ENABLED_DESC="Wenn aktiviert, werden Benachrichtigungen an alle Benutzer gesendet, die Mitglied der unten ausgewählten Gruppe sind." 75 | PLG_SYSTEM_BFSTOP_USERGROUP_LABEL="Benutzergruppe" 76 | PLG_SYSTEM_BFSTOP_USERGROUP_DESC="Diejenige Benutzergruppe, an deren Mitglieder Benachrichtigungen über fehlgeschlagene Logins und geblockte IPs gesendet werden (falls oben aktiviert). Gewöhnlich sollte hierfür eine dedizierte Gruppe geschaffen werden, oder eine Gruppe die nur die erfahrensten Administratoren enthält, etwa die 'Super User' Gruppe." 77 | PLG_SYSTEM_BFSTOP_NOTIFY_USE_PASSWORD_REMINDER_LABEL="Passwort Reset Nachricht" 78 | PLG_SYSTEM_BFSTOP_NOTIFY_USE_PASSWORD_REMINDER_DESC="Ob und wann bei fehlgeschlagenen Logins eine Benachrichtigung darüber angezeigt werden soll, die Funktionalität zum Zurücksetzen des Passworts zu benutzen." 79 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_ALWAYS="Immer anzeigen" 80 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_1LEFT="Wenn 1 Versuch übrig" 81 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_2LEFT="Wenn 2 Versuche übrig" 82 | PLG_SYSTEM_BFSTOP_BLOCKED_MSG_SHOWIP_LABEL="IP zeigen" 83 | PLG_SYSTEM_BFSTOP_BLOCKED_MSG_SHOWIP_DESC="Zeige die IP Adresse des Benutzers (wie vom Server wahrgenommen) wenn blockiert" 84 | PLG_SYSTEM_BFSTOP_CHECK_INTERVAL_LABEL="Prüf-Zeitspanne" 85 | PLG_SYSTEM_BFSTOP_CHECK_INTERVAL_DESC="Zeitspanne, in der fehlgeschlagene Versuche von derselben IP für Sperren berücksichtigt werden" 86 | -------------------------------------------------------------------------------- /language/de-DE/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /language/en-GB/en-GB.plg_system_bfstop.ini: -------------------------------------------------------------------------------- 1 | PLG_SYSTEM_BFSTOP_FAILED_LOGIN_ATTEMPT="%s: Failed login attempt at %s" 2 | PLG_SYSTEM_BFSTOP_USERNAME="Username" 3 | PLG_SYSTEM_BFSTOP_IPADDRESS="IP-Address" 4 | PLG_SYSTEM_BFSTOP_ERROR="Error" 5 | PLG_SYSTEM_BFSTOP_DATETIME="Date and time" 6 | PLG_SYSTEM_BFSTOP_ORIGIN="Origin" 7 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_BODY="Blocked IP Address %1$s because there were too many unsuccessful login attempts in a short time on %2$s. These are all the attempts from that address that were recorded:\n\n%3$s\n\nNotice: This list may hold more entries than the ones causing the current block. The list may contain attempts in the past which already caused a temporary block then, or attempts which were too far apart to cause a direct block." 8 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_SUBJECT="%s: Blocked IP Address %s" 9 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_MESSAGE="Your IP address has been blocked because there were too many unsuccessful login attempts in a short time." 10 | PLG_SYSTEM_BFSTOP_X_ATTEMPTS_LEFT="You have %d attempt(s) left before your IP address will be blocked" 11 | PLG_SYSTEM_BFSTOP_BLOCKED_SUBJECT="%s: Failed login attempts" 12 | PLG_SYSTEM_BFSTOP_BLOCKED_BODY="Hi!\n\nSomebody tried to log in with your username at the website '%s', but has used a wrong password.\nThis has happened so many times that the system has blocked access from the IP Address where these login attempts originated to prevent misuse.\n\nIn case it wasn't you doing these login attempts, please ignore this message. You should be able to login just as usual.\nShould you be responsible for these login attempts, and you now either know the password again or you want to use the 'Reset password' functionality, you have the chance to unblock the IP address by clicking on this link:\n%s\n\nBest regards, the automatic website management\n\nNote: This is an automatically generated message." 13 | PLG_SYSTEM_BFSTOP_PASSWORD_RESET_RECOMMENDED="It was noticed that one or more of your login attempts have recently failed. When trying again, you will soon be blocked. It is therefore recommended that you use the functionality to reset your password!" 14 | PLG_SYSTEM_BFSTOP_BLOCKED_CLIENT_IP="Your IP address is: %s." 15 | -------------------------------------------------------------------------------- /language/en-GB/en-GB.plg_system_bfstop.sys.ini: -------------------------------------------------------------------------------- 1 | PLG_SYSTEM_BFSTOP="System - Brute Force Stop" 2 | PLG_SYSTEM_BFSTOP_DESC="

Brute Force Stop

This plugin provides means to avert Brute-Force-Attacks on your Joomla-Installation. For this purpose, the plugin stores information on failed login attempts, so that when reaching a configurable number of such failed login attempts the attacker's IP address can be blocked. Furthermore, you can configure notifications about failed logins and blocked IP addresses, as well as a variable delay for a failed login attempt.

If you need more information on the plugin, please look at the following ressources:

Brute Force Stop is published under the GNU General Public License.
" 3 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_LABEL="Enable Blocking" 4 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_DESC="Whether this plugin should block IP addresses. When disabled, no new IP addresses will be added to the list of blocked addresses, and not even IP addresses already on that list will be blocked anymore (the list itself will be preserved, though)." 5 | PLG_SYSTEM_BFSTOP_USERID_LABEL="Select a User" 6 | PLG_SYSTEM_BFSTOP_USERID_DESC="Select the user you would like to have notifications to be sent." 7 | PLG_SYSTEM_BFSTOP_USE_HTACCESS_LABEL="Use .htaccess" 8 | PLG_SYSTEM_BFSTOP_USE_HTACCESS_DESC="Use .htaccess-file in Joomla!-directory for blocking ip addresses. Might be faster than blocking through Joomla!, but will only work if php has permissions to write to the .htaccess-file. Only activate this function if you know what you're doing, and keep a look at your server logfiles." 9 | PLG_SYSTEM_BFSTOP_HTACCESS_PATH_LABEL=".htaccess path" 10 | PLG_SYSTEM_BFSTOP_HTACCESS_PATH_DESC="Path to the .htaccess file used for blocking (if .htaccess blocking is enabled, see setting 'Use .htaccess' in main plugin settings). This option should only contain the path, with trailing slash ('.htaccess' will be automatically appended). If empty, the root directory of this Joomla! installation is used, so you only need to specify something here for special configurations/functionality (such as if Joomla is installed in a subdirectory of the server, but you want bfstop to block access to the whole server)." 11 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_LABEL="Email Address(es)" 12 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_DESC="Enter the Email Address(es) where you would like to have notifications to be sent. If you want to specify more than one address, separate them by the semicolon character (;)." 13 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_LABEL="Failed msgs per day" 14 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_DESC="How often to notify about a failed login during one day" 15 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_LABEL="Blocked msgs per day" 16 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_DESC="How often to notify about a blocked IP during one day" 17 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_LABEL="Delay" 18 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_DESC="Delay (in seconds) on a failed login attempt" 19 | PLG_SYSTEM_BFSTOP_LOGLEVEL_LABEL="Logging" 20 | PLG_SYSTEM_BFSTOP_LOGLEVEL_DESC="Determines whether a Logfile about the activities of the plugin should be created (this should only be necessary in case of a problem; the logfile can be found in the logs directory under the name plg_system_bfstop.log.php). You can also configure how detailed the log should be; e.g. set to ERROR to only get information about every malfunction into the logfile." 21 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_LABEL="Block threshold" 22 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_DESC="How often a login can be tried until the IP will be blocked" 23 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_LABEL="Blocked message" 24 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_DESC="The message you'd like to appear in the browser window of a user whose IP has been blocked because of too many failed login attempts. If left empty, this default message will be shown: 'Your IP address has been blocked because there were too many unsuccessful login attempts in a short time.'" 25 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_LABEL="Block Duration" 26 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_DESC="Determines how long an IP address is blocked before it is allowed to access the site again" 27 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_LABEL="Remaining attempts" 28 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_DESC="Enables or disables notifications about remaining attempts; if enabled, the user will, after each failed login attempt, see a message in the login form about how many login attempts still are available before the IP address will be blocked. This setting is only active if blocking is enabled (if blocking is disabled, 'remaining' entries wouldn't make sense)." 29 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_LABEL="User Block Message" 30 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_DESC="When turned on, in case of a blocked IP address, a notification will be sent to the user which tried to log in (only of course in case it is an existing username)." 31 | PLG_SYSTEM_BFSTOP_USE_HTTP_ERROR_LABEL="Use HTTP Error" 32 | PLG_SYSTEM_BFSTOP_USE_HTTP_ERROR_DESC="If enabled, bfstop will send a status code 403 (Forbidden) if the users' IP address is blocked" 33 | PLG_SYSTEM_BFSTOP_ENABLED="enabled" 34 | PLG_SYSTEM_BFSTOP_DISABLED="disabled" 35 | PLG_SYSTEM_BFSTOP_NOTIFY_UNLIMITED="unlimited" 36 | PLG_SYSTEM_BFSTOP_NOTIFY_NEVER="never" 37 | PLG_SYSTEM_BFSTOP_BLOCK_UNLIMITED="unlimited" 38 | PLG_SYSTEM_BFSTOP_BLOCK_5MINUTES="5 Minutes" 39 | PLG_SYSTEM_BFSTOP_BLOCK_10MINUTES="10 Minutes" 40 | PLG_SYSTEM_BFSTOP_BLOCK_15MINUTES="15 Minutes" 41 | PLG_SYSTEM_BFSTOP_BLOCK_30MINUTES="30 Minutes" 42 | PLG_SYSTEM_BFSTOP_BLOCK_1HOUR="1 Hour" 43 | PLG_SYSTEM_BFSTOP_BLOCK_2HOURS="2 Hours" 44 | PLG_SYSTEM_BFSTOP_BLOCK_4HOURS="4 Hours" 45 | PLG_SYSTEM_BFSTOP_BLOCK_8HOURS="8 Hours" 46 | PLG_SYSTEM_BFSTOP_BLOCK_24HOURS="1 Day" 47 | PLG_SYSTEM_BFSTOP_BLOCK_1WEEK="1 Week" 48 | PLG_SYSTEM_BFSTOP_BLOCK_30DAYS="30 Days" 49 | PLG_SYSTEM_BFSTOP_MAX_BLOCKS_BEFORE_LABEL="Permanent after" 50 | PLG_SYSTEM_BFSTOP_MAX_BLOCKS_BEFORE_DESC="Determines after how many blocked attempts a permanent block will be set up. Blocks which were removed (i.e. unblocked) by token do also count; only those done via the backend will be ignored." 51 | PLG_SYSTEM_BFSTOP_MAX_BLOCK_NEVER="Never" 52 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_ORIGIN_LABEL="Active for" 53 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_ORIGIN_DESC="Determines for which parts of the Joomla! system the plugin should be active. If set to only either frontend or backend, the respective other part will not be considered for any functionality (e.g. if configured only for backend, then failed login attempts in frontend will not be logged; but also successful logins in frontend won't reset the failed login counter). Please note that a block always affects the whole site, no matter what is entered here!" 54 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_FRONTEND="Only Frontend" 55 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_BACKEND="Only Backend" 56 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_BOTH="Frontend and Backend" 57 | PLG_SYSTEM_BFSTOP_FATAL="Fatal error" 58 | PLG_SYSTEM_BFSTOP_WARNING="Warning" 59 | PLG_SYSTEM_BFSTOP_INFO="Informational message" 60 | PLG_SYSTEM_BFSTOP_DEBUG="Detailed information" 61 | PLG_SYSTEM_BFSTOP_DELETE_OLD_ENTRIES_LABEL="Prune old attempts" 62 | PLG_SYSTEM_BFSTOP_DELETE_OLD_ENTRIES_DESC="Delete failed login attempts older than the number of weeks given in this field (set to 0 to disable deletion of old entries)." 63 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_LABEL="Adaptive Delay" 64 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_DESC="Activate to adapt delay to the current rate of failed login attempts. Will increase the delay whenever there is an increased number of logins as a countermeasure for distributed attacks." 65 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_MAX_LABEL="Maximum delay" 66 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_MAX_DESC="The maximum delay for the response on failed login attempts when adaptive delay is turned on" 67 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MIN_LABEL="Minimum threshold" 68 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MIN_DESC="The threshold at which the adaptive delay starts to kick in (measured in number of failed logins in the last hour)" 69 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MAX_LABEL="Maximum threshold" 70 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MAX_DESC="The threshold at which the adaptive delay reaches the maximum delay (measured in number of failed logins in the last hour)" 71 | PLG_SYSTEM_BFSTOP_DELAY_FIELDSET_LABEL="Delay" 72 | PLG_SYSTEM_BFSTOP_NOTIFICATION_FIELDSET_LABEL="Notification" 73 | PLG_SYSTEM_BFSTOP_GROUP_NOTIFICATION_ENABLED_LABEL="User group notification" 74 | PLG_SYSTEM_BFSTOP_GROUP_NOTIFICATION_ENABLED_DESC="If enabled, the whole user group selected below will be notified in case of failed logins/banned IPs" 75 | PLG_SYSTEM_BFSTOP_USERGROUP_LABEL="User group" 76 | PLG_SYSTEM_BFSTOP_USERGROUP_DESC="Choose a user group from which to notify every member about failed logins and banned IPs (if activated above). Probably you will want to create a dedicated group for this, or use a group which holds only your most experienced administrators, like the default 'Super Users' group." 77 | PLG_SYSTEM_BFSTOP_NOTIFY_USE_PASSWORD_REMINDER_LABEL="Password reset reminder" 78 | PLG_SYSTEM_BFSTOP_NOTIFY_USE_PASSWORD_REMINDER_DESC="Whether and when to show a reminder about using the password reminder functionality on a failed login" 79 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_ALWAYS="Always" 80 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_1LEFT="When 1 attempt left" 81 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_2LEFT="When 2 attempts left" 82 | PLG_SYSTEM_BFSTOP_BLOCKED_MSG_SHOWIP_LABEL="Show IP" 83 | PLG_SYSTEM_BFSTOP_BLOCKED_MSG_SHOWIP_DESC="When blocked, show the user his IP address (as perceived by the server)" 84 | PLG_SYSTEM_BFSTOP_CHECK_INTERVAL_LABEL="Check interval" 85 | PLG_SYSTEM_BFSTOP_CHECK_INTERVAL_DESC="Interval for which failed attempts from the same IP address are considered for blocking." 86 | -------------------------------------------------------------------------------- /language/en-GB/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /language/es-ES/es-ES.plg_system_bfstop.ini: -------------------------------------------------------------------------------- 1 | ;traducción realizada por nouespai 28/09/2014 2 | 3 | PLG_SYSTEM_BFSTOP_FAILED_LOGIN_ATTEMPT="%s: Tentativa de entrada al sistema fracasada en %s" 4 | PLG_SYSTEM_BFSTOP_USERNAME="Usuario" 5 | PLG_SYSTEM_BFSTOP_IPADDRESS="IP-Dirección" 6 | PLG_SYSTEM_BFSTOP_ERROR="Error" 7 | PLG_SYSTEM_BFSTOP_DATETIME="Fecha y tiempo" 8 | PLG_SYSTEM_BFSTOP_ORIGIN="Origen" 9 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_BODY="Bloqueada IP %s por demasiadas tentativas de entrada fracasadas al sistema (%s). Estas son las tentativas:\n\n%s" 10 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_SUBJECT="%s: Dirección IP bloqueada %s" 11 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_MESSAGE="Su dirección IP ha sido bloqueada por demasiadas tentativas fracasadas de entrada al sistema." 12 | PLG_SYSTEM_BFSTOP_X_ATTEMPTS_LEFT="Puede intentar (s) %d antes de que su dirección IP sea bloqueada" 13 | PLG_SYSTEM_BFSTOP_BLOCKED_SUBJECT="%s: Tentativas fracasadas de entrada al sistema" 14 | PLG_SYSTEM_BFSTOP_BLOCKED_BODY="Hola!\n\nAlguien trató de entrar al sistema con su nombre de usuario en el sitio Web '%s', pero ha usado una contraseña incorrecta.\nEsto ha pasado tantas veces que el sistema ha bloqueado el acceso de la Dirección IP desde donde provinieron estas tentativas para prevenir su mal uso.\n\nSi no es usted quien está haciendo estas tentativas de entrada al sistema, por favor no haga caso de este mensaje. Usted debería ser capaz de entrar al sistema como lo hace habitualmente.\nSi es usted el responsable de estas tentativas de entrada al sistema, y quiere usar 'la nueva contraseña', usted tiene la posibilidad de desbloquear la dirección IP haciendo clic en este enlace:\n%s\n\nBest, la dirección de sitio Web automática\n\nNota: Este es un mensaje generado automáticamente." 15 | PLG_SYSTEM_BFSTOP_PASSWORD_RESET_RECOMMENDED="Le avisamos que uno o más de sus intentos de conexión han fallado recientemente. Si lo sigue intentando, pronto será bloqueado. Por tanto, le recomendamos que utilice la funcionalidad para restablecer la contraseña!" 16 | PLG_SYSTEM_BFSTOP_BLOCKED_CLIENT_IP="Su dirección IP es: %s." 17 | -------------------------------------------------------------------------------- /language/es-ES/es-ES.plg_system_bfstop.sys.ini: -------------------------------------------------------------------------------- 1 | ; traducció realizada por nouespai 29/08/2014 2 | 3 | PLG_SYSTEM_BFSTOP="System - Brute Force Stop" 4 | PLG_SYSTEM_BFSTOP_DESC="

Brute Force Stop

Este conector proporciona medios para evitar ataques de fuerza bruta contra tu Joomla. Para este fin, el conector almacena la información de las tentativas de entradas fracasadas al sistema, de modo que alcanzando un número configurable de entradas fracasadas la dirección IP del atacante puede ser bloqueada. Además, puedes configurar notificaciones sobre las entradas fracasadas al sistema y bloqueos de direcciones IP, así como un retardo variable para una tentativa de entrada fracasada al sistema.


En parte, este conector fue inspirado por los conectores siguientes Login Failed Log, Redirect Failed Logins and Ban IP Address/Range. Muchísimas gracias para los autores.
Brute Force Stop es un conector Joomla! publicado bajo la GNU General Public License.
" 5 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_LABEL="Activar bloqueo" 6 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_DESC="Si este conector debería bloquear direcciones IP. Cuando esté desactivado, ninguna nueva direccion IP será añadida a la lista de direcciones bloqueadas (aunque la lista será conservada)." 7 | PLG_SYSTEM_BFSTOP_USERID_LABEL="Selecciona un usuario" 8 | PLG_SYSTEM_BFSTOP_USERID_DESC="Selecciona al usuario al que se enviarán las notificaciones." 9 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_LABEL="Dirección de correo electrónico" 10 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_DESC="Dirección de correo electrónico donde se enviarán las notificaciones." 11 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_LABEL="Mensajes de inicio de sessión fallidos por día" 12 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_DESC="Con qué frecuencia se notificarán inicios de sesión fallidos en un dia" 13 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_LABEL="Mensajes de bloqueo por día" 14 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_DESC="Con qué frecuencia se notificarán las IP bloqueadas en un día" 15 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_LABEL="Retardo" 16 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_DESC="Retardo (en segundos) en una tentativa de entrada fracasada al sistema" 17 | PLG_SYSTEM_BFSTOP_LOGGING_ENABLED_LABEL="Registro" 18 | PLG_SYSTEM_BFSTOP_LOGGING_ENABLED_DESC="Determina si un archivo histórico sobre las actividades del conector debería ser creado (esto sólo debería ser necesario en el caso de un problema; el archivo histórico puede ser encontrado en el directorio raíz bajo el nombre plg_system_bfstop.log.php)" 19 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_LABEL="Umbral de bloqueo" 20 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_DESC="Cuantas veces un usuario puede equivocarse antes de que sea bloqueada la IP" 21 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_LABEL="Mensaje de bloqueo" 22 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_DESC="El mensaje que deseas que aparezca en la ventana del navegador de un usuario cuya IP ha sido bloqueada debido a demasiadas tentativas fracasadas. Si lo dejas vacío, el mensaje mostrado será: 'Su dirección de IP ha sido bloqueada por demasiadas tentativas de entrada fracasadas al sistema.'" 23 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_LABEL="Duración del bloqueo" 24 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_DESC="Determina cuánto tiempo una dirección IP será bloqueada antes de que le sea permitido tener acceso al sitio nuevamente" 25 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_LABEL="Tentativas restantes" 26 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_DESC="Activa o desactiva las notificaciones sobre tentativas restantes; de ser permitido, el usuario, después de cada tentativa de entrada al sistema fracasada, verá un mensaje sobre cuántas tentativas quedan disponibles antes de que la dirección IP sea bloqueada. Este ajuste es solo activo si el bloqueo está permitido (si el bloqueo está desactivado, las entradas 'restantes' no tendrían sentido)." 27 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_LABEL="Mensaje al usuario bloqueado" 28 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_DESC="Si se marca, en caso de una dirección de IP bloqueada, será enviada una notificación al usuario que trató de entrar al sistema.(Solo, por descontado, en caso de que sea un nom de usuario existente)" 29 | PLG_SYSTEM_BFSTOP_USE_HTTP_ERROR_LABEL="Utiliza error HTTP" 30 | PLG_SYSTEM_BFSTOP_USE_HTTP_ERROR_DESC="Si está activado, bfstop enviará un código de estado 403 (prohibido) si la dirección IP de los usuarios queda bloqueada" 31 | PLG_SYSTEM_BFSTOP_ENABLED="Activado" 32 | PLG_SYSTEM_BFSTOP_DISABLED="No activado" 33 | PLG_SYSTEM_BFSTOP_NOTIFY_UNLIMITED="Ilimitado" 34 | PLG_SYSTEM_BFSTOP_NOTIFY_NEVER="Nunca" 35 | PLG_SYSTEM_BFSTOP_BLOCK_UNLIMITED="Ilimitado" 36 | PLG_SYSTEM_BFSTOP_BLOCK_5MINUTES="5 minutos" 37 | PLG_SYSTEM_BFSTOP_BLOCK_10MINUTES="10 minutos" 38 | PLG_SYSTEM_BFSTOP_BLOCK_15MINUTES="15 minutos" 39 | PLG_SYSTEM_BFSTOP_BLOCK_30MINUTES="30 minutos" 40 | PLG_SYSTEM_BFSTOP_BLOCK_1HOUR="1 hora" 41 | PLG_SYSTEM_BFSTOP_BLOCK_2HOURS="2 horas" 42 | PLG_SYSTEM_BFSTOP_BLOCK_4HOURS="4 horas" 43 | PLG_SYSTEM_BFSTOP_BLOCK_8HOURS="8 horas" 44 | PLG_SYSTEM_BFSTOP_BLOCK_24HOURS="1 día" 45 | PLG_SYSTEM_BFSTOP_BLOCK_1WEEK="1 semana" 46 | PLG_SYSTEM_BFSTOP_BLOCK_30DAYS="30 dias" 47 | PLG_SYSTEM_BFSTOP_MAX_BLOCKS_BEFORE_LABEL="Permanente después de" 48 | PLG_SYSTEM_BFSTOP_MAX_BLOCKS_BEFORE_DESC="Determina después de cuántos intentos fracasados se establece un bloqueo permanente. Los bloqueos anulados también cuentan; sólo aquellos bloqueos realizados por la parte de la administración serán ignorados." 49 | PLG_SYSTEM_BFSTOP_MAX_BLOCK_NEVER="Nunca" 50 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_ORIGIN_LABEL="Activo para" 51 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_ORIGIN_DESC="Determina en qué partes del sistema de Joomla! el conector debería estar activo. Si eliges frontal o administración, la otra parte no será considerada (por ejemplo, si has configurado sólo administración, los intentos fallidos de inicio al frontal no se registrarán, pero tampoco las conexiones acertadas en el frontal reinicializarán el contador de conexiones fracasadas). Por favor ten en cuenta que el bloqueo siempre afecta a todo el sitio, sin importar lo que elija.!" 52 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_FRONTEND="Solo frontal" 53 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_BACKEND="Solo administración" 54 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_BOTH="Frontal y administración" 55 | PLG_SYSTEM_BFSTOP_FATAL="Error fatal" 56 | PLG_SYSTEM_BFSTOP_INFO="Mensaje informativo" 57 | PLG_SYSTEM_BFSTOP_DEBUG="Información detallada" 58 | PLG_SYSTEM_BFSTOP_DELETE_OLD_ENTRIES_LABEL="Suprime las entradas antiguas" 59 | PLG_SYSTEM_BFSTOP_DELETE_OLD_ENTRIES_DESC="Eliminar las entradas más antiguas que el número de semanas que figuran en este campo (establece en 0 para desactivar la supresión de las entradas antiguas)." 60 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_LABEL="Retardo adaptativo" 61 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_DESC="Adapta el retardo a la tasa actual de retardos que han fallado. Aumentará el retardo cada vez que hay un mayor número de inicios de sesión como una contramedida para los ataques distribuidos." 62 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_MAX_LABEL="Retardo máximo" 63 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_MAX_DESC="El plazo máximo para la respuesta a los intentos de conexión fallidos cuando el retardo adaptativo se activa" 64 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MIN_LABEL="Nivel mínimo" 65 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MIN_DESC="El nivel en el que el retardo adaptativo empieza a hacer efecto (medido en número de inicios de sesión fallidos en la última hora)" 66 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MAX_LABEL="Nivel máximo" 67 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MAX_DESC="El nivel en el que el retardo adaptativo llega al retardo máximo (medido en número de inicios de sesión fallidos en la última hora)" 68 | PLG_SYSTEM_BFSTOP_DELAY_FIELDSET_LABEL="Retardo" 69 | PLG_SYSTEM_BFSTOP_NOTIFICATION_FIELDSET_LABEL="Notificación" 70 | PLG_SYSTEM_BFSTOP_GROUP_NOTIFICATION_ENABLED_LABEL="Grupo de usuarios para la notificación" 71 | PLG_SYSTEM_BFSTOP_GROUP_NOTIFICATION_ENABLED_DESC="Si está activado, el grupo de usuarios seleccionados a continuación serán notificados en caso de inicios de sesión fallidos o IP prohibidas" 72 | PLG_SYSTEM_BFSTOP_USERGROUP_LABEL="Grupo de usuarios" 73 | PLG_SYSTEM_BFSTOP_USERGROUP_DESC="Selecciona un grupo de usuarios para notificarles sobre los inicios de sesión fallidos e IP prohibidas (si está activado anteriormente). Probablemente deberás crear un grupo dedicado para ello, o usar un grupo con administradores experimentados, como el grupo por defecto 'Superusuarios'." 74 | PLG_SYSTEM_BFSTOP_NOTIFY_USE_PASSWORD_REMINDER_LABEL="Recordatorio para el restablecimiento de la clave" 75 | PLG_SYSTEM_BFSTOP_NOTIFY_USE_PASSWORD_REMINDER_DESC="Si se ha de mostrar, y cuando, un recordatorio sobre el uso de la funcionalidad de recuperación de la contraseña en un inicio de sesión fallido" 76 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_ALWAYS="Siempre" 77 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_1LEFT="Cuando reste 1 intento" 78 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_2LEFT="Cuando queden 2 intento" 79 | PLG_SYSTEM_BFSTOP_BLOCKED_MSG_SHOWIP_LABEL="Muestra IP" 80 | PLG_SYSTEM_BFSTOP_BLOCKED_MSG_SHOWIP_DESC="Una vez bloqueado, mostrar al usuario su dirección IP (según la percepción del servidor)" 81 | -------------------------------------------------------------------------------- /language/es-ES/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /language/fr-FR/fr-FR.plg_system_bfstop.ini: -------------------------------------------------------------------------------- 1 | ; Traduit pour la version 1.3.0B1 par Flying_Lolo - 16/03/2014 2 | ; Encodage UTF-8 - No BOM 3 | ; Fichier de traduction pour ./plugins/system/ 4 | 5 | PLG_SYSTEM_BFSTOP_FAILED_LOGIN_ATTEMPT="%s: Tentative de connexion %s" 6 | PLG_SYSTEM_BFSTOP_USERNAME="ID.Utilisateur" 7 | PLG_SYSTEM_BFSTOP_IPADDRESS="Addresse IP" 8 | PLG_SYSTEM_BFSTOP_ERROR="Erreur" 9 | PLG_SYSTEM_BFSTOP_DATETIME="Date et heure" 10 | PLG_SYSTEM_BFSTOP_ORIGIN="Origine" 11 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_BODY="%2$s: Addresse IP %1$s bloquée pour cause de multiples tentatives de connexion sur un court laps de temps. Les tentatives enregistrées à cette adresse sont les suivantes:\n\n%3$s\n\nRemarque: D'autres tentatives de connexions, plus anciennes, ont néanmoins pu également concourir à ce blocage, telles des tentatives de connexion ayant conduit à des blocages temporaires..." 12 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_SUBJECT="%s: Addresse IP bloquée %s" 13 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_MESSAGE="En raison de multiples tentatives de connexion, rapprochées dans le temps, votre adresse IP a été bloquée." 14 | PLG_SYSTEM_BFSTOP_X_ATTEMPTS_LEFT="Il vous reste %d tentative(s) avant que votre adresse IP ne soit bloquée." 15 | PLG_SYSTEM_BFSTOP_BLOCKED_SUBJECT="%s: Enregistrement de multiples tentatives de connexion." 16 | PLG_SYSTEM_BFSTOP_BLOCKED_BODY="Bonjour,\n\nPlusieurs tentatives de connexion ont été enregistrées sur le site %s avec votre identifiant d'utilisateur, mais avec un mauvais mot de passe.\nCes tentatives ont été suffisament nombreuses pour déclencher le blocage automatique de l'adresse IP à l'origine de ces tentatives.\n\nDans l'hypothèse où vous ne seriez pas à l'origine de ces tentatives de connexion, vous pouvez ignorer ce message. En effet, vous devriez pouvoir vous connecter sur le site dans les conditions habituelles.\n\nDans le cas contraire, et que vous vous souvenez désormais de votre mot de passe ou que vous souhaitez le réinitialiser sur le site, vous avez la possibilité de débloquer votre adresse IP en cliquant sur ce lien:\n%s\n\nCordialement,\n L'Administration du site.\n\nNote: ceci est un message transmis par un automate." 17 | PLG_SYSTEM_BFSTOP_PASSWORD_RESET_RECOMMENDED="Au moins une tentative de connexion a récemment échoué. En multipliant les essais infructeux, vous risquez d'être bientôt bloqués pour des raisons de sécurité. Raison pour laquelle nous vous recommandons de réinitialiser votre mot de passe!" 18 | PLG_SYSTEM_BFSTOP_BLOCKED_CLIENT_IP="Votre address IP est: %s." 19 | -------------------------------------------------------------------------------- /language/fr-FR/fr-FR.plg_system_bfstop.sys.ini: -------------------------------------------------------------------------------- 1 | ; Traduit pour la version 1.3.0B1 par Flying_Lolo - 16/03/2014 2 | ; Encodage UTF-8 - No BOM 3 | ; Fichier de traduction pour ./plugins/system/bfstop/language/fr-FR/ 4 | 5 | PLG_SYSTEM_BFSTOP="System - Brute Force Stop" 6 | PLG_SYSTEM_BFSTOP_DESC="

Brute Force Stop

Ce plug-in fournit des moyens pour prévenir des attaques de votre site Joomla. À cette fin, le plug-in stocke des informations sur les échecs de connexion, de sorte qu'au terme d'un certain nombre (configurable) de tentatives l'adresse IP de l'attaquant peut être bloquée. En outre, vous pouvez configurer la notification des connexions échouées et des adresses bloquées, aussi bien qu'un délai variable entre chaque tentative de connexion autorisée.

N'oubliez pas de configurer et de publier ce plugin après installation!
Si vous avez des questions, merci de visiter le site du projet sur github. En cas de difficultés d'utilisation, n'hésitez pas à les rapporter ici !

Ce plugin s'inspire pour partie des plugins suivants: Login Failed Log, Redirect Failed Logins and Ban IP Address/Range. Merci beaucoup aux auteurs de ces plugins!
Brute Force Stop est un plugin Joomla!, publié sous la GNU General Public License.
" 7 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_LABEL="Activation du blocage" 8 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_DESC="Active le blocage des adresses IP. En cas de désactivation, aucune nouvelle adresse IP ne sera ajoutée à la liste des adresses bloquées. Même les adresses IP déjà listées ne seront pas bloquées, mais la liste elle-même sera conservée." 9 | PLG_SYSTEM_BFSTOP_USERID_LABEL="Sélection de l'utilisateur" 10 | PLG_SYSTEM_BFSTOP_USERID_DESC="Utilisateur dont l'adresse électronique est utilisée en tant qu'adresse destinataire des courriels de notification (sous réserve que l'adresse de notification ci-dessus soit configurée en mode 'Utilisateur sélectionné')." 11 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_LABEL="Adresse(s) électronique(s)" 12 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_DESC="Adresse(s) électronique(s) utilisée(s) en tant qu'adresse(s) destinataire(s) des courriels de notification. Pour spécifier plusieurs adresses, utiliser le séparateur ';'." 13 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_LABEL="Notification des échecs de connexion (msg/j)" 14 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_DESC="Combien d'échecs de connexion au maximum notifier par jour ?" 15 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_LABEL="Notification des blocages d'adresses IP (msg/j)" 16 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_DESC="Combien de blocages d'addresses IP au maximum notifier par jour ?" 17 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_LABEL="Délai de reconnexion" 18 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_DESC="Délai (en secondes) avant nouvelle tentative de connexion autorisée" 19 | PLG_SYSTEM_BFSTOP_LOGLEVEL_LABEL="Journal d'activité" 20 | PLG_SYSTEM_BFSTOP_LOGLEVEL_DESC="Active le journal d'activité (nécessaire en cas de difficultés; le fichier journal se trouve dans le répertoire des logs sous le nom 'plg_system_bfstop.log.php')" 21 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_LABEL="Seuil de blocage" 22 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_DESC="Nombre de tentatives autorisées avant blocage" 23 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_LABEL="Message de blocage" 24 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_DESC="Le message à faire apparaître dans le navigateur de l'utilisateur qui voit son adresse IP bloquée en raison d'utilisation à plusieurs reprises de codes d'accès erronés. Si laissé vide, le message par défaut sera affiché: 'Votre adresse IP a été bloquée en raison d'une utilisation, à plusieurs reprises et durant un laps de temps très court, de codes d'accès erronés.'" 25 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_LABEL="Durée de blocage" 26 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_DESC="Configuration de la durée de blocage de l'adresse IP avant réouverture de l'accès" 27 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_LABEL="Affichage du nombre de tentatives restantes" 28 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_DESC="Active ou désactive la notification utilisateur du nombre de tentatives autorisées avant blocage; en cas d'activation, l'utilisateur reçoit, après chaque tentative de connexion, un message dans la fenêtre de connexion l'informant du nombre de tentatives restantes avant blocage. Cette option n'est naturellement pas pertinente si l'option de blocage n'est pas activée." 29 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_LABEL="Message à l'utilisateur impacté" 30 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_DESC="En cas de blocage d'une adresse IP, lorsque cette option est activée, un message sera transmis, le cas échéant, à l'utilisateur dont l'identifiant aura été utilisé lors des tentatives de connexion." 31 | PLG_SYSTEM_BFSTOP_ENABLED="activé" 32 | PLG_SYSTEM_BFSTOP_DISABLED="désactivé" 33 | PLG_SYSTEM_BFSTOP_NOTIFY_UNLIMITED="sans limite" 34 | PLG_SYSTEM_BFSTOP_NOTIFY_NEVER="aucun" 35 | PLG_SYSTEM_BFSTOP_BLOCK_UNLIMITED="sans limite" 36 | PLG_SYSTEM_BFSTOP_BLOCK_5MINUTES="5 Minutes" 37 | PLG_SYSTEM_BFSTOP_BLOCK_10MINUTES="10 Minutes" 38 | PLG_SYSTEM_BFSTOP_BLOCK_15MINUTES="15 Minutes" 39 | PLG_SYSTEM_BFSTOP_BLOCK_30MINUTES="30 Minutes" 40 | PLG_SYSTEM_BFSTOP_BLOCK_1HOUR="1 Heure" 41 | PLG_SYSTEM_BFSTOP_BLOCK_2HOURS="2 Heures" 42 | PLG_SYSTEM_BFSTOP_BLOCK_4HOURS="4 Heures" 43 | PLG_SYSTEM_BFSTOP_BLOCK_8HOURS="8 Heures" 44 | PLG_SYSTEM_BFSTOP_BLOCK_24HOURS="1 Jour" 45 | ; Ajouté à compter de la version 0.9.11 46 | PLG_SYSTEM_BFSTOP_MAX_BLOCKS_BEFORE_LABEL="Déclenchement du blocage permanent" 47 | PLG_SYSTEM_BFSTOP_MAX_BLOCKS_BEFORE_DESC="Permet la mise en place d'un blocage permanent au terme d'un certain nombre de blocages temporaires (les blocages résolus via l'interface d'administration ne sont pas comptabilisés)." 48 | PLG_SYSTEM_BFSTOP_MAX_BLOCK_NEVER="Jamais" 49 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_ORIGIN_LABEL="Activé pour" 50 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_ORIGIN_DESC="Permet de sélectionner les points d'entrée où le contrôle d'accés doit être mis en place : interface d'administration et/ou frontal du site. Si le contrôle d'accès est mis en place sur un seul point d'entrée, alors les accès via le point d'entrée non contrôlé ne pourront être pris en compte dans le contrôle d'accès (par exemple, en cas de contrôle mis en place au niveau de la seule interface d'administration, les tentatives d'accès via le frontal du site ne seront pas prises en compte. De même, des connexions réussies via le frontal du site ne pourront pas remettre a zéro le compteur d'accès incrémenté au niveau de l'interface d'administration). Lorsqu'un blocage est déclenché, veuillez également noter que celui-ci affectera la totalité du site (frontal et administration) quel que soit le point d'entrée contrôlé." 51 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_FRONTEND="Frontal uniquement" 52 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_BACKEND="Administration uniquement" 53 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_BOTH="Frontal ET Administration" 54 | PLG_SYSTEM_BFSTOP_FATAL="Erreur fatale" 55 | PLG_SYSTEM_BFSTOP_INFO="Message d'information" 56 | PLG_SYSTEM_BFSTOP_DEBUG="Information détaillée" 57 | ; Ajouté à compter de la version 1.0.0 Beta 58 | PLG_SYSTEM_BFSTOP_USE_HTTP_ERROR_LABEL="Utiliser les codes erreur HTTP" 59 | PLG_SYSTEM_BFSTOP_USE_HTTP_ERROR_DESC="Si cette option est activée, bfstop enverra un code erreur 403 (accès interdit) à l'utilisateur d'une adresse IP bloquée" 60 | ; Ajouté à compter de la version 1.1.0 61 | PLG_SYSTEM_BFSTOP_DELETE_OLD_ENTRIES_LABEL="Effacement des anciennes entrées" 62 | PLG_SYSTEM_BFSTOP_DELETE_OLD_ENTRIES_DESC="Efface les entrées dont l'ancienneté excède le nombre de semaines indiqué dans ce champ de saisie (indiquer 0 pour désactiver cette fonction d'effacement automatique)." 63 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_LABEL="Délai adaptatif" 64 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_DESC="Adaptation du délai avant reconnexion au nombre de connexions échouées. Augmente le délai en cas d'accroissement du nombre de connexions comme contre-mesure aux attaques distribuées." 65 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_MAX_LABEL="Délai maximum" 66 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_MAX_DESC="Le délai maximum de reconnexion lorsque le délai adaptatif est actif" 67 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MIN_LABEL="Seuil minimal" 68 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MIN_DESC="Le seuil à partir duquel le délai adaptatif entre en fonction (mesuré à travers le nombre de connexions échouées dans la dernière heure)" 69 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MAX_LABEL="Seuil maximal" 70 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MAX_DESC="Le seuil à partir duquel le délai adaptatif est maximal (mesuré à travers le nombre de connexions échouées dans la dernière heure)" 71 | PLG_SYSTEM_BFSTOP_DELAY_FIELDSET_LABEL="Délai" 72 | ; Ajouté à compter de la version 1.2.0 Beta1 73 | PLG_SYSTEM_BFSTOP_BLOCK_1WEEK="1 semaine" 74 | PLG_SYSTEM_BFSTOP_BLOCK_30DAYS="30 jours" 75 | PLG_SYSTEM_BFSTOP_NOTIFICATION_FIELDSET_LABEL="Notification" 76 | PLG_SYSTEM_BFSTOP_GROUP_NOTIFICATION_ENABLED_LABEL="Notification du groupe d'utilisateurs" 77 | PLG_SYSTEM_BFSTOP_GROUP_NOTIFICATION_ENABLED_DESC="En cas d'activation, la totalité des utilisateurs du groupe d'utilisateurs sélectionné ci-dessous sera informée des échecs de connexion / banissements d'adresses IP" 78 | PLG_SYSTEM_BFSTOP_USERGROUP_LABEL="Groupe d'utilisateurs" 79 | PLG_SYSTEM_BFSTOP_USERGROUP_DESC="Indiquer le groupe d'utilisateurs à informer des échecs de connexion / banissements d'adresses IP. Cela suppose l'existence dans Joomla d'un groupe d'utilisateurs adapté à cet usage (par exemple, le groupe 'Super Users')." 80 | ; Ajouté à compter de la version 1.3.0 Beta1 81 | PLG_SYSTEM_BFSTOP_NOTIFY_USE_PASSWORD_REMINDER_LABEL="Réinitialisation du mot de passe : aide-mémoire" 82 | PLG_SYSTEM_BFSTOP_NOTIFY_USE_PASSWORD_REMINDER_DESC="Opportunité et modalités de rappel de l'usage de la fonctionnalité de réinitialisation du mot de passe en cas d'échec de connexion" 83 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_ALWAYS="Toujours" 84 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_1LEFT="Après 1 échec de connexion" 85 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_2LEFT="Après 2 échecs de connexion" 86 | PLG_SYSTEM_BFSTOP_BLOCKED_MSG_SHOWIP_LABEL="Affichage IP" 87 | PLG_SYSTEM_BFSTOP_BLOCKED_MSG_SHOWIP_DESC="En cas de blocage, indique à l'internaute son adresse IP (telle que relevée par le serveur)" 88 | -------------------------------------------------------------------------------- /language/fr-FR/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /language/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /language/it-IT/it-IT.plg_system_bfstop.ini: -------------------------------------------------------------------------------- 1 | PLG_SYSTEM_BFSTOP_FAILED_LOGIN_ATTEMPT="%s: Tentativo di accesso fallito %s" 2 | PLG_SYSTEM_BFSTOP_USERNAME="Nome utente" 3 | PLG_SYSTEM_BFSTOP_IPADDRESS="Indirizzo-IP" 4 | PLG_SYSTEM_BFSTOP_ERROR="Errore" 5 | PLG_SYSTEM_BFSTOP_DATETIME="Data e ora" 6 | PLG_SYSTEM_BFSTOP_ORIGIN="Origine" 7 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_BODY="Indirizzo IP Bloccato %1$s perché ci sono stati troppi tentativi di accesso non riusciti in breve tempo su %2$s. Questi sono i tentativi:\n\n%3$s\n\nNota: Questo elenco può contenere più voci rispetto a quelle che hanno causano il blocco attuale. L'elenco può contenere tentativi nel passato che hanno causato già un blocco temporaneo, o tentativi che erano troppo distanti per causare un blocco diretto." 8 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_SUBJECT="%s: Indirizzo IP Bloccato %s" 9 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_MESSAGE="Il tuo indirizzo IP è stato bloccato perché ci sono stati troppi tentativi di accesso non riusciti in breve tempo." 10 | PLG_SYSTEM_BFSTOP_X_ATTEMPTS_LEFT="Hai ancora %d tentativo(i) prima che il tuo indirizzo IP venga bloccato" 11 | PLG_SYSTEM_BFSTOP_BLOCKED_SUBJECT="%s: Tentativo di accesso fallito" 12 | PLG_SYSTEM_BFSTOP_BLOCKED_BODY="Ciao!\n\nQualcuno tenta di accedere con il tuo nome utente al sito web '%s', ma ha usato una password sbagliata.\n Questo è accaduto così tante volte che il sistema, per prevenire abusi, ha bloccato l'accesso all'indirizzo IP da cui i tentativi avevano origine.\n\nNel caso non fossi tu a fare questi tentativi di accesso, ignora questo messaggio. Dovresti essere in grado di effettuare il login come al solito.\nSe sei tu il responsabile di questi tentativi di accesso, e ora ti ricordi la password, o se vuoi usare la funzione 'Reset della Password' hai la possibilità di sbloccare l'indirizzo IP cliccando su questo link:\n%s\n\nCordiali saluti, il gestore automatico del sito\n\nNota: Questo è un messaggio generato automaticamente." 13 | -------------------------------------------------------------------------------- /language/it-IT/it-IT.plg_system_bfstop.sys.ini: -------------------------------------------------------------------------------- 1 | PLG_SYSTEM_BFSTOP="System - Brute Force Stop" 2 | PLG_SYSTEM_BFSTOP_DESC="

Brute Force Stop

Questo plugin offre gli strumenti per prevenire i Brute-Force-Attacks sulla vostra installazione Joomla!. A questo scopo, il plugin memorizza le informazioni sui tentativi di accesso non riusciti, in modo che quando si raggiunge un numero configurabile di tentativi di accesso non riusciti l'indirizzo IP dell'aggressore possa essere bloccato. Inoltre, è possibile configurare degli avvisi per i tentativi di accesso non riusciti e gli indirizzi IP bloccati, così come un ritardo di tempo variabile per i tentativi di accesso non riuscito.

Non dimenticare di configurare e pubblicare il plugin dopo l'installazione!
Se avete domande sul plugin, visitate il sito del progetto su GitHub. In caso di problemi quando si utilizza il plugin, non esitate a segnalarli in issue tracker!

Alcune parti di questo plugin sono state ispirate dai seguenti plugin: Login Failed Log, Redirect Failed Logins e Ban IP Address/Range. Grazie e mille per i plugin di questi autori!
Brute Force Stop è un PluginJoomla!, pubblicato con licenza GNU General Public License.
" 3 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_LABEL="Attiva il Blocco" 4 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_DESC="Questo plugin dovrebbe bloccare gli indirizzi IP. Quando disattivato, non verranno aggiunti nuovi indirizzi IP alla lista degli indirizzi bloccati, e nemmeno gli indirizzi IP già presenti in tale lista verranno ancora bloccati (la lista sarà però preservata)." 5 | PLG_SYSTEM_BFSTOP_USERID_LABEL="Seleziona un utente" 6 | PLG_SYSTEM_BFSTOP_USERID_DESC="Seleziona l'utente a cui vuoi che siano inviate le notifiche." 7 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_LABEL="Indirizzo Email" 8 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_DESC="Inserisci l'Indirizzo Email dove vuoi che le notifiche vengano inviate." 9 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_LABEL="Messaggi falliti per giorno" 10 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_DESC="Quante volte al giorno vuoi che vengano notificati i tentativi di accesso fallito." 11 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_LABEL="Messaggi Bloccati per giorno" 12 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_DESC="Quante volte al giorno vuoi che vengano notificati gli IP bloccati." 13 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_LABEL="Ritardo" 14 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_DESC="Ritardo (in secondi) nel caso di tentativo fallito di accesso." 15 | PLG_SYSTEM_BFSTOP_LOGLEVEL_LABEL="Registrazione" 16 | PLG_SYSTEM_BFSTOP_LOGLEVEL_DESC="Determina se deve essere creato un file di log sulle attività del plugin (dovrebbe essere necessario solo in caso di problemi; il file di log si trova nella directory logs con nome plg_system_bfstop.log.php). È inoltre possibile configurare il livello di dettaglio del log: ad esempio, se impostato su ERRORE scriverè nel file di log solo le informazioni sul malfunzionamento." 17 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_LABEL="Soglia del Blocco" 18 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_DESC="Quante volte un accesso non autorizzato può essere provato prima che l'IP venga bloccato." 19 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_LABEL="Messaggio Bloccato" 20 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_DESC="Il messaggio che vuoi mostrare nella finestra del browser di un utente il cui IP è stato bloccato a causa di troppi tentativi di accesso non riusciti. Se lasciato vuoto, verrà visualizzato il messaggio predefinito: 'Il tuo indirizzo IP è stato bloccato perché ci sono stati troppi tentativi di accesso non riusciti in breve tempo.'" 21 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_LABEL="Durata del Blocco" 22 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_DESC="Determina per quanto tempo un indirizzo IP viene bloccato prima che venga ripristinato l'accesso al sito" 23 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_LABEL="Tentativi rimasti" 24 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_DESC="Attiva o disattiva gli avvisi per i tentativi rimasti; se abilitato, l'utente dopo ogni tentativo di login fallito, vede un messaggio nella form di login su quanti tentativi di accesso gli sono rimasti prima che l'indirizzo IP venga bloccato. Questa impostazione è attiva solo se il Blocco è abilitato (se il Blocco è disattivato, la voce 'residua' non avrebbero senso)." 25 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_LABEL="Messaggio di blocco per l'utente" 26 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_DESC="Quando è attivata, in caso di un indirizzo IP bloccato, una notifica verrà inviata all'utente che ha cercato di effettuare l'accesso (ovviamente solo nel caso in cui si tratti di un nome utente esistente)." 27 | PLG_SYSTEM_BFSTOP_USE_HTTP_ERROR_LABEL="Utilizza HTTP Error" 28 | PLG_SYSTEM_BFSTOP_USE_HTTP_ERROR_DESC="Se abilitato, bfstop invierà il codice si stato 403 (Proibito) se l'IP dell'utente è bloccato." 29 | PLG_SYSTEM_BFSTOP_ENABLED="abilitato" 30 | PLG_SYSTEM_BFSTOP_DISABLED="disabilitato" 31 | PLG_SYSTEM_BFSTOP_NOTIFY_UNLIMITED="illimitato" 32 | PLG_SYSTEM_BFSTOP_NOTIFY_NEVER="mai" 33 | PLG_SYSTEM_BFSTOP_BLOCK_UNLIMITED="illimitato" 34 | PLG_SYSTEM_BFSTOP_BLOCK_5MINUTES="5 Minuti" 35 | PLG_SYSTEM_BFSTOP_BLOCK_10MINUTES="10 Minuti" 36 | PLG_SYSTEM_BFSTOP_BLOCK_15MINUTES="15 Minuti" 37 | PLG_SYSTEM_BFSTOP_BLOCK_30MINUTES="30 Minuti" 38 | PLG_SYSTEM_BFSTOP_BLOCK_1HOUR="1 Ora" 39 | PLG_SYSTEM_BFSTOP_BLOCK_2HOURS="2 Ore" 40 | PLG_SYSTEM_BFSTOP_BLOCK_4HOURS="4 Ore" 41 | PLG_SYSTEM_BFSTOP_BLOCK_8HOURS="8 Ore" 42 | PLG_SYSTEM_BFSTOP_BLOCK_24HOURS="1 Giorno" 43 | PLG_SYSTEM_BFSTOP_BLOCK_1WEEK="1 Settimana" 44 | PLG_SYSTEM_BFSTOP_BLOCK_30DAYS="30 Giorni" 45 | PLG_SYSTEM_BFSTOP_MAX_BLOCKS_BEFORE_LABEL="Permanente dopo" 46 | PLG_SYSTEM_BFSTOP_MAX_BLOCKS_BEFORE_DESC="Determina dopo quanti tentativi bloccati sarà attivato un blocco permanente. Si contano anche i blocchi che sono stati rimossi (cioè sbloccati) con il condice-token; solo gli sblocchi fatti tramite il backend verranno ignorati." 47 | PLG_SYSTEM_BFSTOP_MAX_BLOCK_NEVER="Mai" 48 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_ORIGIN_LABEL="Attivo per" 49 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_ORIGIN_DESC="Determina per quali parti del sito Joomla! il plugin sarà attivo. Se impostato solo per il frontend o per il backend, l'altra parte non sarà considerata per nessuna delle funzionalità (ad esempio se è configurato solo per il backend, i tentativi falliti di accesso dal frontend non saranno registrati; così come gli accessi con successo dal frontend non azzereranno il contatore di accessi falliti). Considera che un blocco ha effetto sempre sull'intero sito, non importa cosa è impostato qui!" 50 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_FRONTEND="Solo Frontend" 51 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_BACKEND="Solo Backend" 52 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_BOTH="Frontend e Backend" 53 | PLG_SYSTEM_BFSTOP_FATAL="Errore Irreversibile" 54 | PLG_SYSTEM_BFSTOP_INFO="Messaggio infomrativo" 55 | PLG_SYSTEM_BFSTOP_DEBUG="Informazioni dettagliate" 56 | PLG_SYSTEM_BFSTOP_DELETE_OLD_ENTRIES_LABEL="Rimuovere i vecchi tentativi" 57 | PLG_SYSTEM_BFSTOP_DELETE_OLD_ENTRIES_DESC="Elimina i tentativi di Login falliti più vecchi del numero di settimane fornite in questo campo (impostato a 0 disabilita l'eliminazione delle vecchie voci)." 58 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_LABEL="Ritardo adattivo" 59 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_DESC="Attiva per adattare il ritardo all'attuale tasso di accessi falliti. Aumenterà il ritardo ogni volta che c'è un aumento del numero di accessi come contromisura per gli attacchi distribuiti." 60 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_MAX_LABEL="Ritardo massimo" 61 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_MAX_DESC="Il ritardo massimo per la risposta ai tentativi di accesso non riusciti, quando il ritardo adattivo è attivato" 62 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MIN_LABEL="Soglia minima" 63 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MIN_DESC="La soglia alla quale il ritardo adattivo inizia a entrare in azione (misurata in numero di accessi non riusciti nelle ultime ore)" 64 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MAX_LABEL="Soglia massima" 65 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MAX_DESC="La soglia alla quale il ritardo adattativo raggiunge il massimo ritardo (misurata in numero di accessi non riusciti nelle ultime ore)" 66 | PLG_SYSTEM_BFSTOP_DELAY_FIELDSET_LABEL="Ritardo" 67 | -------------------------------------------------------------------------------- /language/nl-NL/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /language/nl-NL/nl-NL.plg_system_bfstop.ini: -------------------------------------------------------------------------------- 1 | PLG_SYSTEM_BFSTOP_FAILED_LOGIN_ATTEMPT="%s: Mislukte login pogingen op %s" 2 | PLG_SYSTEM_BFSTOP_USERNAME="Gebruikersnaam" 3 | PLG_SYSTEM_BFSTOP_IPADDRESS="IP-Addres" 4 | PLG_SYSTEM_BFSTOP_ERROR="Fout" 5 | PLG_SYSTEM_BFSTOP_DATETIME="Datum en tijd" 6 | PLG_SYSTEM_BFSTOP_ORIGIN="Oorsprong" 7 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_BODY="%2$s: IP Address %1$s geblokkeerd omdat er te veel mislukte inlogpogingen in een korte tijd zijn geweest. Dit zijn alle inlogpogingen die vanaf dit adres zijn geregistreerd:\n\n%3$s\n\nLet op: Dit overzicht kan uit meer pogingen bestaan dan die recent voor een blokkade hebben gezorgd. Er kunnen namelijk pogingen in het verleden geweest zijn die toen al tot een tijdelijke blokkade hebben geleid, of pogingen die toen qua tijd te ver uit elkaar lagen maar nu wel relevant zijn!" 8 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_SUBJECT="%s: Geblokkeerd IP adres %s" 9 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_MESSAGE="Uw IP-adres is geblokkeerd omdat er te veel mislukte inlogpogingen in een korte tijd geweest zijn." 10 | PLG_SYSTEM_BFSTOP_X_ATTEMPTS_LEFT="U heeft %d poging(en) over voordat uw IP adres geblokkeerd wordt." 11 | PLG_SYSTEM_BFSTOP_BLOCKED_SUBJECT="%s: Mislukte login pogingen" 12 | PLG_SYSTEM_BFSTOP_BLOCKED_BODY="Hallo!\n\nIemand probeert aan te melden op website '%s' met uw gebruikersnaam, maar daarbij is een onjuist wachtwoord gebruikt.\nDit is zo vaak gebeurd dat het systeem de toegang heeft geblokkeerd voor het IP-adres waar vandaan deze loginpogingen gedaan zijn. Deze blokkade is om verder misbruik te voorkomen.\n\nIndien u niet zelf deze loginpogingen deed, kunt u dit bericht negeren. U kunt nog altijd inloggen zoals gebruikelijk want dan is uw IP adres niet geblokkeerd.\nWaren het wel uw login pogingen en u weet nu ofwel alsnog het goede wachtwoord of u wilt de 'Reset wachtwoord' functie gebruiken, dan heeft u de mogelijkheid de blokkering van uw IP-adres op te heffen door op deze link te klikken:\n%s\n\nMet vriendelijke groet, de automatische websitebeheerder.\n\nAttentie: Dit is een automatisch gegenereerd bericht." 13 | PLG_SYSTEM_BFSTOP_PASSWORD_RESET_RECOMMENDED="Een aantal van uw aanlogpogingen zijn recent mislukt. Als u binnenkort weer met een foutief wachtwoord aanlogt, zal uw IP-adres worden geblokkeerd. Om dit te voorkomen wordt u aangeraden nu alvast uw wachtwoord te resetten!" 14 | PLG_SYSTEM_BFSTOP_BLOCKED_CLIENT_IP="Uw IP-adres is: %s." 15 | -------------------------------------------------------------------------------- /language/nl-NL/nl-NL.plg_system_bfstop.sys.ini: -------------------------------------------------------------------------------- 1 | PLG_SYSTEM_BFSTOP="Systeem - Brute Force Stop" 2 | PLG_SYSTEM_BFSTOP_DESC="

Brute Force Stop

Dit plugin verstrekt middelen om Brute-Force-aanvallen af te wenden op uw Joomla-installatie. Voor dit doel slaat de plugin informatie over mislukte inlogpogingen op, zodat wanneer het bereiken van een configureerbare aantal dergelijke login pogingen is mislukt de aanvallers IP-adres kan worden geblokkeerd. Bovendien kunt u berichten over mislukte aanmeldingen en geblokkeerde IP-adressen configureren, naast een variabele vertraging voor een mislukte login poging.

Vergeet niet de plugin te configureren en te publiceren na de installatie!
Als u meer wilt over de plugin weten, ga dan naar de project site op github. Bij eventuele problemen bij het gebruik van de plugin, aarzel niet om dit te melden in de issue tracker!

In sommige delen is deze plugin geïnspireerd door de volgende plugins: Login Failed Log, Redirect Failed Logins en Ban IP Address/Range. Een bedankje voor de auteurs van deze plugins!
Brute Force Stop is een Joomla! Plugin, gepubliceerd onder de GNU General Public License.
" 3 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_LABEL="IP adres blokkering" 4 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_DESC="Of deze plugin blokkeren van IP-adressen moet toepassen. Wanneer uitgeschakeld, zullen geen nieuwe IP-adressen aan de lijst met geblokkeerde adressen worden toegevoegd, en zelfs IP-adressen al op die lijst zullen niet meer worden geblokkeerd (de lijst zelf zal worden bewaard)." 5 | PLG_SYSTEM_BFSTOP_USERID_LABEL="Selecteer een gebruiker" 6 | PLG_SYSTEM_BFSTOP_USERID_DESC="Selecteer de gebruiker aan wie meldingen moeten worden verzonden." 7 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_LABEL="Zelf gekozen email adres(sen)" 8 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_DESC="Voer het e-mailadres in waar meldingen naartoe moeten worden verzonden. U kunt ook meerdere e-mailadressen opgeven. Scheid deze dan met een punt-komma teken (;)." 9 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_LABEL="Aantal berichten over mislukte aanlogpogingen per dag" 10 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_DESC="Hoe vaak informeren over mislukte aanmeldingen tijdens 1 dag" 11 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_LABEL="Aantal berichten over geblokkeerde IP adressen per dag" 12 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_DESC="Hoe vaak informeren over geblokkeerde IP adressen gedurende 1 dag." 13 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_LABEL="Vertraging" 14 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_DESC="Vertraging (in seconden) na een mislukte aanlogpoging." 15 | PLG_SYSTEM_BFSTOP_LOGLEVEL_LABEL="Logging" 16 | PLG_SYSTEM_BFSTOP_LOGLEVEL_DESC="Hiermee bepaalt u of een Logfile over de activiteiten van de plugin moet worden gemaakt (Dit is alleen nodig in geval van een probleem; het logbestand kan worden gevonden in de logs directory onder de naam plg_system_bfstop.log.php)." 17 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_LABEL="Max aantal foutieve pogingen" 18 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_DESC="Hoe vaak mag een foutieve login worden gedaan." 19 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_LABEL="Blokkerings bericht" 20 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_DESC="Het bericht dat u wilt weergeven in het browservenster van een gebruiker waarvan de IP is geblokkeerd vanwege te veel mislukte inlogpogingen. Als u niets invoert, word dit standaardbericht getoond: 'Uw IP-adres is geblokkeerd omdat er te veel mislukte inlogpogingen in een korte tijd zijn geweest.'" 21 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_LABEL="Tijdsduur blokkering" 22 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_DESC="Hiermee bepaalt u hoe lang een IP-adres is geblokkeerd voordat het is toegestaan om weer toegang tot de site te krijgen." 23 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_LABEL="Meld resterende pogingen" 24 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_DESC="Hiermee kiest u of meldingen over resterende pogingen aan of uit moeten. Indien ingeschakeld dan zal de gebruiker na elke mislukte login poging een bericht zien in het aanmeldingsformulier met hoeveel login pogingen nog beschikbaar zijn voordat het IP-adres wordt geblokkeerd. Deze instelling is alleen actief als blokkeren-functie is ingeschakeld (Als blokkeren is uitgeschakeld, zou 'Resterende pogingen' niet zinvol zijn)." 25 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_LABEL="Bestaande gebruiker informeren over blokkade" 26 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_DESC="Wanneer ingeschakeld zal in het geval van een geblokkeerd IP-adres, een kennisgeving via email worden verzonden naar de gebruiker die probeert aan te melden (natuurlijk alleen in geval het een bestaande gebruikersnaam is)." 27 | PLG_SYSTEM_BFSTOP_USE_HTTP_ERROR_LABEL="Stuur 'HTTP Error' foutboodschap" 28 | PLG_SYSTEM_BFSTOP_USE_HTTP_ERROR_DESC="Indien ingeschakeld zal bfstop een HTTP 403 (Forbidden) antwoord sturen naar het IP adres van de geblokkeerde gebruiker, als deze een aanlogpoging doet." 29 | PLG_SYSTEM_BFSTOP_ENABLED="ingeschakeld" 30 | PLG_SYSTEM_BFSTOP_DISABLED="uitgeschakeld" 31 | PLG_SYSTEM_BFSTOP_NOTIFY_UNLIMITED="onbeperkt" 32 | PLG_SYSTEM_BFSTOP_NOTIFY_NEVER="nooit" 33 | PLG_SYSTEM_BFSTOP_BLOCK_UNLIMITED="onbeperkt" 34 | PLG_SYSTEM_BFSTOP_BLOCK_5MINUTES="5 minuten" 35 | PLG_SYSTEM_BFSTOP_BLOCK_10MINUTES="10 minuten" 36 | PLG_SYSTEM_BFSTOP_BLOCK_15MINUTES="15 minuten" 37 | PLG_SYSTEM_BFSTOP_BLOCK_30MINUTES="30 minuten" 38 | PLG_SYSTEM_BFSTOP_BLOCK_1HOUR="1 uur" 39 | PLG_SYSTEM_BFSTOP_BLOCK_2HOURS="2 uur" 40 | PLG_SYSTEM_BFSTOP_BLOCK_4HOURS="4 uur" 41 | PLG_SYSTEM_BFSTOP_BLOCK_8HOURS="8 uur" 42 | PLG_SYSTEM_BFSTOP_BLOCK_24HOURS="1 dag" 43 | PLG_SYSTEM_BFSTOP_BLOCK_1WEEK="1 Week" 44 | PLG_SYSTEM_BFSTOP_BLOCK_30DAYS="30 Dagen" 45 | PLG_SYSTEM_BFSTOP_MAX_BLOCKS_BEFORE_LABEL="Permanent blokkeren na" 46 | PLG_SYSTEM_BFSTOP_MAX_BLOCKS_BEFORE_DESC="Bepaalt na hoeveel blokkades een IP adres een permanente blokkade moet worden toegekend." 47 | PLG_SYSTEM_BFSTOP_MAX_BLOCK_NEVER="Nooit" 48 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_ORIGIN_LABEL="Activeer detectie voor" 49 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_ORIGIN_DESC="Bepaalt voor welke delen van de site deze plugin actief moet zijn. Als alleen frontend of alleen backend wordt gekozen, dan zal een foutieve aanlogpoging in de back-end NIET gereset worden door een goede aanlogpoging in de frond-end en omgekeerd. Let wel: Als er een blokkade ontstaat is deze wel voor de HELE site. Dus zowel de frond-end als de back-end!" 50 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_FRONTEND="alleen de front-end" 51 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_BACKEND="alleen de back-end" 52 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_BOTH="zowel de front-end als back-end" 53 | PLG_SYSTEM_BFSTOP_FATAL="Fatale fouten" 54 | PLG_SYSTEM_BFSTOP_INFO="Informatieve meldingen" 55 | PLG_SYSTEM_BFSTOP_DEBUG="Gedetailleerde meldingen" 56 | PLG_SYSTEM_BFSTOP_DELETE_OLD_ENTRIES_LABEL="Verwijder oude foutieve aanlogpogingen na (weken)" 57 | PLG_SYSTEM_BFSTOP_DELETE_OLD_ENTRIES_DESC="Verwijder foutieve aanlogpogingen ouder dan het aantal weken dat wordt ingegeven in dit veld (gebruik waarde 0 om nooit op te schonen)." 58 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_LABEL="Zelflerende vertraging" 59 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_DESC="Activeer de zelflerende vertraging zodat deze zich aanpast aan het actuele aantal foutieve aanlogpogingen. De vertraging tussen de logins wordt dan dynamisch in tijd verhoogd als tegenmaatregel tegen bijvoorbeeld een gedistribueerde aanval op uw website." 60 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_MAX_LABEL="Maximale vertragingsduur (seconden)" 61 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_MAX_DESC="De maximale vertraging (in seconden) die u wilt toestaan. De vertraging wordt dynamisch naar dit maximum opgebouwd afhankelijk van het aantal mislukte aanlogpoging." 62 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MIN_LABEL="Start extra vertraging bij" 63 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MIN_DESC="De ondergrens (in aantal foutieve aanlogpogingen over laatste uur) voordat de extra vertraging wordt geactiveerd." 64 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MAX_LABEL="Stop extra vertraging bij" 65 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MAX_DESC="De bovengrens (in aantal foutieve aanlogpogingen over laatste uur) waarboven geen extra vertraging meer wordt toegepast." 66 | PLG_SYSTEM_BFSTOP_DELAY_FIELDSET_LABEL="Vertraging" 67 | PLG_SYSTEM_BFSTOP_NOTIFICATION_FIELDSET_LABEL="Informeren" 68 | PLG_SYSTEM_BFSTOP_GROUP_NOTIFICATION_ENABLED_LABEL="Gebruikersgroep informeren" 69 | PLG_SYSTEM_BFSTOP_GROUP_NOTIFICATION_ENABLED_DESC="Indien actief, de volledige hierna te selecteren gebruikersgroep zal worden geïnformeerd over de mislukte aanlogpogingen of geblokkeerde IP-adressen." 70 | PLG_SYSTEM_BFSTOP_USERGROUP_LABEL="Gebruikersgroep" 71 | PLG_SYSTEM_BFSTOP_USERGROUP_DESC="Kies een gebruikersgroep waarvan alle leden zullen worden geïnformeerd over over de mislukte aanlogpogingen of geblokkeerde IP-adressen (indien hierboven geactiveerd). Het is raadzaam om hiervoor een speciale gebruikersgroep samen te stellen of in ieder geval een groep te kiezen waarin met name systeembeheerders zitten zoals in de standaard 'Super Gebruikers' groep." 72 | PLG_SYSTEM_BFSTOP_NOTIFY_USE_PASSWORD_REMINDER_LABEL="Geef wachtwoord reset hint" 73 | PLG_SYSTEM_BFSTOP_NOTIFY_USE_PASSWORD_REMINDER_DESC="Bepaalt of en wanneer een informatieve boodschap gestuurd moet worden als er meerdere malen met een foutief wachtwoord is ingelogd." 74 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_ALWAYS="altijd" 75 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_1LEFT="wanneer er nog 1 aanlogpoging over is" 76 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_2LEFT="wanneer er nog 2 aanlogpogingen over zijn" 77 | PLG_SYSTEM_BFSTOP_BLOCKED_MSG_SHOWIP_LABEL="Toon IP-adres" 78 | PLG_SYSTEM_BFSTOP_BLOCKED_MSG_SHOWIP_DESC="Toon het IP-adres van de gebruiker als dat geblokkeerd is geraakt." 79 | -------------------------------------------------------------------------------- /language/pt-BR/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /language/pt-BR/pt-BR.plg_system_bfstop.ini: -------------------------------------------------------------------------------- 1 | ; Translated over version 0.9.10 by solrac comproperty247(at)gmail.com 2 | ; www.com-property.site11.com 3 | ; Saved as UTF-8 - No BOM 4 | 5 | PLG_SYSTEM_BFSTOP_FAILED_LOGIN_ATTEMPT="%s: Falha na tentativa de login em %s" 6 | PLG_SYSTEM_BFSTOP_USERNAME="Nome" 7 | PLG_SYSTEM_BFSTOP_IPADDRESS="Endereço IP" 8 | PLG_SYSTEM_BFSTOP_ERROR="Erro" 9 | PLG_SYSTEM_BFSTOP_DATETIME="Data e hora" 10 | PLG_SYSTEM_BFSTOP_ORIGEM="Origem" 11 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_BODY="%2$s: Endereço IP bloqueado %1$s devido às várias tentativas falhadas para iniciar a sessão em tão pouco tempo. Número de tentativas:\n\n%3$s" 12 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_SUBJECT="%s: Bloqueado o endereço IP %s" 13 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_MESSAGE="Seu endereço de IP %s foi bloqueado porque houve muitas tentativas de login sem sucesso em um curto espaço de tempo." 14 | PLG_SYSTEM_BFSTOP_X_ATTEMPTS_LEFT="Tem mais %d tentativas(s) antes do seu endereço IP ser bloqueado" 15 | PLG_SYSTEM_BFSTOP_BLOCKED_SUBJECT="% s: Falha tentativas de login" 16 | PLG_SYSTEM_BFSTOP_BLOCKED_BODY="Olá!\n\nAlguém tentou entrar com seu nome de usuário no site '%s', mas usou uma senha errada.\nIsto aconteceu tantas vezes, que o sistema bloqueou o acesso a partir deste endereço IP onde estas tentativas de login tiveram origem para evitar o uso indevido.\n\nNo caso que não foi você a fazer essas tentativas de login, por favor, ignore esta mensagem. Você deve ser capaz de acessar apenas como é de costume.\nSe você foi responsável por estas tentativas de login, e você sabe senha novamente ou se você quiser usar a funcionalidade de 'Redefinir senha', você tem a chance de desbloquear o endereço IP, clicando neste link:\n%s\n\nMelhores cumprimentos, a gestão automática site\n\nNote : Esta é uma mensagem gerada automaticamente." 17 | -------------------------------------------------------------------------------- /language/pt-BR/pt-BR.plg_system_bfstop.sys.ini: -------------------------------------------------------------------------------- 1 | ; Translated over version 0.9.10 by solrac comproperty247(at)gmail.com 2 | ; www.com-property.site11.com 3 | ; Saved as UTF-8 - No BOM 4 | PLG_SYSTEM_BFSTOP="Sistema - Brute Force Stop" 5 | PLG_SYSTEM_BFSTOP_DESC="

Brute Force Stop

Este plugin fornece meios para evitar o Brute-force login na sua instalação do Joomla. Para este efeito, o plugin armazena informações sobre tentativas de login, de modo que quando se atinge um número configurável de tais tentativas de login falhado, o endereço IP do intruso pode ser bloqueado. Além disso, você pode configurar notificações sobre logins que falharam e endereços IP bloqueados, bem como um adiamento variável para uma tentativa de login falhada.

Não se esqueça de configurar e publicar o plugin após a instalação!
Se você tiver alguma dúvida sobre o plugin, visite o site do projeto no github. Caso haja algum problema ao usar o plugin, não hesite em relatá-los no rastreador de problemas!

Em algumas partes, este plugin foi inspirado pelos seguintes plugins:Login Failed Log, Redirect Failed Logins e Ban IP Address/Range. Muito obrigado aos autores destes plugins!
Brute Force Stop é um Joomla! Plugin, publicado sobre licença GNU General Public License.

Tradução para portugues realizada por solrac comproperty247(at)gmail.com
" 6 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_LABEL="Ativar bloqueio" 7 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_DESC="Se este plugin deve bloquear endereços IP ou não. Quando desativado, não há novos endereços IP serem adicionados à lista de endereços bloqueados, e nem mesmo os endereços IP já nessa lista será mais bloqueado (a própria lista será preservada)." 8 | PLG_SYSTEM_BFSTOP_USERID_LABEL="Selecione um Usuário" 9 | PLG_SYSTEM_BFSTOP_USERID_DESC="Selecione o usuário que você gostaria que sejam enviadas notificações." 10 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_LABEL="Endereço de e-mail" 11 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_DESC="Digite o endereço de e-mail onde você gostaria de ter notificações a serem enviadas." 12 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_LABEL="Msgs de logins falhados por dia" 13 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_DESC="Quantas vezes para avisar sobre um login falhou durante um dia" 14 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_LABEL="Msgs de bloqueio por dia" 15 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_DESC="Quantas vezes para avisar sobre um IP bloqueado durante um dia" 16 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_LABEL="Adiamento" 17 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_DESC="Adiamento (em segundos) após um login falhado" 18 | PLG_SYSTEM_BFSTOP_LOGGING_ENABLED_LABEL="Registos" 19 | PLG_SYSTEM_BFSTOP_LOGGING_ENABLED_DESC="Determina se um arquivo de log sobre as atividades do plugin deve ser criado (esta só deve ser necessário em caso de um problema, o arquivo de log pode ser encontrado no diretório de logs com o nome plg_system_bfstop.log.php)" 20 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_LABEL="Limite de bloqueio" 21 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_DESC="Quantas vezes um login pode ser tentado até o IP será bloqueado" 22 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_LABEL="Mensagem de bloqueio" 23 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_DESC="A mensagem que você gostaria de ver na janela do navegador de um usuário cujo IP foi bloqueado por causa de muitas tentativas de login Se estiver em vazio, esta mensagem padrão será exibida:Seu endereço de IP foi bloqueado porque houve muitas tentativas de login sem sucesso em um curto espaço de tempo. " 24 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_LABEL="Duração do bloqueio" 25 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_DESC="Determina quanto tempo o endereço IP é bloqueado antes de ser autorizado o acesso ao site novamente" 26 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_LABEL="Tentativas restantes " 27 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_DESC="Ativa ou desativa as notificações sobre as tentativas restantes, se habilitado, o usuário, após cada tentativa de login falhada, vê uma mensagem no formulário de login sobre quantas tentativas de login ainda estão disponíveis antes do endereço IP será bloqueado." 28 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_LABEL="Mensagem de bloqueio ao usuário" 29 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_DESC="Quando ligado, no caso de um endereço IP bloqueado, uma notificação será enviada para o usuário que tentou fazer login (apenas claro no caso, de existir o nome de usuário)." 30 | PLG_SYSTEM_BFSTOP_ENABLED="ativado" 31 | PLG_SYSTEM_BFSTOP_DISABLED="desativado" 32 | PLG_SYSTEM_BFSTOP_NOTIFY_UNLIMITED="ilimitado" 33 | PLG_SYSTEM_BFSTOP_NOTIFY_NEVER="nunca" 34 | PLG_SYSTEM_BFSTOP_BLOCK_UNLIMITED="ilimitado" 35 | PLG_SYSTEM_BFSTOP_BLOCK_5MINUTES="5 Minutos" 36 | PLG_SYSTEM_BFSTOP_BLOCK_10MINUTES="10 Minutos" 37 | PLG_SYSTEM_BFSTOP_BLOCK_15MINUTES="15 Minutos" 38 | PLG_SYSTEM_BFSTOP_BLOCK_30MINUTES="30 Minutos" 39 | PLG_SYSTEM_BFSTOP_BLOCK_1HOUR="1 Hora" 40 | PLG_SYSTEM_BFSTOP_BLOCK_2HOURS="2 Horas" 41 | PLG_SYSTEM_BFSTOP_BLOCK_4HOURS="4 Horas" 42 | PLG_SYSTEM_BFSTOP_BLOCK_8HOURS="8 Horas" 43 | PLG_SYSTEM_BFSTOP_BLOCK_24HOURS="1 Dia" 44 | -------------------------------------------------------------------------------- /language/pt-PT/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /language/pt-PT/pt-PT.plg_system_bfstop.ini: -------------------------------------------------------------------------------- 1 | ; Translated over version 0.9.10 by solrac comproperty247(at)gmail.com 2 | ; www.com-property.byethost8.com 3 | ; Saved as UTF-8 - No BOM 4 | 5 | PLG_SYSTEM_BFSTOP_FAILED_LOGIN_ATTEMPT="%s: Falha na tentativa de login em %s" 6 | PLG_SYSTEM_BFSTOP_USERNAME="Nome" 7 | PLG_SYSTEM_BFSTOP_IPADDRESS="Endereço IP" 8 | PLG_SYSTEM_BFSTOP_ERROR="Erro" 9 | PLG_SYSTEM_BFSTOP_DATETIME="Data e hora" 10 | PLG_SYSTEM_BFSTOP_ORIGEM="Origem" 11 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_BODY="%2$s: Endereço IP bloqueado %1$s devido às várias tentativas falhadas para iniciar a sessão em tão pouco tempo. Número de tentativas:\n\n%3$s" 12 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_SUBJECT="%s: Bloqueado o endereço IP %s" 13 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_MESSAGE="Seu endereço de IP %s foi bloqueado porque houve muitas tentativas de login sem sucesso em um curto espaço de tempo." 14 | PLG_SYSTEM_BFSTOP_X_ATTEMPTS_LEFT="Tem mais %d tentativas(s) antes do seu endereço IP ser bloqueado" 15 | PLG_SYSTEM_BFSTOP_BLOCKED_SUBJECT="% s: Falha tentativas de login" 16 | PLG_SYSTEM_BFSTOP_BLOCKED_BODY="Olá!\n\nAlguém tentou entrar com seu nome de usuário no site '%s', mas usou uma senha errada.\nIsto aconteceu tantas vezes, que o sistema bloqueou o acesso a partir deste endereço IP onde estas tentativas de login tiveram origem para evitar o uso indevido.\n\nNo caso que não foi você a fazer essas tentativas de login, por favor, ignore esta mensagem. Você deve ser capaz de acessar apenas como é de costume.\nSe você foi responsável por estas tentativas de login, e você sabe senha novamente ou se você quiser usar a funcionalidade de 'Redefinir senha', você tem a chance de desbloquear o endereço IP, clicando neste link:\n%s\n\nMelhores cumprimentos, a gestão automática site\n\nNote : Esta é uma mensagem gerada automaticamente." 17 | -------------------------------------------------------------------------------- /language/pt-PT/pt-PT.plg_system_bfstop.sys.ini: -------------------------------------------------------------------------------- 1 | ; Translated over version 0.9.10 by solrac comproperty247(at)gmail.com 2 | ; www.com-property.byethost8.com 3 | ; Saved as UTF-8 - No BOM 4 | 5 | PLG_SYSTEM_BFSTOP="Sistema - Brute Force Stop" 6 | PLG_SYSTEM_BFSTOP_DESC="

Brute Force Stop

Este plugin fornece meios para evitar o Brute-force login na sua instalação do Joomla. Para este efeito, o plugin armazena informações sobre tentativas de login, de modo que quando se atinge um número configurável de tais tentativas de login falhado, o endereço IP do intruso pode ser bloqueado. Além disso, você pode configurar notificações sobre logins que falharam e endereços IP bloqueados, bem como um adiamento variável para uma tentativa de login falhada.

Não se esqueça de configurar e publicar o plugin após a instalação!
Se você tiver alguma dúvida sobre o plugin, visite o site do projeto no github. Caso haja algum problema ao usar o plugin, não hesite em relatá-los no rastreador de problemas!

Em algumas partes, este plugin foi inspirado pelos seguintes plugins:Login Failed Log, Redirect Failed Logins e Ban IP Address/Range. Muito obrigado aos autores destes plugins!
Brute Force Stop é um Joomla! Plugin, publicado sobre licença GNU General Public License.

Tradução para portugues realizada por solrac comproperty247(at)gmail.com
" 7 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_LABEL="Ativar bloqueio" 8 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_DESC="Se este plugin deve bloquear endereços IP ou não. Quando desativado, não há novos endereços IP serem adicionados à lista de endereços bloqueados, e nem mesmo os endereços IP já nessa lista será mais bloqueado (a própria lista será preservada)." 9 | PLG_SYSTEM_BFSTOP_USERID_LABEL="Selecione um Usuário" 10 | PLG_SYSTEM_BFSTOP_USERID_DESC="Selecione o usuário que você gostaria que sejam enviadas notificações." 11 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_LABEL="Endereço de e-mail" 12 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_DESC="Digite o endereço de e-mail onde você gostaria de ter notificações a serem enviadas." 13 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_LABEL="Msgs de logins falhados por dia" 14 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_DESC="Quantas vezes para avisar sobre um login falhou durante um dia" 15 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_LABEL="Msgs de bloqueio por dia" 16 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_DESC="Quantas vezes para avisar sobre um IP bloqueado durante um dia" 17 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_LABEL="Adiamento" 18 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_DESC="Adiamento (em segundos) após um login falhado" 19 | PLG_SYSTEM_BFSTOP_LOGGING_ENABLED_LABEL="Registos" 20 | PLG_SYSTEM_BFSTOP_LOGGING_ENABLED_DESC="Determina se um arquivo de log sobre as atividades do plugin deve ser criado (esta só deve ser necessário em caso de um problema, o arquivo de log pode ser encontrado no diretório de logs com o nome plg_system_bfstop.log.php)" 21 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_LABEL="Limite de bloqueio" 22 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_DESC="Quantas vezes um login pode ser tentado até o IP será bloqueado" 23 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_LABEL="Mensagem de bloqueio" 24 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_DESC="A mensagem que você gostaria de ver na janela do navegador de um usuário cujo IP foi bloqueado por causa de muitas tentativas de login Se estiver em vazio, esta mensagem padrão será exibida:Seu endereço de IP foi bloqueado porque houve muitas tentativas de login sem sucesso em um curto espaço de tempo. " 25 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_LABEL="Duração do bloqueio" 26 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_DESC="Determina quanto tempo o endereço IP é bloqueado antes de ser autorizado o acesso ao site novamente" 27 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_LABEL="Tentativas restantes " 28 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_DESC="Ativa ou desativa as notificações sobre as tentativas restantes, se habilitado, o usuário, após cada tentativa de login falhada, vê uma mensagem no formulário de login sobre quantas tentativas de login ainda estão disponíveis antes do endereço IP será bloqueado." 29 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_LABEL="Mensagem de bloqueio ao usuário" 30 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_DESC="Quando ligado, no caso de um endereço IP bloqueado, uma notificação será enviada para o usuário que tentou fazer login (apenas claro no caso, de existir o nome de usuário)." 31 | PLG_SYSTEM_BFSTOP_ENABLED="ativado" 32 | PLG_SYSTEM_BFSTOP_DISABLED="desativado" 33 | PLG_SYSTEM_BFSTOP_NOTIFY_UNLIMITED="ilimitado" 34 | PLG_SYSTEM_BFSTOP_NOTIFY_NEVER="nunca" 35 | PLG_SYSTEM_BFSTOP_BLOCK_UNLIMITED="ilimitado" 36 | PLG_SYSTEM_BFSTOP_BLOCK_5MINUTES="5 Minutos" 37 | PLG_SYSTEM_BFSTOP_BLOCK_10MINUTES="10 Minutos" 38 | PLG_SYSTEM_BFSTOP_BLOCK_15MINUTES="15 Minutos" 39 | PLG_SYSTEM_BFSTOP_BLOCK_30MINUTES="30 Minutos" 40 | PLG_SYSTEM_BFSTOP_BLOCK_1HOUR="1 Hora" 41 | PLG_SYSTEM_BFSTOP_BLOCK_2HOURS="2 Horas" 42 | PLG_SYSTEM_BFSTOP_BLOCK_4HOURS="4 Horas" 43 | PLG_SYSTEM_BFSTOP_BLOCK_8HOURS="8 Horas" 44 | PLG_SYSTEM_BFSTOP_BLOCK_24HOURS="1 Dia" 45 | -------------------------------------------------------------------------------- /language/ru-RU/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /language/ru-RU/ru-RU.plg_system_bfstop.ini: -------------------------------------------------------------------------------- 1 | PLG_SYSTEM_BFSTOP_FAILED_LOGIN_ATTEMPT="%s: Неудачные попытки %s" 2 | PLG_SYSTEM_BFSTOP_USERNAME="Имя пользователя" 3 | PLG_SYSTEM_BFSTOP_IPADDRESS="IP-адрес" 4 | PLG_SYSTEM_BFSTOP_ERROR="Ошибка" 5 | PLG_SYSTEM_BFSTOP_DATETIME="Дата и время" 6 | PLG_SYSTEM_BFSTOP_ORIGIN="Источник" 7 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_BODY="IP адрес %1$s был заблокирован, так как с него было слишком много неудачных попыток входа на сайт %2$s \n\n%3$s" 8 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_ADDRESS_SUBJECT="%s: IP адрес %s заблокирован" 9 | PLG_SYSTEM_BFSTOP_BLOCKED_IP_MESSAGE="Ваш IP адрес будет заблокирован, потому что было слишком много неудачных попыток входа в течение короткого времени." 10 | PLG_SYSTEM_BFSTOP_X_ATTEMPTS_LEFT="У Вас осталось %d попытки(а) до того как ваш IP адрес будет заблокирован" 11 | PLG_SYSTEM_BFSTOP_BLOCKED_SUBJECT="%s: Неудачные попытки входа" 12 | PLG_SYSTEM_BFSTOP_BLOCKED_BODY="Привет!\n\nКто-то пытался войти под Вашим именем на сайт '%s', но ввел неправильный пароль.\nЭто произошло так много раз, что система заблокировала IP-адрес, с которого эти попытки входа возникали для предотвращения взлома.\n\nВ случае, если эти попытки входа делали не Вы, не обращайте внимания на это сообщение. Вы сможете войти в на сайт как обычно.\nЕсли это Вы пытались войти и забыли пароль, или хотите использовать функцию 'Сброс пароля', у вас есть шанс разблокировать IP адрес, нажав на эту ссылку:\n%s\n\nС уважением, система Brute Force Stop\n\nP.S.: Это сообщение сгенерировано автоматически." 13 | PLG_SYSTEM_BFSTOP_PASSWORD_RESET_RECOMMENDED="Было замечено, что одна или несколько Ваших попыток входа в систему в последнее время завершились неудачей. При очередной попытке, вскоре Вы будете заблокированы. Поэтому рекомендуется использовать функцию восстановления пароля!" 14 | PLG_SYSTEM_BFSTOP_BLOCKED_CLIENT_IP="Ваш IP-адрес: %s." 15 | -------------------------------------------------------------------------------- /language/ru-RU/ru-RU.plg_system_bfstop.sys.ini: -------------------------------------------------------------------------------- 1 | PLG_SYSTEM_BFSTOP="Безопасность - Brute Force Stop" 2 | PLG_SYSTEM_BFSTOP_DESC="

Brute Force Stop

Этот плагин предоставляет средства для предотвращения Brute Force атак на Joomla. Плагин учитывает количество неудачных попыток входа, так что при достижении установленного количества таких неудачных попыток входа IP-адрес атакующего может быть заблокирован. Кроме того, вы можете настроить уведомления о неудачных попытках входа и о блокировке IP-адреса, а также временной задержки между неудачными входами на сервер.

Не забудьте настроить и опубликовать плагин после установки!
Если у вас возникли вопросы о плагине, пожалуйста, посетите сайт проекта GitHub. В случае возникновения проблем при использовании плагина, не стесняйтесь сообщить о них на форуме!

В некоторой степени, авторы этого плагина были вдохновлены следующими плагинами: Login Failed Log, Redirect Failed Logins и Ban IP Address/Range. Большое спасибо авторам этих плагинов!
Brute Force Stop - Joomla! плагин, опубликован в соответствии с лицензией GNU General Public License.
Перевод на русский язык - Raven.
" 3 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_LABEL="Включить блокировку" 4 | PLG_SYSTEM_BFSTOP_BLOCK_ENABLED_DESC="Если этот плагин должен блокировать IP-адреса. Если отключено, новые IP адреса будут добавлены в бан лист, но блокироваться не будут (однако сам список будет сохранен)." 5 | PLG_SYSTEM_BFSTOP_USERID_LABEL="Выберите пользователя" 6 | PLG_SYSTEM_BFSTOP_USERID_DESC="Выберите пользователя с которого будут отправляться уведомления." 7 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_LABEL="Email адрес" 8 | PLG_SYSTEM_BFSTOP_EMAIL_ADDRESS_DESC="Введите адрес электронной почты, с которого будут отправляться уведомления." 9 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_LABEL="Сообщений в день о попытках входа" 10 | PLG_SYSTEM_BFSTOP_NOTIFY_FAILED_NUMBER_DESC="Сколько раз уведомлять о неудачных попытках входа в течение одного дня" 11 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_LABEL="Сообщений в день о блокированных IP" 12 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_NUMBER_DESC="Сколько раз уведомлять о блокированных IP в течение одного дня" 13 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_LABEL="Задержка" 14 | PLG_SYSTEM_BFSTOP_DELAY_DURATION_DESC="Задержка (в секундах) между неудачными попыткам входа" 15 | PLG_SYSTEM_BFSTOP_LOGLEVEL_LABEL="Запись в журнал ошибок" 16 | PLG_SYSTEM_BFSTOP_LOGLEVEL_DESC="Устанавливает какой тип ошибок будет записываться в лог (это необходимо только в случае возникновения проблем; лог-файл можно найти в папке с логами под названием plg_system_bfstop.log.php). Вы также можете настроить, что записывать в лог-файл, например: выберите 'Ошибка', чтобы в лог записывались только сообщения об ошибке плагина или выберите 'Детальная информация' для вывода всех ошибок и предупреждений плагина." 17 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_LABEL="Порог блокировки" 18 | PLG_SYSTEM_BFSTOP_BLOCK_NUMBER_DESC="Сколько попыток входа можно сделать, до того как IP будет заблокирован" 19 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_LABEL="Сообщение о блокировке" 20 | PLG_SYSTEM_BFSTOP_BLOCKED_MESSAGE_DESC="Сообщение, которое будет появляться в окне браузера пользователя, IP адрес которого был заблокирован из-за слишком большого числа неудачных попыток входа. Если оставить пустым, то по умолчанию будет показано это сообщение: 'Ваш IP-адрес заблокирован из-за слишком большого количества неудачных попыток входа в течение короткого времени.'" 21 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_LABEL="Длительность блокировки" 22 | PLG_SYSTEM_BFSTOP_BLOCK_DURATION_DESC="Определяет, на сколько IP адрес будет заблокирован, прежде чем ему снова будет разрешен доступ на сайт" 23 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_LABEL="Оставшиеся попытки" 24 | PLG_SYSTEM_BFSTOP_NOTIFY_REMAINING_ATTEMPTS_DESC="Включает или отключает уведомления об оставшихся попытках, если включена, то пользователь будет после каждой неудачной попытки входа, см. сообщение в форме входа о том, сколько еще попыток входа осталось до того как IP-адрес будет заблокирован. Эта настройка активна только при включенной блокировке (если блокировка отключена, 'оставшиеся' попытки не имеют смысла)." 25 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_LABEL="Сообщение заблокированному пользователю" 26 | PLG_SYSTEM_BFSTOP_NOTIFY_BLOCKED_USER_DESC="Если эта функция включена, в случае блокировки IP-адреса будет отправлено уведомление пользователю, который пытался войти (только, конечно, если это имя пользователя существует)." 27 | PLG_SYSTEM_BFSTOP_USE_HTTP_ERROR_LABEL="Включить ошибку HTTP" 28 | PLG_SYSTEM_BFSTOP_USE_HTTP_ERROR_DESC="Если включено, bfstop отправит код состояния 403 (Forbidden), если IP-адрес пользователя заблокирован" 29 | PLG_SYSTEM_BFSTOP_ENABLED="включено" 30 | PLG_SYSTEM_BFSTOP_DISABLED="отключено" 31 | PLG_SYSTEM_BFSTOP_NOTIFY_UNLIMITED="без ограничений" 32 | PLG_SYSTEM_BFSTOP_NOTIFY_NEVER="никогда" 33 | PLG_SYSTEM_BFSTOP_BLOCK_UNLIMITED="без ограничений" 34 | PLG_SYSTEM_BFSTOP_BLOCK_5MINUTES="5 минут" 35 | PLG_SYSTEM_BFSTOP_BLOCK_10MINUTES="10 минут" 36 | PLG_SYSTEM_BFSTOP_BLOCK_15MINUTES="15 минут" 37 | PLG_SYSTEM_BFSTOP_BLOCK_30MINUTES="30 минут" 38 | PLG_SYSTEM_BFSTOP_BLOCK_1HOUR="1 час" 39 | PLG_SYSTEM_BFSTOP_BLOCK_2HOURS="2 часа" 40 | PLG_SYSTEM_BFSTOP_BLOCK_4HOURS="4 часа" 41 | PLG_SYSTEM_BFSTOP_BLOCK_8HOURS="8 часов" 42 | PLG_SYSTEM_BFSTOP_BLOCK_24HOURS="1 день" 43 | PLG_SYSTEM_BFSTOP_BLOCK_1WEEK="1 неделя" 44 | PLG_SYSTEM_BFSTOP_BLOCK_30DAYS="30 дней" 45 | PLG_SYSTEM_BFSTOP_MAX_BLOCKS_BEFORE_LABEL="Постоянная блокировка после" 46 | PLG_SYSTEM_BFSTOP_MAX_BLOCKS_BEFORE_DESC="Определяет, после которого количества неудачных попыток входа постоянная блокировка будет включена. Блокировки, которые были удалены (т.е. разблокированы) по токену также засчитываются; а те которые сделаны через бэкенд будут игнорироваться." 47 | PLG_SYSTEM_BFSTOP_MAX_BLOCK_NEVER="Никогда" 48 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_ORIGIN_LABEL="Активно для" 49 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_ORIGIN_DESC="Определяет, на какую часть системы Joomla! плагин должен быть активным. Если установлен только фронтэнд или бэкэнд соответствующую другую часть, не будет рассматриваться для любой функциональности (например, если он настроен только для бэкэнда, то при неудачной попытке входа во фронтэнде не будет покaзaно; но и успешные входы во фронтэнде не сможет восстановить неуспешного входа счетчика). Обратите внимание, что блокировка всегда влияет на весь сайт, независимо от того, что было введено здесь!" 50 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_FRONTEND="Только фронтэнд" 51 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_BACKEND="Только бэкэнд" 52 | PLG_SYSTEM_BFSTOP_ENABLED_FOR_BOTH="Фронтэнд и бэкэнд" 53 | PLG_SYSTEM_BFSTOP_FATAL="Фатальная ошибка" 54 | PLG_SYSTEM_BFSTOP_WARNING="Предупреждение" 55 | PLG_SYSTEM_BFSTOP_INFO="Информационное сообщение" 56 | PLG_SYSTEM_BFSTOP_DEBUG="Детальная информация" 57 | PLG_SYSTEM_BFSTOP_DELETE_OLD_ENTRIES_LABEL="Сокращение числа старых попыток" 58 | PLG_SYSTEM_BFSTOP_DELETE_OLD_ENTRIES_DESC="Удаление неудачных попыток входа старше, чем количество недель, установленное в этом поле (установите 0, чтобы отключить удаление старых записей)." 59 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_LABEL="Адаптивная задержка" 60 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_DESC="Активация адаптивной задержки текущему темпу неудачных попыток входа в систему. Задержка увеличится, когда будет наблюдаться повышенное количество попыток входа, в качестве контрмеры для распределенных атак." 61 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_MAX_LABEL="Максимальная задержка" 62 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_MAX_DESC="Максимальная задержка ответа на неудачные попытки входа в систему, когда адаптивная задержка включена" 63 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MIN_LABEL="Минимальный предел" 64 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MIN_DESC="Порог, при котором адаптивная задержка начинает увеличиваться (измеряется в количестве неудачных попыток входа за последний час)" 65 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MAX_LABEL="Максимальный предел" 66 | PLG_SYSTEM_BFSTOP_ADAPTIVE_DELAY_THRSH_MAX_DESC="Порог, при котором адаптивная задержка достигает максимальную задержку (измеряется в количестве неудачных попыток входа за последний час)" 67 | PLG_SYSTEM_BFSTOP_DELAY_FIELDSET_LABEL="Задержка" 68 | PLG_SYSTEM_BFSTOP_NOTIFICATION_FIELDSET_LABEL="Уведомления" 69 | PLG_SYSTEM_BFSTOP_GROUP_NOTIFICATION_ENABLED_LABEL="Уведомление группы пользователей" 70 | PLG_SYSTEM_BFSTOP_GROUP_NOTIFICATION_ENABLED_DESC="Если включено, группы пользователей, выбранные ниже, будут оповещены в случае неудачных входов/блокировки IP-адреса" 71 | PLG_SYSTEM_BFSTOP_USERGROUP_LABEL="Группа пользователей" 72 | PLG_SYSTEM_BFSTOP_USERGROUP_DESC="Выберите группу, чтобы уведомить всех её участников о неудачных входах и запрещённых IP-адресов (если активирована выше). Вероятно, Вам нужно будет создать отдельную группу для этого, или использовать группу, которая содержит только наиболее опытных администраторов, подобно группе по умолчанию 'супер-пользователи'." 73 | PLG_SYSTEM_BFSTOP_NOTIFY_USE_PASSWORD_REMINDER_LABEL="Напоминание о сбросе пароля" 74 | PLG_SYSTEM_BFSTOP_NOTIFY_USE_PASSWORD_REMINDER_DESC="Будет ли и когда отображаться напоминание об использовании функции 'восстановление пароля' при неудачной попытке входа" 75 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_ALWAYS="Всегда" 76 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_1LEFT="Когда осталась 1 попытка" 77 | PLG_SYSTEM_BFSTOP_REMINDER_NOTIFY_2LEFT="Когда осталось 2 попытки" 78 | PLG_SYSTEM_BFSTOP_BLOCKED_MSG_SHOWIP_LABEL="Показывать IP" 79 | PLG_SYSTEM_BFSTOP_BLOCKED_MSG_SHOWIP_DESC="При блокировке, показывать пользователю его IP-адрес (предполагаемый сервером)" 80 | -------------------------------------------------------------------------------- /sql/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /sql/install.mysql.utf8.sql: -------------------------------------------------------------------------------- 1 | -- install script for bfstop plugin 2 | 3 | CREATE TABLE IF NOT EXISTS #__bfstop_failedlogin ( 4 | id int(10) NOT NULL auto_increment, 5 | username varchar(150) NOT NULL, 6 | ipaddress varchar(45) NOT NULL, 7 | logtime datetime NOT NULL, 8 | origin int NOT NULL, 9 | handled BOOLEAN NOT NULL DEFAULT 0, 10 | PRIMARY KEY (id) 11 | ) DEFAULT CHARSET=utf8; 12 | 13 | 14 | CREATE TABLE IF NOT EXISTS #__bfstop_bannedip ( 15 | id int(10) NOT NULL auto_increment, 16 | ipaddress varchar(45) NOT NULL, 17 | crdate datetime NOT NULL, 18 | duration int NOT NULL, 19 | PRIMARY KEY (id) 20 | ) DEFAULT CHARSET=utf8; 21 | 22 | 23 | -- stores a new entry if an IP address was unblocked, the 24 | -- time and by which means that unblocking happened 25 | CREATE TABLE IF NOT EXISTS #__bfstop_unblock ( 26 | -- which block was lifted (references id column from bannedip table) 27 | block_id int(10) NOT NULL, 28 | -- the source from which the unblock resulted: 29 | -- 0 .. via the backend 30 | -- 1 .. via the mail sent to the user after blocking 31 | source int(10) NOT NULL, 32 | crdate datetime NOT NULL, 33 | PRIMARY KEY (block_id) 34 | ) DEFAULT CHARSET=utf8; 35 | 36 | 37 | -- stores randomized tokens for unblocking an IP via an email 38 | -- to the blocked user 39 | CREATE TABLE IF NOT EXISTS #__bfstop_unblock_token ( 40 | token varchar(40) NOT NULL, 41 | block_id int(10) NOT NULL, 42 | crdate datetime NOT NULL, 43 | PRIMARY KEY (token) 44 | ) DEFAULT CHARSET=utf8; 45 | 46 | 47 | -- stores a whitelist of IPs which will never be blocked 48 | CREATE TABLE IF NOT EXISTS #__bfstop_allowlist ( 49 | id int(10) NOT NULL auto_increment, 50 | ipaddress varchar(45) NOT NULL, 51 | notes varchar(255) NOT NULL DEFAULT '', 52 | PRIMARY KEY (id) 53 | ) DEFAULT CHARSET=utf8; 54 | -------------------------------------------------------------------------------- /sql/uninstall.mysql.utf8.sql: -------------------------------------------------------------------------------- 1 | -- uninstall script for bfstop plugin 2 | 3 | DROP TABLE IF EXISTS `#__bfstop_failedlogin`; 4 | 5 | DROP TABLE IF EXISTS `#__bfstop_bannedip`; 6 | 7 | DROP TABLE IF EXISTS `#__bfstop_unblock`; 8 | 9 | DROP TABLE IF EXISTS `#__bfstop_unblock_token`; 10 | 11 | DROP TABLE IF EXISTS `#__bfstop_allowlist`; 12 | 13 | -------------------------------------------------------------------------------- /sql/updates/0.9.10.sql: -------------------------------------------------------------------------------- 1 | -- for details on that table see install.mysql.utf8.sql 2 | 3 | ALTER TABLE `#__bfstop_failedlogin` 4 | ADD COLUMN handled BOOLEAN NOT NULL DEFAULT 0 5 | ; 6 | 7 | CREATE TABLE IF NOT EXISTS `#__bfstop_unblock` ( 8 | block_id int(10) NOT NULL, 9 | source int(10) NOT NULL, 10 | crdate datetime NOT NULL, 11 | PRIMARY KEY (block_id) 12 | ) DEFAULT CHARSET=utf8; 13 | 14 | CREATE TABLE IF NOT EXISTS `#__bfstop_unblock_token` ( 15 | token varchar(40) NOT NULL, 16 | block_id int(10) NOT NULL, 17 | crdate datetime NOT NULL, 18 | PRIMARY KEY (token) 19 | ) DEFAULT CHARSET=utf8; 20 | -------------------------------------------------------------------------------- /sql/updates/0.9.11.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE #__bfstop_failedlogin MODIFY error VARCHAR(255); 2 | 3 | ALTER TABLE #__bfstop_bannedip ADD duration int NOT NULL DEFAULT 0; 4 | -------------------------------------------------------------------------------- /sql/updates/0.9.5.sql: -------------------------------------------------------------------------------- 1 | -- Dummy SQL file to set schema version to 0.9.5 so next update will work 2 | -------------------------------------------------------------------------------- /sql/updates/0.9.6.sql: -------------------------------------------------------------------------------- 1 | alter table `#__bfstop_failedlogin` drop column `password`; 2 | -------------------------------------------------------------------------------- /sql/updates/0.9.7.sql: -------------------------------------------------------------------------------- 1 | -- dummy SQL file for 0.9.7 which requires no DB updates 2 | -------------------------------------------------------------------------------- /sql/updates/0.9.8.sql: -------------------------------------------------------------------------------- 1 | -- dummy SQL file for 0.9.8 (which requires no DB updates) 2 | -- to update the schema 3 | -------------------------------------------------------------------------------- /sql/updates/0.9.9.sql: -------------------------------------------------------------------------------- 1 | -- just for updating the schema... 2 | -------------------------------------------------------------------------------- /sql/updates/1.0.0.sql: -------------------------------------------------------------------------------- 1 | -- just for updating the schema... 2 | -------------------------------------------------------------------------------- /sql/updates/1.0.1.sql: -------------------------------------------------------------------------------- 1 | -- Update DB schema to version 1.0.1 2 | 3 | -- fix ipaddress field lengths to enable holding all valid 4 | -- representations of IPv6 addresses 5 | ALTER TABLE #__bfstop_bannedip MODIFY ipaddress VARCHAR(45); 6 | ALTER TABLE #__bfstop_failedlogin MODIFY ipaddress VARCHAR(45); 7 | 8 | -- create table for whitelist: 9 | CREATE TABLE IF NOT EXISTS #__bfstop_whitelist ( 10 | id int(10) NOT NULL auto_increment, 11 | ipaddress varchar(45) NOT NULL, 12 | crdate datetime NOT NULL, 13 | PRIMARY KEY (id) 14 | ) DEFAULT CHARSET=utf8; 15 | 16 | -------------------------------------------------------------------------------- /sql/updates/1.2.0.sql: -------------------------------------------------------------------------------- 1 | -- allow white/blacklist ipaddress fields to also hold 2 | -- subnet specifications 3 | ALTER TABLE #__bfstop_bannedip MODIFY ipaddress VARCHAR(49) NOT NULL; 4 | ALTER TABLE #__bfstop_whitelist MODIFY ipaddress VARCHAR(49) NOT NULL; 5 | 6 | -------------------------------------------------------------------------------- /sql/updates/1.3.0.sql: -------------------------------------------------------------------------------- 1 | -- fix BLOCK_87600HOURS: 2 | UPDATE `#__bfstop_bannedip` SET duration=0 WHERE duration >= 5256000 3 | -------------------------------------------------------------------------------- /sql/updates/1.4.0.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE `#__bfstop_failedlogin` DROP COLUMN error; 2 | 3 | 4 | ALTER TABLE `#__bfstop_whitelist` ADD COLUMN notes varchar(255) NOT NULL DEFAULT ''; 5 | 6 | UPDATE `#__bfstop_whitelist` SET notes=CONCAT('created: ',DATE_FORMAT(crdate, '%Y-%m-%d')) WHERE crdate != '0000-00-00 00:00:00'; 7 | 8 | ALTER TABLE `#__bfstop_whitelist` DROP COLUMN crdate; 9 | -------------------------------------------------------------------------------- /sql/updates/1.4.2.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM #__update_sites WHERE location LIKE 'https://github.com/codeling%'; 2 | 3 | ALTER TABLE #__bfstop_failedlogin MODIFY username varchar(150) NOT NULL; 4 | 5 | RENAME TABLE `#__bfstop_whitelist` TO `#__bfstop_allowlist`; 6 | -------------------------------------------------------------------------------- /sql/updates/1.4.3.sql: -------------------------------------------------------------------------------- 1 | -- Update DB schema to version 1.4.3 2 | -------------------------------------------------------------------------------- /sql/updates/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /unittests/cryptotest.php: -------------------------------------------------------------------------------- 1 | message = $msg; 31 | $logMsg->level = $lvl; 32 | $this->logMessages[] = $logMsg; 33 | } 34 | } 35 | 36 | class BFStopTokenGeneratorTest extends PHPUnit_Framework_TestCase 37 | { 38 | public function testGenerate() { 39 | $testlogger = new TestLogger; 40 | $token = BFStopTokenGenerator::getToken($testlogger); 41 | printf("Generated Token: %s", $token); 42 | $this->assertEquals(strlen($token), 40); 43 | $this->assertTrue(ctype_xdigit($token)); 44 | 45 | if (function_exists('openssl_random_pseudo_bytes') || 46 | (function_exists('mcrypt_create_iv') && 47 | (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' || 48 | version_compare(phpversion(), '5.3.7') > 0) ) ) { 49 | $this->assertEquals(sizeof($testlogger->logMessages), 1); 50 | $this->assertEquals($testlogger->logMessages[0]->level, Log::VERBOSE); 51 | } else { 52 | $this->assertEquals(sizeof($testlogger->logMessages), 1); 53 | $this->assertEquals($testlogger->logMessages[0]->level, Log::WARNING); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /updatescript.php: -------------------------------------------------------------------------------- 1 | setQuery($sql); 28 | $numEntries = ((int)$db->loadResult()); 29 | $sql = "RENAME TABLE `#__bfstop_whitelist` TO `#__bfstop_allowlist`"; 30 | $db->setQuery($sql); 31 | $db->execute(); 32 | } 33 | catch (Exception $e) 34 | { 35 | // if table doesn't exist, there's nothing we need to do 36 | // Log::add("Update ERROR: ".$e->getMessage(), Log::ERROR, 'Update'); 37 | } 38 | } 39 | } 40 | --------------------------------------------------------------------------------