17. XSS
Често срещани проблеми:
1. Липса на esc_*
2. Погрешна употреба на esc_* функция
3. Липса или неправилна валидация
4. Typos
18. XSS
Погрешна употреба на esc_*
<script>
var a = '<?php echo esc_html( $a ) ?>'
var b = <?php echo json_encode( $b ) ?>
19. XSS
Употреба на esc_* без валидация:
<script src=”<?php echo esc_url( $js ) ?>”>
където
$js = 'http://evil-project.com/js';
20. XSS
Неправилна валидация на ID-та
1. Проверка вместо cast
if ( intval( $myfield ) )
echo $myfield;
// $myfield = '1 <script...';
21. XSS
Неправилна валидация на ID-та
2. Липса на ^ и $ в regexp
if ( ! preg_match( '/[a-z0-9_-]/i', $myfield ) )
return 'You are trying to hack me!';
// $myfield = '<script ...'
22. XSS
Неправилна валидация на URL
1. . е wildcard.
if ( preg_match ( '!^https?://(www.)*good-host.com/js/!i',
$myjs) ...
// $myjs = http://wwwwgoodhost.com/js
23. XSS
Неправилна валидация на URL
2. Липсващ /
if ( preg_match ( '!^https?://(www.)?good-host.com!i',
$myjs)
// $myjs = 'http://www.good-host.com.dzver.com/'
24. XSS
Неправилна валидация на URL
3. Липсващ ^
if ( preg_match ( '!https?://(www.)*good-host.com/js/!i',
$myjs)
// $myjs = 'http://dzver.com/bad.js?http://good-host.com/js/'
25. XSS
Неправилна валидация на URL
4. Позволен / в хост-а
if ( ! preg_match( '!^https?://[^.]+.whatever.com/.+$!i',
$url ) )
// $myjs = 'http://3254656436/or.whatever.com/evil.js'
// $myjs = '<script.../.whatever.com/'
31. Защита
● VaultPress
● Exploit Scanner
http://wordpress.org/extend/plugins/exploit-scanner/
32. Защита
● Не вярвайте на юзърски инпут
● Man-in-the-middle HTTPS
● Внимавайте с редиректите. wp_safe_redirect.
● Extract може да препокрива променливи
● Внимавайте с call_user_func, $obj->$var, eval
● `` винаги с escape_shell_args