2014-07-23 72 views
4

有人可以解釋何時使用轉義函數嗎?esc_url()和Wordpress安全性?

我的目標是確保我的WordPress主題。我使用了Chris Coyier的空白主題,並添加了代碼來製作我想要的網站。我注意到其他主題使用了轉義函數,但不是Coyier的空白主題,所以我想了解插入這些主題的位置。

閱讀食品和谷歌搜索結果和研究的幾個主題代碼後,我就什麼時候使用

esc_url() 
esc_attr() 
esc_html() 

我不明白何時使用這些模式還不清楚。例如,在一個主題中,對於home_url('/') - 注意esc_url在header.php中使用,但不在searchform.php中 - 爲什麼?

的header.php

<a href= 
// NOTICE ESCAPING FUNCTION BELOW 
"<?php echo esc_url(home_url('/')); ?>" 
title="<?php echo esc_attr(get_bloginfo('name', 'display')); ?>" rel="home"><?php bloginfo('name'); ?></a> 

searchform.php

<form role="search" method="get" id="searchform" action= 
// NO ESCAPING FUNCTION BELOW 
"<?php echo home_url('/'); ?>" 
> 

回答

0

您需要使用WordPress的逃生功能,任何用戶插入的內容,而不是necesary WordPress的功能。但在插件,模板,表單或類似的東西,你需要使用轉義函數。

+0

約翰,你能澄清..... 1.用戶插入的內容,你的意思是搜索表單,聯繫表和通訊註冊? ..... 2.在我的關於home_url('/')的例子中,你能解釋爲什麼在header.php中使用esc_url(),而不是在searchform.php中使用?這些php文件在相同的主題內。 – leko

+0

在searchform.php中沒有使用,因爲不是必須的,因爲它們用於轉義任何東西,我猜 – John

+0

但是不是searchform被認爲是「用戶插入的」內容嗎?因此,你會使用esc_url()...正確嗎? – leko

0

你需要像約翰說,使用WordPress的逃生功能,任何用戶插入的內容..

看一看我提供了了解WordPress的逃逸功能的鏈接..

http://codeseekah.com/2012/03/13/wordpress-escape-functions/

+1

只包含或主要鏈接的答案是不鼓勵,作爲內容遠程站點可能會改變或消失,讀者必須點擊鏈接才能看到它是否有用。推薦的方法是總結答案本身的要點,並將鏈接包含爲「進一步閱讀」。 – IMSoP

4

轉義函數用於防止攻擊和怪異的字符。這些功能所做的一些事情是刪除無效字符,刪除危險字符以及將字符編碼爲HTML實體。

問題是不受信任的數據不僅來自用戶,還可能來自保存在您自己的數據庫中的東西。

作爲一般規則,當URL的任何部分不是由Wordpress函數生成時,最好使用轉義函數。如果整個URL僅由Wordpress函數生成,則不需要轉義函數。

例如,如果你想打印的URL並添加查詢字符串這樣

<?php echo get_permalink() . '?order=time' ?> 

你應該使用逃生功能的習慣,因爲你輸入一些實際的URL。

<?php echo esc_url(get_permalink() . '?order=time') ?> 

不過,這將是更好的使用add_query_string功能這樣

<?php echo add_query_arg('order', 'time', get_permalink()) ?> 

在第二個例子中,因爲是由WordPress功能完全生成的URL,你就不會需要一個逃生功能。

在您的示例中,在header.php文件中,轉義函數不是必需的。編寫代碼的人可能只是習慣於這樣做,即使不需要時也可以放在那裏。

一個很好的開始閱讀有關數據驗證將是對WordPress的抄本:https://codex.wordpress.org/Data_Validation