1 頁 (共 1 頁)

[問題]請問一個論壇登入時的程式碼問題

發表於 : 2006-01-11 02:25
geowichi
if( isset($HTTP_POST_VARS['login']) || isset($HTTP_GET_VARS['login']) || isset($HTTP_POST_VARS['logout']) || isset($HTTP_GET_VARS['logout']) )
{
if( ( isset($HTTP_POST_VARS['login']) || isset($HTTP_GET_VARS['login']) ) && !$userdata['session_logged_in'] )
{
$username = isset($HTTP_POST_VARS['username']) ? trim(htmlspecialchars($HTTP_POST_VARS['username'])) : '';
$username = substr(str_replace("\\\'", "'", $username), 0, 25);
$username = str_replace("'", "\\\'", $username);
$password = isset($HTTP_POST_VARS['password']) ? $HTTP_POST_VARS['password'] : '';

$sql = "SELECT user_id, username, user_password, user_active, user_level
FROM " . USERS_TABLE . "
WHERE username = '" . str_replace("\\\'", "''", $username) . "'";

.....

最近在研究論壇的程式碼,其中在login.php中一開始判斷使用者輸入的username, 不是為了要防止惡意輸入所以利用 addslashes() 將 ' 置換成 \'
可是為何上述程式碼又一而在的 把已經置換的 \' 再置換為 '
最後串sql 指令時 還是置換了 \' 成 ' , 這樣不是很危險嗎?

不知道有沒有大大可以解答一下~ 謝謝 ~

發表於 : 2006-01-13 23:38
Mac
2.0.19 的部分是\r

代碼: 選擇全部

		$username = isset($HTTP_POST_VARS['username']) ? phpbb_clean_username($HTTP_POST_VARS['username']) : '';
		$password = isset($HTTP_POST_VARS['password']) ? $HTTP_POST_VARS['password'] : '';\r

		$sql = "SELECT user_id, username, user_password, user_active, user_level, user_login_tries, user_last_login_try
			FROM " . USERS_TABLE . "
			WHERE username = '" . str_replace("\\\'", "''", $username) . "'";

代碼: 選擇全部

// added at phpBB 2.0.11 to properly format the username
function phpbb_clean_username($username)
{
	$username = substr(htmlspecialchars(str_replace("\'", "'", trim($username))), 0, 25);
	$username = phpbb_rtrim($username, "\\\");
	$username = str_replace("'", "\'", $username);

	return $username;
}
~Mac