亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過 ajax 發送到 php 的數據是否可操作?

通過 ajax 發送到 php 的數據是否可操作?

HUH函數 2022-10-21 15:23:49
為了限制用戶可以輸入的文本區域中的字符,我在上面放了一個計數器。// this is part of tinymce setup: function (ed) {    ed.on('keyup', function (e) {    var maxchars = <?php echo $max_chars_allowed; ?>; // determined in settings    var countchars = CountCharacters();    var charsleft = maxchars - countchars;和函數 CountCharacters():// counting characters textareafunction CountCharacters() {    var body = tinymce.activeEditor.getBody();    var content = tinymce.trim(body.innerText || body.textContent);    return content.length;};現在我通過 ajax 將數據發送到 php 文件:// count chars inputvar countchars = CountCharacters();$.ajax({        url: 'comment.php',        type: 'POST',        data: { countchars:countchars }        ...              要檢查comment.php 中的數據:$countchars = $_POST['countchars']; // countchars read from ajax $max_chars_allowed = 200;if( $countchars > $max_chars_allowed ) {    echo 'Max allowed characters exceeded. Reduce characters and submit again';    ......這一切都很好,但我的主要問題是:這樣做安全嗎?也許有人可以通過瀏覽器檢查器操作 js var countchars并將其設置為 100,而實際上他在 textarea 中鍵入了 300 個字符?然后提交后,ajax 將 100 個字符發送到 php 文件,而不是他在 textarea 中鍵入的 300 個字符,并且 php 中的安全循環將被繞過......
查看完整描述

1 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

不要將該計數發送到 PHP 代碼。你是對的,這是微不足道的繞過。相反,在 PHP 中獲取注釋文本,然后檢查其長度,如果超過 200 個字符,則拒絕它。

您的 JavaScript 代碼只是為了提供 UI。實際檢查應該在服務器端的實際數據上進行。


在評論中你說:

好吧,我曾經在 php 中檢查輸入,strlen但問題是:jslength每次都給我另一個值然后 php strlen。因此,當用戶收到類似2 個字符的消息時,他提交數據并且 php 拒絕了它,因為strlen在 php 中比 js 多 5 個字符length

這可能有多種原因,這里有兩種可能性:

  1. 行尾的差異。一些平臺使用\r\n(兩個字符)其他平臺使用\n(一個字符)(舊的 Mac OS 使用\r,但那是幾年前的事了)。您可以在計數時將它們標準化:

    var content = tinymce.trim(body.innerText || body.textContent);
    content = content.replace(/\r\n|\r|\n/g, "\n");
    return content.length;

    (然后在 PHP 端也是同樣的事情。)

  2. PHP 字符串每個字符一個字節,但這不是當今世界的現實。(我不知道您是否使用了intlmbstring擴展,但如果沒有,您可能想查看它們。)相比之下,JavaScript 的字符串是 UTF-16 (但它們容忍通常應該成對的孤立代理),例如,這意味著許多在 JavaScript 中算作一個字符的字符在 PHP 中算作不止一個字符。mbstring擴展程序的功能mb_strlen或類似功能可能會有所幫助。(一些“字符”甚至在 JavaScript 中需要兩個或更多字符,因為它們使用代理對表示和/或因為它們使用組合標記,這些標記在 Unicode 中是每個單獨的代碼點。)


查看完整回答
反對 回復 2022-10-21
  • 1 回答
  • 0 關注
  • 100 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號