Yii 2 의 XSS 공격 방지 전략 분석
XSS 구멍 복구
원칙:고객 이 입력 한 데 이 터 를 믿 지 않 습 니 다.
주의:공격 코드 가 반드시
① 중요 한 쿠키 를 http only 로 표시 하면 자바 script 의 document.cookie 문 구 는 쿠키 를 얻 을 수 없습니다.
② 사용자 가 원 하 는 데이터 만 입력 할 수 있 습 니 다.예 를 들 어 나이 의 textbox 에 서 는 숫자 만 입력 할 수 있 습 니 다.숫자 이외 의 문 자 는 모두 걸 러 낸다.
③ 데이터 에 대해 Html 인 코딩 처리
④ 스 크 립 트,iframe,
⑤ JavaScript 이벤트 의 탭 을 걸 러 냅 니 다.예 를 들 어'onclick=','onfocus'등 이다.
Yii 의 XSS 방어
<?php echo CHtml::encode($user->name) ?>
이 방법의 원본 코드:
/**
* Encodes special characters into HTML entities.
* The [[\yii\base\Application::charset|application charset]] will be used for encoding.
* @param string $content the content to be encoded
* @param boolean $doubleEncode whether to encode HTML entities in `$content`. If false,
* HTML entities in `$content` will not be further encoded.
* @return string the encoded content
* @see decode()
* @see http://www.php.net/manual/en/function.htmlspecialchars.php
*/
public static function encode($content, $doubleEncode = true)
{
return htmlspecialchars($content, ENT_QUOTES | ENT_SUBSTITUTE, Yii::$app->charset, $doubleEncode);
}
html specialchars&html entities&urlencode 세 가지 차이 점:http://php.net/manual/zh/function.htmlspecialchars.php
http://php.net/manual/zh/function.htmlentities.php
http://cn2.php.net/manual/zh/function.urlencode.php
Available flags constants
Constant Name Description
ENT_COMPAT Will convert double-quotes and leave single-quotes alone.
ENT_QUOTES Will convert both double and single quotes.
ENT_NOQUOTES Will leave both double and single quotes unconverted.
ENT_IGNORE Silently discard invalid code unit sequences instead of returning an empty string. Using this flag is discouraged as it » may have security implications.
ENT_SUBSTITUTE Replace invalid code unit sequences with a Unicode Replacement Character U+FFFD (UTF-8) or &#FFFD; (otherwise) instead of returning an empty string.
ENT_DISALLOWED Replace invalid code points for the given document type with a Unicode Replacement Character U+FFFD (UTF-8) or &#FFFD; (otherwise) instead of leaving them as is. This may be useful, for instance, to ensure the well-formedness of XML documents with embedded external content.
ENT_HTML401 Handle code as HTML 4.01.
ENT_XML1 Handle code as XML 1.
ENT_XHTML Handle code as XHTML.
ENT_HTML5 Handle code as HTML 5.
htmlspecialchars
Convert special characters to HTML entities
string htmlspecialchars (
string $string
[, int $flags = ENT_COMPAT | ENT_HTML401
[, string $encoding = ini_get("default_charset")
[, bool $double_encode = true ]
]
]
)
The translations performed are:& (ampersand) becomes &
" (double quote) becomes " when ENT_NOQUOTES is not set.
' (single quote) becomes ' (or ') only when ENT_QUOTES is set.
< (less than) becomes <
> (greater than) becomes >
<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // <a href='test'>Test</a>
?>
htmlentitiesConvert all applicable characters to HTML entities
string htmlentities (
string $string
[, int $flags = ENT_COMPAT | ENT_HTML401
[, string $encoding = ini_get("default_charset")
[, bool $double_encode = true ]
]
]
)
<?php
$str = "A 'quote' is <b>bold</b>";
// Outputs: A 'quote' is <b>bold</b>
echo htmlentities($str);
// Outputs: A 'quote' is <b>bold</b>
echo htmlentities($str, ENT_QUOTES);
?>
urlencodeURL 인 코딩 은 url 의 규범 에 부합 하기 위해 서 입 니 다.표준 url 규범 에서 중국어 와 많은 문 자 는 url 에 나타 나 면 안 되 기 때 문 입 니 다.
예 를 들 어 baidu 에서'한자 테스트'를 검색 합 니 다.URL
http://www.baidu.com/s?wd=%B2%E2%CA%D4%BA%BA%D7%D6&rsv_bp=0&rsv_spt=3&inputT=7477
URL 인 코딩 이란 모든 비 자모 숫자 문 자 를 백분율(%)로 바 꾸 고 두 자리 16 진수 로 바 꾸 며 빈 칸 은 플러스(+)로 인 코딩 하 는 것 입 니 다.
이 문자열 은- 를 제외 합 니 다.이외 의 모든 비 자모 숫자 문 자 는 백분율(%)로 바 뀌 고 두 자리 16 진수 로 바 뀌 며 빈 칸 은 플러스(+)로 인 코딩 됩 니 다.이 인 코딩 은 WWW 폼 POST 데이터 의 인 코딩 방식 과 같 으 며,application/x-ww-form-urlencoded 의 미디어 형식 인 코딩 방식 과 같 습 니 다.역사적 인 이유 로 이 인 코딩 은 빈 칸 을 플러스(+)로 인 코딩 하 는 데 RFC 1738 인 코딩(rawurlencode()참조)과 다 릅 니 다.
<?php
echo '<a href="mycgi?foo=', urlencode($userinput), '">';
?>
<?php
$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo '<a href="mycgi?' . htmlentities($query_string) . '">';
?>
Yii 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.본 고 는 Yii 프레임 워 크 를 기반 으로 한 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Token, XSS, CSRF이글은 JWT , Cookie , XSS ,CSRF 에 대해 다룬다 . JWT 와 Cookie 기반 인증 시스템의 차이점에 대한 내용을 기반으로 XSS ,CSRF 를 다룰것이다 . ● XSS - Cross site ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.