如果插入用户输入而不修改SQL查询,则应用程序容易受到SQL注入的攻击,如下例所示:
$unsafe_variable = $_POST['user_input'];
mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
Run Code Online (Sandbox Code Playgroud)
这是因为用户可以输入类似的内容value'); DROP TABLE table;--,查询变为:
INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
Run Code Online (Sandbox Code Playgroud)
可以采取哪些措施来防止这种情况发生?
为什么一个人不应该使用mysql_*功能的技术原因是什么?(例如mysql_query(),mysql_connect()或mysql_real_escape_string())?
即使他们在我的网站上工作,为什么还要使用其他东西?
如果他们不在我的网站上工作,为什么我会收到错误
警告:mysql_connect():没有这样的文件或目录
有没有人知道一个Django应用程序,如果安装了暴力密码猜测攻击,可以用来扩展django auth和锁定帐户?
即,一种限制登录尝试次数的帐户锁定机制.
我正在尝试设置用户可以“尝试”密码的次数。目前,我想存储他/她可以在会话中尝试输入密码的次数和“惩罚时间”。
问题是用户关闭浏览器或更改其他IP地址会对会话产生影响吗?
例如,如果用户有5分钟的惩罚时间,这可以通过两个日期时间实例相减> 5来完成,然后让用户再次尝试5次。如果用户同时关闭并重新打开浏览器,“会话”会丢失吗?
在用户登录之前进行检查:
##############SESSION BASED##################
#Initialize tries, to be used later on
tries = "0"
try:
tries = request.session['tries']
except:
pass
#If tries > 5 times
if(int(tries) >= 5):
timeNow = request.session['locked_time']
timeDifferenceSeconds = (datetime.datetime.now() - datetime.datetime.strptime(timeNow, "%Y-%m-%d %H:%M:%S.%f")).total_seconds()
#See if the difference is greater than 15 minutes, otherwise lock
if(timeDifferenceSeconds > 900):
request.session['tries'] = str(0)
logger.info("User:" + str(username) + " is unlocked");
else:
logger.info("User:" + str(username) + " is currently locked");
logger.info("User:" + str(username) + " returning …Run Code Online (Sandbox Code Playgroud)