我工作的一個Drupal 7安裝其中arg(x)的需要清理/轉義drupal的arg(x)的輸出嗎?
http://api.drupal.org/api/drupal/includes!bootstrap.inc/function/arg/7
已在HTML輸出大量被使用,在視圖模板等場所等。雖然我看的文檔並搜查圍繞這個話題,我仍然困惑,如果我需要消毒/逃脫ARG(X)與PHP的用htmlspecialchars或Drupal的check_plain等,以防止XSS輸出。
我工作的一個Drupal 7安裝其中arg(x)的需要清理/轉義drupal的arg(x)的輸出嗎?
http://api.drupal.org/api/drupal/includes!bootstrap.inc/function/arg/7
已在HTML輸出大量被使用,在視圖模板等場所等。雖然我看的文檔並搜查圍繞這個話題,我仍然困惑,如果我需要消毒/逃脫ARG(X)與PHP的用htmlspecialchars或Drupal的check_plain等,以防止XSS輸出。
從技術上講,按我的測試,你確實需要逃脫它。 但好的一面是,arg()
並不總是使用直接用戶輸入。
如果URL(或更準確地說,$_GET['q']
)是node/<h3>/edit
,則arg(1)
返回<h3>
,但沒有檢查明文。 如果您想親自測試,請添加下面的代碼片段並查看自己。
<?php
echo (arg(1, 'node/<h3>/edit')); ?>Normal text
您現在將在h3中看到「正常文本」。
如果一個節點ID 4,查看節點時,$_GET['q']
將節點/ 4。如果路徑不是別名,則URL將是相同的。 根據上面的示例,如果用戶打開node/<h3>
,arg(1)
將<h3>
沒有轉義,但有一個疑問,用戶會看到您使用的片段arg()
因爲該頁面返回404結果(您沒有看到任何塊,頁面內容等)。
使用arg()
在t()
,網址(),l()
等功能將始終難逃/消毒效果因此在實際世界中,這是不可能的,你會發現一個真實的案例,有人可以XSS您的網站。
這是一個不好用,我可以考慮一下。 在page.tpl.php中的文件,你可以從URL路徑添加一個類是這樣的:
<body class="<?php print arg(0); ?>">
你可以想到的是在節點頁面,你會看到body標籤的類是「節點」,並在管理頁面,類是「管理員」。但是想象一下用戶打開這樣的網頁:
http://example.com/" onclick="alert('You are clicking on me');"
所以身體標記的實際HTML會是這樣:
<body class="" onclick="alert('You are clicking on me');">
現在你會看到身體標記有一個空的類屬性,並且該機構還添加了一個onclick事件。這可能是你可以看到的最糟糕的例子 - 但我只是想向你展示一些真實的例子。 使用$node->nid
是安全的。
非常感謝你!這是有道理的,我明白,真的很感激你花時間來協助。祝你有美好的一天。 –