php
PHP - ctype_alnum 함수
bool ctype_alnum ( string $text )
(PHP 4 >= 4.0.4, PHP 5)
이 함수는 [a-zA-Z0-9] 로 숫자, 영문 대소문자에 해당되면 true를, 실패하면 false를 반환합니다.
다음의 id체크 표현은 정규표현식으로 하는게 더 정확하고, 불필요한 오류를 줄일 수 있는 장점이 있지만, 느리다는 단점이 있으니 적절한 방법으로 코딩하면 될 것 같습니다.
다음은 파일시스템 보안에 대한 설명입니다. 한눈에 보아도 문제가 보이죠?
이 문제를 적절히 수정해 주면, 다음과 같이 유용하게 대처할 수 있습니다.
(PHP 4 >= 4.0.4, PHP 5)
이 함수는 [a-zA-Z0-9] 로 숫자, 영문 대소문자에 해당되면 true를, 실패하면 false를 반환합니다.
<?php
$strings = array('AbCd501zyZ9', 'foo!#$bar', '', ' ', 'asdc xc');
$i = 1;
foreach ($strings as $testcase) {
if (ctype_alnum($testcase)) {
echo "$i $testcase 에는 문제되는 문자가 없습니다.\n";
} else {
echo "$i $testcase 에는 문제되는 다른 문자가 포함되어 있습니다.\n";
}
$i++;
}
/*
결과:
1 AbCd501zyZ9 에는 문제되는 문자가 없습니다.
2 foo!#$bar 에는 문제되는 다른 문자가 포함되어 있습니다.
3 에는 문제되는 다른 문자가 포함되어 있습니다.
4 에는 문제되는 다른 문자가 포함되어 있습니다.
5 asdc xc 에는 문제되는 다른 문자가 포함되어 있습니다.
*/
?>
다음의 id체크 표현은 정규표현식으로 하는게 더 정확하고, 불필요한 오류를 줄일 수 있는 장점이 있지만, 느리다는 단점이 있으니 적절한 방법으로 코딩하면 될 것 같습니다.
<?php
$userid = $_POST['user_id'];
if (ctype_alnum($userid)) {
if((strlen($userid) < 5) || (strlen($userid) > 12)){
echo "id 는 5자이상 12자 이하로 작성해 주십시요.";
} else {
echo "id 는 정상적으로 작성하셨습니다.";
}
} else {
echo "id로 허용할 수 없는 문자가 포함되어 있습니다. id는 영문 대소문자, 숫자만 허용합니다.\n";
}
?>
다음은 파일시스템 보안에 대한 설명입니다. 한눈에 보아도 문제가 보이죠?
<?php
$username = $_POST['user_submitted_name']; // "../etc"
$userfile = $_POST['user_submitted_filename']; // "passwd"
$homedir = "/home/$username"; // "/home/../etc"
unlink("$homedir/$userfile"); // "/home/../etc/passwd"
echo "The file has been deleted!";
?>
이 문제를 적절히 수정해 주면, 다음과 같이 유용하게 대처할 수 있습니다.
<?php
$username = $_POST['user_submitted_name']; // "../etc"
$userfile = $_POST['user_submitted_filename'];
$homedir = "/home/$username";
$filepath = "$homedir/$userfile";
if (!ctype_alnum($username) || !preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD', $userfile)) {
die("Bad username/filename");
}
//etc...
?>
<?php
$file = $_GET['file'];
switch ($file) {
case 'main':
case 'foo':
case 'bar':
include '/home/wwwrun/include/'.$file.'.php';
break;
default:
include '/home/wwwrun/include/main.php';
}
?>
0 댓글