2012-11-28 34 views

回答

3

從技術上講,按我的測試,你確實需要逃脫它。 但好的一面是,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是安全的。

+0

非常感謝你!這是有道理的,我明白,真的很感激你花時間來協助。祝你有美好的一天。 –