问题1:我可以使用吗? $userid = mysql_real_escape_string($_GET['user_id']);
或者我需要使用下面的代码更好?
function mysql_prep( $value ){
$magic_quotes_active = get_magic_quotes_gpc();
$new_enough_php = function_exists( "mysql_real_escape_string" ); //example. php >= v4.3.0
if( $new_enough_php ) { //php v4.30 or higher, undo any magic quote effects so mysql_real_escape_string can do the work
if( $magic_quotes_active ) { $value = stripslashes( $value );}
$value = mysql_real_escape_string( $value );
} else { //before php v4.3.0.
if( !$magic_quotes_active ) { $value = addslashes( $value ); }
}
return $value;
}
$userid = trim(mysql_prep($_GET['user_id']));
Run Code Online (Sandbox Code Playgroud)
问题2:我们真的需要使用md5()或shal()上$_SESSION['user_id']吗?为什么我们需要那个?会话劫持者只能得到会话ID,但他不能得到会话变量值吗?如果是这样,那么我不需要哈希值$_SESSION['user_id']了吗?例如 :
if (isset($_POST['login'])) {
if ($username==$user_username_in_db && $hashed_password==$user_password_in_db) {
$_SESSION['user_id'] = sha1($user_id_in_db); //sha1 convert userid to crazy long characters
}
}
$query2 = "SELECT id FROM user WHERE sha1(id)='{$userid}' LIMIT 1";
Run Code Online (Sandbox Code Playgroud)
问题3:由于php会话劫持发生且我无法负担使用ssl/https,所以我让网站每次尝试删除消息或朋友时都要求用户提交密码,因为会话劫持者可能冒充用户删除他的消息/朋友.如果我的网站总是要求用户输入密码,我可以知道这是危险的吗?密码会更容易被黑客攻击?我是否知道会话劫持者只能冒充用户,但不能窃取用户的密码?
问题1:如果您的user_id在数据库中存储为整数,则可以使用:
$user_id = intval($_GET['user_id']);
Run Code Online (Sandbox Code Playgroud)
因此,如果有人篡改了查询字符串,那么所有可能发生的事情就是他们得到一个空白的结果.但是,目前还不清楚你如何使用$ _GET ['user_id'];
问题2:sha1和md5是哈希算法.这意味着对于任何长度的任何给定字符串,它们都会返回一个显示为41/32字节十六进制字符串的数字.
有什么用?使用的是那些算法是不可逆的,这使得它们非常适合隐藏某人的用户名和密码等信息.许多人为所有事情使用同一个密码,以确保他们的密码不会被盗,以防你搞砸了,黑客可以访问你的数据库 - 你为用户提供了另一层安全 - 没有人应该是能够从哈希中获取实际密码.当然,这也可以防止有权访问数据库的人阅读人的密码并破坏他们的隐私.现在,有一些方法可以尝试将哈希值反转为纯文本(所谓的彩虹表),但这是另一个主题.
问题3:您实际上应该首先防止会话劫持.为什么会这样?您是否以某种方式(通过URL)向公众公开session_id并且您是否正在实施标准检查?
偶尔要求输入密码对用户来说是一种烦恼,应该避免,除非你想不出保护会话的方法.
至于其他东西,有一个叫做PHP PDO的东西,理论上应该使用清理字符串,连接到数据库并将内容插入数据库更容易(虽然它比常规的mysql_或mysqli_函数相当复杂,所以人们似乎避免它).您至少应该阅读它以了解它的作用以及它如何帮助您防止SQL注入.
| 归档时间: |
|
| 查看次数: |
1108 次 |
| 最近记录: |