Originalmente, se puede hacer clic en el enlace <a> en un archivo PHP HTML. Ahora necesito agregar PHP "if-else" para hacer que <a> no se pueda hacer clic en función de alguna condición. ¿Cómo puedo lograr esto de una manera segura?
<? if (condition) : ?> <a> is clickable ( by using this.container.on('click', '.class-point-to-a-link', function (e) { e.preventDefault(); e.stopPropagation(); ) <? else: ?> probably using <span> or disable the link using css? <? endif; ?>Tengo varios pensamientos, pero no estoy seguro de cuál es la mejor práctica o cómo lo harían ustedes.
en la rama else, no usaré la etiqueta <a>, sino que usaré <span> o alguna otra etiqueta, por lo que javascript on("click"...) no encontrará el intervalo y no se activará la acción en absoluto. Pero me preocupa la seguridad de que alguien pueda inspeccionar y cambiar el intervalo a <a>, entonces el enlace funcionará.
agregar algo de CSS al <a> para que no se pueda hacer clic? Tengo el mismo problema de seguridad.
dentro de la parte on("click"...), agregaré la condición una vez más en función de los datos del backend. Este es el mejor método en el que puedo pensar, pero ¿hay una mejor manera de no aplicar la "condición if-else" dos veces?
Esta es una pregunta con varias preguntas pequeñas.
Es más seguro no generar enlaces en su código PHP a menos que desee que estén activos; si el enlace está en el código, pero está deshabilitado u oculto, es muy fácil encontrarlo simplemente viendo el código fuente de la página. Cualquier atacante normalmente hará esto como una de las primeras herramientas en su arsenal.
La forma más concisa de incluir/eliminar enlaces en línea en PHP es el operador ternario. Por ejemplo:
echo ($enabled ? '<a href="https://example.com/url">' : '') . 'The text that would be inside the link.' . ($enabled ? '</a>' : ''); O si no le gusta el operador ternario, puede hacerlo de forma más larga con sentencias if :
if ($enabled) echo '<a href="https://example.com/url">'; echo 'The text that would be inside the link.'; if ($enabled) echo '</a>';El operador ternario a menudo mejora la concisión, pero a veces puede dificultar la legibilidad, aunque esto es una cuestión de opinión. Lo uso con moderación por este motivo.
De cualquier manera que lo haga, el usuario no solo nunca verá el enlace, sino que el enlace no estará en ninguna parte del código fuente de la página, a menos que usted quiera que lo esté.
Si existe algún riesgo de seguridad asociado con el hecho de que las personas puedan visitar ese enlace cuando usted no quiere que lo hagan, esta es la única forma en que lo implementaría. Lo mejor es suponer que cualquier usuario con intenciones maliciosas encontrará cualquier URL relevante en el código y lo escribirá manualmente. Por supuesto, no me detendría en eso, por seguridad, porque si es posible que el usuario vea cómo funciona su sitio, es decir, si el enlace a veces les aparece y pueden deducir la lógica y la estructura de su esquema de URL , también podrán descubrir cómo formar nuevas URL de forma dinámica, por lo que si hay alguna URL a la que no desea que accedan ciertas personas, supongo que alguien intentará acceder a ella e incorporar medidas de seguridad en el script para esa URL en sí. Incluso es posible que desee volverse completamente paranoico (¡lo recomiendo! ¡Los piratas informáticos son inteligentes!) .
Puede agregar una clase a la etiqueta para que no se pueda hacer clic en ella
Algo como:
# php <a class="<?php if (!$isEnabled) { echo "disabled" } ?>">Link</a> # css a.disabled { pointer-events: none; cursor: default; }