<div dir="ltr">Hello rahul,<div><br></div><div style>Thanks. Nice point. </div><div style><br></div><div style>However I am assuming that a real user <b>cannot</b> make two consecutive requests <b>within 1 second</b> so I set the value of <span style="background-color:rgb(221,255,221);color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.800000190734863px;line-height:14.399999618530273px;white-space:nowrap">bruteForceLockTimePeriod </span>to 1 sec. Because once the request is sent, he will have to wait for reply and then type in password again and then again make a request, so essentially this whole process will require more time than 1 second for a real user (just an assumption, correct me if I am wrong).</div>

<div style><br></div><div style>Secondly I am defining <span style="background-color:rgb(248,238,199);color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.800000190734863px;line-height:14.399999618530273px;white-space:nowrap">bruteForceLockAttemptTotalTime to 25 </span>which means that if 5 consecutive attempts are carried out within 25 seconds then it is also brute force.</div>

<div style>I have added FIRST_LOGIN_ATTEMPT to implement this funcitionality in an efficient way. FIRST_LOGIN_ATTEMPT will help us to determine which requests will be considered in a group. For example :</div><div style>
<br>
Total count = 0</div><div style> </div><div style>I make a request at 0th second.     //I will store first login attempt time.</div><div style><div>Total count = 1</div><div><br></div></div><div style>then a request at 2nd second.      //By passing the first condition to check BruteForce.</div>

<div style><div>Total count = 2</div><div><br></div><div>another at 4th second.<br></div><div><div>Total count = 3</div></div><div><br></div><div style>and so on..... my condition, apart from checking time between two consecutive conditions is :</div>

<div style><br></div><div style>if total count is less than  5</div><div style>update total count</div><div style>update last_login_attempt</div><div style>return false</div><div style><br></div><div style>if total count == 5 and <b>present request time minus first request time</b> is <b>less than 25</b> seconds then it will be brute force.</div>

<div style><br></div><div style>else</div><div style>I will update <b>first login attempt time as time of this request</b>, and update other values as you were doing before and return false.</div><div style><br></div><div style>

Essentially I am trying to group requests, so that I can find of time of the first request of the group and the last request of that group , if that is higher than our allowed time then we will flag brute force. Groups will be made only when request are done in short time. Otherwise we will reset our group. Hence we require first login attempt and keep updating that value</div>

<div style><br></div><div style>Result : This filter will reduce lot of <span style="font-family:arial,sans-serif;font-size:12.666666984558105px">false positives as well as increase time of brute force attempts to such extent that it becomes practically not feasible to make a successful brute force attempt.</span><br>

</div><div style><span style="font-family:arial,sans-serif;font-size:12.666666984558105px"><br></span></div><div style><span style="font-family:arial,sans-serif;font-size:12.666666984558105px">PS: I have fixed a small condition after I made a pull request, now my new conditions are exactly what I am looking for.</span></div>

<div style><span style="font-family:arial,sans-serif;font-size:12.666666984558105px"><br></span></div><div style><span style="font-family:arial,sans-serif;font-size:12.666666984558105px">To make things more practical :</span></div>

</div><div style>Instead of isBruteForce function just returning boolean, can we return an integer to define level of an attack ? Say return 0 , return 1 or return 2 , where 0, 1, and 2 define the level of attack. </div>
<div style>
<br>Explanation:</div><div style>return 'x' :</div><div style>x:</div><div style>0 : not brute force.</div><div style>1 : two attempts made within 1 second (or whatever value). </div><div style>Result : Developer must show captcha if he recieves 1.</div>

<div style><br></div><div style>2 : <b>No of attempts</b> made are very high in short time (5 attempts within 25 seconds or whatever value).</div><div style>Result : He must block account temporarily for 15 minutes.</div>

<div style><br></div><div style>Benefit of above approach to isBruteForce ? </div><div style>We will have more customized control.</div><div style><br></div><div style>Suggestions are welcome. Rahul please take a look at my update code :</div>

<div style><a href="https://github.com/shivamdixit/phpsec/commit/c0fcc9c8c244d028ba9102a8492bdaac7df12073">https://github.com/shivamdixit/phpsec/commit/c0fcc9c8c244d028ba9102a8492bdaac7df12073</a><br></div><div style><br>

</div><div style><br></div><div style>Also I am new to this library kind of things. So please advice me that how should I test my code without having any view of application or complete application to run and test ? Syntax check as well as how to check if my application is logically correct.</div>

<div style><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Sep 4, 2013 at 12:26 AM, rahul chaudhary <span dir="ltr"><<a href="mailto:rahul300chaudhary400@gmail.com" target="_blank">rahul300chaudhary400@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Intresting point...nice dude.. :)<div><br></div><div>but let us see....4 attempts in 5 sec...and that would be the bot limit....remember, we are not trying to prevent the bot to NOT guess the passwords...we want to minimize the attempts they can make so that password guessing is not possible in real time...</div>


<div><br></div><div>The max attempt is actually limiting the bot to guess only that much password in the "two consecutive password time limit".</div><div><br></div><div>But your point actually brings my attention towards one thing...suppose the time between two attempts is very large...say 5 sec..and the max attempts are also large...say 1000...then the bot can make 999 requests in 4.99 sec...in which case it is a problem...</div>


<div><br></div><div>But if we go by your solution, then for the legit cases, we will get a lot of false positives...here is how....two consecutive attempts are made in 5 sec...so that would flag a brute force, when actually its not...its just two attempts...no need to worry the developers for this small case.....</div>


<div><br></div></div></blockquote></div><div><br></div>-- <br><div dir="ltr"><div style="color:rgb(136,136,136);background-color:rgb(255,255,255)"><font color="#999999" face="verdana, sans-serif"><b>Cheers,</b></font></div>

<div style="color:rgb(136,136,136);background-color:rgb(255,255,255)"><font color="#999999" face="verdana, sans-serif"><b>Shivam</b></font></div></div>
</div></div>