Skip to content

Commit

Permalink
fix: Prevent tabnabbing in markdown
Browse files Browse the repository at this point in the history
  • Loading branch information
meltyshev committed Aug 30, 2022
1 parent 1a6fc40 commit 3379c65
Showing 1 changed file with 17 additions and 10 deletions.
27 changes: 17 additions & 10 deletions client/src/lib/custom-ui/components/Markdown/Markdown.jsx
Expand Up @@ -6,6 +6,8 @@ import remarkBreaks from 'remark-breaks';

import './Markdown.module.scss'; // FIXME: import as styles?

const ABSOLUTE_URL_REGEX = /^(?:https?:)?\/\//i;

const Markdown = React.memo(({ linkStopPropagation, ...props }) => {
const handleLinkClick = useCallback((event) => {
event.stopPropagation();
Expand All @@ -16,25 +18,30 @@ const Markdown = React.memo(({ linkStopPropagation, ...props }) => {
jsx-a11y/click-events-have-key-events,
jsx-a11y/no-static-element-interactions,
react/jsx-props-no-spreading */
({ node, ...linkProps }) => <a {...linkProps} onClick={handleLinkClick} />,
({ node, ...linkProps }) => (
<a
{...linkProps}
rel={
ABSOLUTE_URL_REGEX.test(linkProps.href) && linkProps.target === '_blank'
? 'noreferrer'
: undefined
}
onClick={linkStopPropagation ? handleLinkClick : undefined}
/>
),
/* eslint-enable jsx-a11y/anchor-has-content,
jsx-a11y/click-events-have-key-events,
jsx-a11y/no-static-element-interactions,
react/jsx-props-no-spreading */
[handleLinkClick],
[linkStopPropagation, handleLinkClick],
);

let components;
if (linkStopPropagation) {
components = {
a: linkRenderer,
};
}

return (
<ReactMarkdown
{...props} // eslint-disable-line react/jsx-props-no-spreading
components={components}
components={{
a: linkRenderer,
}}
remarkPlugins={[remarkGfm, remarkBreaks]}
className="markdown-body"
/>
Expand Down

0 comments on commit 3379c65

Please sign in to comment.