2017-07-17 73 views
1

下面是一個簡化我的代碼:在DOM中使用GET參數的安全方式?

$html = "<a class='myclass' href='/path?arg='" . $_GET['param']. "'>mylink</a>"; 

今天,我正在讀關於XSS攻擊,我覺得我的代碼是在XSS攻擊。無論我不確定,但它聞到了這一點。

無論如何,如果我的想法是正確的,我該如何避免?基於一些研究,一種方法是使用strip_tags()。現在我想知道,我可以依靠它嗎?這足夠好嗎?

+0

嘿,是的,你可以自己嘗試一下。只需通過贊成你的?param =值。正如這個答案指出:https://stackoverflow.com/questions/3605629/prevent-xss-with-strip-tags你有2個選項。 strip_tags或編碼HTML。無論哪種方式都會阻止XSS。 – IsThisJavascript

+1

strip_tags()在你的情況下是不夠的,想象一下當你調用'index.php?param ='onclick ='alert(1)'時你的輸出變成什麼樣子,所以你需要的是htmlspecialchars() –

+0

@ WillParky93讀取任務,回答你仔細地鏈接,它清楚地表明,strip_tags()不足以防止XSS –

回答

-1

,每當你想輸出從用戶傳來的參數,您應該使用htmlspecialchars()

$variable = htmlspecialchars($_GET['param'], ENT_QUOTES, 'UTF-8');

+0

此功能用於獲取正確的HTML編碼。他正在構建一個URL。事實上,空格,問號和其他一些不會逃脫。他的網址將不正確,如果他使用htmlspecialchars。 –

1

這是關於編碼一些與正確的函數。 總是看你想要的產品,然後選擇編碼器!

樣品:

當你正在構建HTML其良好的使用用htmlspecialchars和/或ヶ輛。

當你構建SQL時,它很適合用於mysql PDO :: quote或mysqli_real_escape_string。

答:

在你的情況,你正在建立一個網址。爲此,您需要使用urlencode

此外,您還需要轉義它以糾正與htmlentities的HTML,因爲您正在下一步構建HTML。 請參閱PHP手冊中的示例 - > urlencode鏈接(示例#2)。